8000 ChromeDriver and PhantomJS builders now also look for linux executabl… · seleniumQuery/seleniumQuery@aeaa0b6 · GitHub
[go: up one dir, main page]

Skip to content

Commit aeaa0b6

Browse files
committed
ChromeDriver and PhantomJS builders now also look for linux executables in the classpath - closes #81
1 parent 9f1b168 commit aeaa0b6

File tree

4 files changed

+70
-20
lines changed

4 files changed

+70
-20
lines changed

src/main/java/io/github/seleniumquery/browser/driver/builders/ChromeDriverBuilder.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.github.seleniumquery.SeleniumQueryException;
44
import io.github.seleniumquery.browser.driver.DriverBuilder;
5+
import org.apache.commons.logging.Log;
6+
import org.apache.commons.logging.LogFactory;
57
import org.openqa.selenium.WebDriver;
68
import org.openqa.selenium.chrome.ChromeDriver;
79
import org.openqa.selenium.chrome.ChromeOptions;
@@ -21,6 +23,8 @@
2123
*/
2224
public class ChromeDriverBuilder extends DriverBuilder<ChromeDriverBuilder> {
2325

26+
private static final Log LOGGER = LogFactory.getLog(ChromeDriverBuilder.class);
27+
2428
private static final String CHROME_DRIVER_EXECUTABLE_SYSTEM_PROPERTY = "webdriver.chrome.driver";
2529

2630
private static final String EXCEPTION_MESSAGE = " \nDownload the latest release at http://chromedriver.storage.googleapis.com/index.html and place it: \n" +
@@ -32,7 +36,9 @@ public class ChromeDriverBuilder extends DriverBuilder<ChromeDriverBuilder> {
3236

3337
private static final String BAD_PATH_PROVIDED_EXCEPTION_MESSAGE = "The ChromeDriver Server executable file was not found (or is a directory) at \"%s\"." + EXCEPTION_MESSAGE;
3438

35-
static String CHROMEDRIVER_EXE = "chromedriver.exe"; // package visibility so it can be changed during test
39+
// package visibility so they can be changed during test
40+
static String CHROMEDRIVER_EXECUTABLE_WINDOWS = "chromedriver.exe";
41+
static String CHROMEDRIVER_EXECUTABLE_LINUX = "chromedriver";
3642

3743

3844
private String customPathToChromeDriver;
@@ -74,9 +80,11 @@ protected WebDriver build() {
7480
overwriteCapabilityIfValueNotNull(capabilities, ChromeOptions.CAPABILITY, this.chromeOptions);
7581

7682
if (customPathWasProvidedAndExecutableExistsThere(this.customPathToChromeDriver, BAD_PATH_PROVIDED_EXCEPTION_MESSAGE)) {
77-
System.setProperty(CHROME_DRIVER_EXECUTABLE_SYSTEM_PROPERTY, getFullPath(this.customPathToChromeDriver));
78-
} else if (executableExistsInClasspath(CHROMEDRIVER_EXE)) {
79-
System.setProperty(CHROME_DRIVER_EXECUTABLE_SYSTEM_PROPERTY, getFullPathForFileInClasspath(CHROMEDRIVER_EXE));
83+
setExecutableSystemProperty(getFullPath(this.customPathToChromeDriver));
84+
} else if (executableExistsInClasspath(CHROMEDRIVER_EXECUTABLE_WINDOWS)) {
85+
setExecutableSystemProperty(getFullPathForFileInClasspath(CHROMEDRIVER_EXECUTABLE_WINDOWS));
86+
} else if (executableExistsInClasspath(CHROMEDRIVER_EXECUTABLE_LINUX)) {
87+
setExecutableSystemProperty(getFullPathForFileInClasspath(CHROMEDRIVER_EXECUTABLE_LINUX));
8088
}
8189
try {
8290
return new ChromeDriver(capabilities);
@@ -86,12 +94,17 @@ protected WebDriver build() {
8694
}
8795
}
8896

97+
private void setExecutableSystemProperty(String executableFullPath) {
98+
LOGGER.debug("Loading ChromeDriver executable from "+executableFullPath);
99+
System.setProperty(CHROME_DRIVER_EXECUTABLE_SYSTEM_PROPERTY, executableFullPath);
100+
}
101+
89102
private void throwCustomExceptionIfExecutableWasNotFound(IllegalStateException e) {
90103
if (e.getMessage().contains("path to the driver executable must be set")) {
91104
throw new SeleniumQueryException(
92105
format(
93-
"The ChromeDriver server executable (%s) was not found in the classpath, in the \"%s\" system property or in the system's PATH variable. %s",
94-
CHROMEDRIVER_EXE, CHROME_DRIVER_EXECUTABLE_SYSTEM_PROPERTY, EXCEPTION_MESSAGE
106+
"The ChromeDriver server executable (%s/%s) was not found in the classpath, in the \"%s\" system property or in the system's PATH variable. %s",
107+
CHROMEDRIVER_EXECUTABLE_WINDOWS, CHROMEDRIVER_EXECUTABLE_LINUX, CHROME_DRIVER_EXECUTABLE_SYSTEM_PROPERTY, EXCEPTION_MESSAGE
95108
), e);
96109
}
97110
}

src/main/java/io/github/seleniumquery/browser/driver/builders/PhantomJSDriverBuilder.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.github.seleniumquery.SeleniumQueryException;
44
import io.github.seleniumquery.browser.driver.DriverBuilder;
5 67F4 +
import org.apache.commons.logging.Log;
6+
import org.apache.commons.logging.LogFactory;
57
import org.openqa.selenium.WebDriver;
68
import org.openqa.selenium.phantomjs.PhantomJSDriver;
79
import org.openqa.selenium.remote.DesiredCapabilities;
@@ -18,6 +20,8 @@
1820
*/
1921
public class PhantomJSDriverBuilder extends DriverBuilder<PhantomJSDriverBuilder> {
2022

23+
private static final Log LOGGER = LogFactory.getLog(PhantomJSDriverBuilder.class);
24+
2125
private static final String PHANTOMJS_EXECUTABLE_SYSTEM_PROPERTY = "phantomjs.binary.path";
2226

2327
private static final String EXCEPTION_MESSAGE = " \nDownload the latest release at http://phantomjs.org/download.html and place it: \n" +
@@ -30,7 +34,9 @@ public class PhantomJSDriverBuilder extends DriverBuilder<PhantomJSDriverBuilder
3034

3135
private static final String BAD_PATH_PROVIDED_EXCEPTION_MESSAGE = "The PhantomJS executable file was not found (or is a directory) at \"%s\"." + EXCEPTION_MESSAGE;
3236

33-
static String PHANTOMJS_EXE = "phantomjs.exe"; // package visibility so it can be changed during test
37+
// package visibility so they can be changed during test
38+
static String PHANTOMJS_EXECUTABLE_WINDOWS = "phantomjs.exe";
39+
static String PHANTOMJS_EXECUTABLE_LINUX = "phantomjs";
3440

3541
private String customPathToPhantomJs;
3642

@@ -49,9 +55,11 @@ protected WebDriver build() {
4955
DesiredCapabilities capabilities = capabilities(new DesiredCapabilities());
5056

5157
if (customPathWasProvidedAndExecutableExistsThere(this.customPathToPhantomJs, BAD_PATH_PROVIDED_EXCEPTION_MESSAGE)) {
52-
System.setProperty(PHANTOMJS_EXECUTABLE_SYSTEM_PROPERTY, getFullPath(this.customPathToPhantomJs));
53-
} else if (executableExistsInClasspath(PHANTOMJS_EXE)) {
54-
System.setProperty(PHANTOMJS_EXECUTABLE_SYSTEM_PROPERTY, getFullPathForFileInClasspath(PHANTOMJS_EXE));
58+
setExecutableSystemProperty(getFullPath(this.customPathToPhantomJs));
59+
} else if (executableExistsInClasspath(PHANTOMJS_EXECUTABLE_WINDOWS)) {
60+
setExecutableSystemProperty(getFullPathForFileInClasspath(PHANTOMJS_EXECUTABLE_WINDOWS));
61+
} else if (executableExistsInClasspath(PHANTOMJS_EXECUTABLE_LINUX)) {
62+
setExecutableSystemProperty(getFullPathForFileInClasspath(PHANTOMJS_EXECUTABLE_LINUX));
5563
}
5664
try {
5765
return new PhantomJSDriver(capabilities);
@@ -61,12 +69,17 @@ protected WebDriver build() {
6169
}
6270
}
6371

72+
private void setExecutableSystemProperty(String executableFullPath) {
73+
LOGGER.debug("Loading PhantomJS executable from "+executableFullPath);
74+
System.setProperty(PHANTOMJS_EXECUTABLE_SYSTEM_PROPERTY, executableFullPath);
75+
}
76+
6477
private void throwCustomExceptionIfExecutableWasNotFound(IllegalStateException e) {
6578
if (e.getMessage().contains("path to the driver executable must be set")) {
6679
throw new SeleniumQueryException(
6780
format(
68-
"The PhantomJS executable (%s) was not found in the classpath, in the \"%s\" system property or in the system's PATH variable. %s",
69-
PHANTOMJS_EXE, PHANTOMJS_EXECUTABLE_SYSTEM_PROPERTY, EXCEPTION_MESSAGE
81+
"The PhantomJS executable (%s/%s) was not found in the classpath, in the \"%s\" system property or in the system's PATH variable. %s",
82+
PHANTOMJS_EXECUTABLE_WINDOWS, PHANTOMJS_EXECUTABLE_LINUX, PHANTOMJS_EXECUTABLE_SYSTEM_PROPERTY, EXCEPTION_MESSAGE
7083
), e);
7184
}
7285
}

src/test/java/io/github/seleniumquery/browser/driver/builders/ChromeDriverBuilderTest.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.seleniumquery.browser.driver.builders;
22

33
import org.junit.After;
4-
import org.junit.Before;
4+
import org.junit.BeforeClass;
55
import org.junit.Test;
66
import org.openqa.selenium.chrome.ChromeOptions;
77
import org.openqa.selenium.remote.DesiredCapabilities;
@@ -14,15 +14,23 @@
1414

1515
public class ChromeDriverBuilderTest {
1616

17-
String chromeExecutable = ChromeDriverBuilder.CHROMEDRIVER_EXE;
17+
static String chromeExecutable = ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_WINDOWS;
18+
static String originalPathWindows;
19+
static String originalPathLinux;
1820

19-
@Before
20-
public void setUp() throws Exception {
21-
System.out.println("OS: "+System.getProperty("os.name"));
21+
@BeforeClass
22+
public static void setUp() throws Exception {
23+
if (!System.getProperty("os.name").toLowerCase().contains("win")) {
24+
chromeExecutable = ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_LINUX;
25+
}
26+
originalPathWindows = ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_WINDOWS;
27+
originalPathLinux = ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_LINUX;
2228
}
2329

2430
@After
2531
public void tearDown() throws Exception {
32+
ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_WINDOWS = originalPathWindows;
33+
ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_LINUX = originalPathLinux;
2634
$.quit();
2735
}
2836

@@ -70,7 +78,8 @@ public void withPathToChromeDriver() {
7078
@Test
7179
public void useChrome__should_fall_back_to_systemProperty_when_executable_not_found_in_classpath() {
7280
// given
73-
ChromeDriverBuilder.CHROMEDRIVER_EXE = "not-in-classpath.txt";
81+
ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_WINDOWS = "not-in-classpath.txt";
82+
ChromeDriverBuilder.CHROMEDRIVER_EXECUTABLE_LINUX = "not-in-classpath.txt";
7483
System.setProperty("webdriver.chrome.driver", getFullPathForFileInClasspath(chromeExecutable));
7584
// when
7685
$.driver().useChrome();

src/test/java/io/github/seleniumquery/browser/driver/builders/PhantomJSDriverBuilderTest.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.github.seleniumquery.SeleniumQueryBrowserTest;
44
import org.junit.After;
5+
import org.junit.BeforeClass;
56
import org.junit.Test;
67
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
78
import org.openqa.selenium.remote.DesiredCapabilities;
@@ -14,10 +15,23 @@
1415

1516
public class PhantomJSDriverBuilderTest {
1617

17-
String phantomExecutable = PhantomJSDriverBuilder.PHANTOMJS_EXE;
18+
static String phantomExecutable = PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_WINDOWS;
19+
static String originalPathWindows;
20+
static String originalPathLinux;
21+
22+
@BeforeClass
23+
public static void setUp() throws Exception {
24+
if (!System.getProperty("os.name").toLowerCase().contains("win")) {
25+
phantomExecutable = PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_LINUX;
26+
}
27+
originalPathWindows = PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_WINDOWS;
28+
originalPathLinux = PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_LINUX;
29+
}
1830

1931
@After
2032
public void tearDown() throws Exception {
33+
PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_WINDOWS = originalPathWindows;
34+
PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_LINUX = originalPathLinux;
2135
$.quit();
2236
}
2337

@@ -51,7 +65,8 @@ public void withPathToPhantomJS() {
5165
@Test
5266
public void usePhantomJS__should_fall_back_to_systemProperty_when_executable_not_found_in_classpath() {
5367
// given
54-
PhantomJSDriverBuilder.PHANTOMJS_EXE = "not-in-classpath.txt";
68+
PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_WINDOWS = "not-in-classpath.txt";
69+
PhantomJSDriverBuilder.PHANTOMJS_EXECUTABLE_LINUX = "not-in-classpath.txt";
5570
System.setProperty("phantomjs.binary.path", getFullPathForFileInClasspath(phantomExecutable));
5671
// when
5772
$.driver().usePhantomJS();

0 commit comments

Comments
 (0)
0