Skip to content

Commit c2f94b1

Browse files
committed
Added provider to get and configure WebDriver. Additionally added DownloadManager class to handle Downloads
1 parent 4be1123 commit c2f94b1

File tree

6 files changed

+167
-27
lines changed

6 files changed

+167
-27
lines changed

.github/workflows/default.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ jobs:
3131
run: chmod +x ./mvnw
3232

3333
- name: Build
34-
run: ./mvnw clean package
34+
run: ./mvnw clean package -DargLine="-Dselenium.headless=true"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.toolisticon.pogen4selenium.runtime;
2+
3+
import java.io.File;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
8+
public class DownloadManager {
9+
10+
private final File downloadFolder;
11+
12+
private DownloadManager(File downloadFolder) {
13+
14+
if (downloadFolder == null || !downloadFolder.isDirectory()) {
15+
throw new IllegalArgumentException("Passed file must not be null and represent a drirectory");
16+
}
17+
18+
this.downloadFolder = downloadFolder;
19+
}
20+
21+
public File findDownload (String nameRegex) {
22+
23+
List<File> matchingFiles = Arrays.stream(this.downloadFolder.listFiles())
24+
.filter(e -> !e.isDirectory())
25+
.filter(e -> e.getName().matches(nameRegex))
26+
.collect(Collectors.toList());
27+
28+
return matchingFiles.isEmpty() ? null : matchingFiles.get(0);
29+
30+
}
31+
32+
public static DownloadManager get(File downloadFolder) {
33+
return new DownloadManager(downloadFolder);
34+
}
35+
36+
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package io.toolisticon.pogen4selenium.runtime;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
import org.openqa.selenium.WebDriver;
9+
import org.openqa.selenium.chrome.ChromeDriver;
10+
import org.openqa.selenium.chrome.ChromeOptions;
11+
import org.openqa.selenium.edge.EdgeDriver;
12+
import org.openqa.selenium.edge.EdgeOptions;
13+
14+
15+
public class WebDriverProvider {
16+
17+
private final static String PROPERTY_NAME_BROWSER = "selenium.browser";
18+
private final static String PROPERTY_NAME_BROWSER_LOCATION = "selenium.browserLocation";
19+
private final static String PROPERTY_NAME_HEADLESS = "selenium.headless";
20+
21+
public enum Browser {
22+
EDGE,
23+
CHROME;
24+
}
25+
26+
27+
public static WebDriver getDriver(String ... additionalArguments) {
28+
return getDriver(null, additionalArguments);
29+
}
30+
31+
public static WebDriver getDriver(File tempDir, String ... additionalArguments) {
32+
33+
34+
Browser browser = Browser.valueOf(System.getProperty(PROPERTY_NAME_BROWSER, Browser.CHROME.name()).toUpperCase());
35+
String browserLocation = System.getProperty(PROPERTY_NAME_BROWSER_LOCATION);
36+
String headless = System.getProperty(PROPERTY_NAME_HEADLESS, "false");
37+
38+
switch(browser) {
39+
40+
41+
case EDGE: {
42+
43+
44+
EdgeOptions options = new EdgeOptions();
45+
46+
// set temporary download directory
47+
if (tempDir != null) {
48+
Map<String, Object> prefs = new HashMap<String, Object>();
49+
try {
50+
prefs.put("download.default_directory", tempDir.getCanonicalPath());
51+
} catch (IOException e) {
52+
e.printStackTrace();
53+
}
54+
options.setExperimentalOption("prefs", prefs);
55+
}
56+
57+
58+
options.addArguments("--window-size=1024,768");
59+
60+
options.addArguments(additionalArguments);
61+
62+
if(browserLocation != null) {
63+
options.setBinary(browserLocation);
64+
}
65+
if(Boolean.valueOf(headless)) {
66+
options.addArguments("headless");
67+
}
68+
69+
// de language
70+
71+
return new EdgeDriver(options);
72+
73+
}
74+
75+
case CHROME:
76+
default: {
77+
78+
79+
ChromeOptions chromeOptions = new ChromeOptions();
80+
81+
chromeOptions.addArguments("--no-sandbox");
82+
chromeOptions.addArguments("--disable-dev-shm-usage");
83+
chromeOptions.addArguments("--accept-lang=de-DE");
84+
chromeOptions.addArguments("--window-size=1024,768");
85+
86+
87+
chromeOptions.addArguments(additionalArguments);
88+
89+
// set temporary download directory
90+
if (tempDir != null) {
91+
Map<String, Object> prefs = new HashMap<String, Object>();
92+
try {
93+
prefs.put("download.default_directory", tempDir.getCanonicalPath());
94+
} catch (IOException e) {
95+
e.printStackTrace();
96+
}
97+
chromeOptions.setExperimentalOption("prefs", prefs);
98+
}
99+
100+
101+
if(browserLocation != null) {
102+
chromeOptions.setBinary(browserLocation);
103+
}
104+
105+
if(Boolean.valueOf(headless)) {
106+
chromeOptions.addArguments("--headless=new");
107+
}
108+
109+
110+
111+
112+
return new ChromeDriver(chromeOptions);
113+
114+
}
115+
116+
}
117+
118+
}
119+
120+
121+
}

pogen4selenium-example/src/test/java/io/toolisticon/pogen4selenium/example/googlesearch/GoogleSearchTest.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.toolisticon.pogen4selenium.example.googlesearch;
22

3-
import java.time.Duration;
43
import java.util.List;
54

65
import org.hamcrest.MatcherAssert;
@@ -10,25 +9,18 @@
109
import org.junit.Ignore;
1110
import org.junit.Test;
1211
import org.openqa.selenium.WebDriver;
13-
import org.openqa.selenium.chrome.ChromeDriver;
14-
import org.openqa.selenium.chrome.ChromeOptions;
15-
import org.openqa.selenium.edge.EdgeDriver;
1612

1713
import io.toolisticon.pogen4selenium.example.googleseach.GoogleInitialPage;
1814
import io.toolisticon.pogen4selenium.example.googleseach.GoogleSearchResult;
15+
import io.toolisticon.pogen4selenium.runtime.WebDriverProvider;
1916

2017
public class GoogleSearchTest {
2118

2219
private WebDriver webDriver;
2320

2421
@Before
2522
public void init() throws Exception{
26-
27-
ChromeOptions chromeOptions = new ChromeOptions();
28-
chromeOptions.addArguments("--headless=new");
29-
30-
webDriver = new ChromeDriver(chromeOptions);
31-
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
23+
webDriver = WebDriverProvider.getDriver();
3224
}
3325

3426
@After

pogen4selenium-example/src/test/java/io/toolisticon/pogen4selenium/example/withoutpagefactory/TestPageTest.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
import org.junit.Before;
1010
import org.junit.Test;
1111
import org.openqa.selenium.WebDriver;
12-
import org.openqa.selenium.chrome.ChromeDriver;
13-
import org.openqa.selenium.chrome.ChromeOptions;
14-
import org.openqa.selenium.edge.EdgeDriver;
1512

1613
import io.toolisticon.pogen4selenium.example.JettyServer;
14+
import io.toolisticon.pogen4selenium.runtime.WebDriverProvider;
1715

1816
public class TestPageTest {
1917

@@ -26,12 +24,10 @@ public void init() throws Exception{
2624

2725
jettyServer = new JettyServer();
2826
jettyServer.start();
29-
30-
ChromeOptions chromeOptions = new ChromeOptions();
31-
chromeOptions.addArguments("--headless=new");
32-
33-
webDriver = new ChromeDriver(chromeOptions);
34-
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
27+
28+
webDriver = WebDriverProvider.getDriver();
29+
//webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
30+
3531
}
3632

3733
@After

pogen4selenium-example/src/test/java/io/toolisticon/pogen4selenium/example/withpagefactory/TestPageTest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
import org.junit.Before;
1010
import org.junit.Test;
1111
import org.openqa.selenium.WebDriver;
12-
import org.openqa.selenium.chrome.ChromeDriver;
13-
import org.openqa.selenium.chrome.ChromeOptions;
14-
import org.openqa.selenium.edge.EdgeDriver;
1512

1613
import io.toolisticon.pogen4selenium.example.JettyServer;
14+
import io.toolisticon.pogen4selenium.runtime.WebDriverProvider;
1715

1816
public class TestPageTest {
1917

@@ -27,11 +25,8 @@ public void init() throws Exception{
2725
jettyServer = new JettyServer();
2826
jettyServer.start();
2927

30-
ChromeOptions chromeOptions = new ChromeOptions();
31-
chromeOptions.addArguments("--headless=new");
28+
webDriver = WebDriverProvider.getDriver();
3229

33-
webDriver = new ChromeDriver(chromeOptions);
34-
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
3530
}
3631

3732
@After

0 commit comments

Comments
 (0)