diff --git a/build.gradle b/build.gradle index a1633d0e35..a76114790f 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ configurations { dependencies { compile group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '1.7.2' compile('org.apache.httpcomponents:httpcore:4.4.7') - compile('org.seleniumhq.selenium:selenium-java:3.5.3') { + compile('org.seleniumhq.selenium:selenium-java:3.6.0') { exclude group: 'org.seleniumhq.selenium', module: 'selenium-android-driver' exclude group: 'org.seleniumhq.selenium', module: 'selenium-iphone-driver' exclude group: 'org.seleniumhq.selenium', module: 'selenium-safari-driver' @@ -58,7 +58,7 @@ dependencies { compile 'com.google.guava:guava:23.0' runtime 'commons-codec:commons-codec:1.10' provided group: 'org.seleniumhq.selenium', name: 'htmlunit-driver', version: '2.27', transitive: false - provided group: 'net.sourceforge.htmlunit', name: 'htmlunit', version: '2.27', transitive: false + provided group: 'net.sourceforge.htmlunit', name: 'htmlunit', version: '2.27' testRuntime group: 'net.sourceforge.htmlunit', name: 'htmlunit', version: '2.27', transitive: false compile('net.lightbody.bmp:browsermob-core:2.1.5') testRuntime group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25', transitive: false @@ -66,7 +66,7 @@ dependencies { provided 'junit:junit:4.12' provided 'org.testng:testng:6.9.10' - testCompile group: 'org.seleniumhq.selenium', name: 'selenium-server', version: '3.5.3', transitive: false + testCompile group: 'org.seleniumhq.selenium', name: 'selenium-server', version: '3.6.0', transitive: false testCompile 'org.mockito:mockito-core:2.10.0' testCompile 'org.seleniumhq.selenium:jetty-repacked:9.4.5.v20170502' testCompile 'org.eclipse.jetty:jetty-server:9.4.5.v20170502' diff --git a/src/main/java/com/codeborne/selenide/Configuration.java b/src/main/java/com/codeborne/selenide/Configuration.java index 1901bffe5b..0aefcca45a 100644 --- a/src/main/java/com/codeborne/selenide/Configuration.java +++ b/src/main/java/com/codeborne/selenide/Configuration.java @@ -358,5 +358,11 @@ public enum FileDownloadMode { */ public static boolean driverManagerEnabled = Boolean.parseBoolean(System.getProperty("selenide.driverManagerEnabled", "true")); - + /** + * Enables the ability to run the browser in headless mode. + * Works only for Chrome(59+) and Firefox(56+). + * + * Default: false + */ + public static boolean headless = Boolean.parseBoolean(System.getProperty("selenide.headless", "false")); } diff --git a/src/main/java/com/codeborne/selenide/SelenideElement.java b/src/main/java/com/codeborne/selenide/SelenideElement.java index 07e523cdd2..b8a19ca142 100644 --- a/src/main/java/com/codeborne/selenide/SelenideElement.java +++ b/src/main/java/com/codeborne/selenide/SelenideElement.java @@ -15,7 +15,7 @@ */ public interface SelenideElement extends WebElement, FindsByLinkText, FindsById, FindsByName, FindsByTagName, FindsByClassName, FindsByCssSelector, - FindsByXPath, WrapsDriver, WrapsElement, Locatable { + FindsByXPath, WrapsDriver, WrapsElement, org.openqa.selenium.interactions.internal.Locatable { /** *

diff --git a/src/main/java/com/codeborne/selenide/impl/WebDriverThreadLocalContainer.java b/src/main/java/com/codeborne/selenide/impl/WebDriverThreadLocalContainer.java index ea4d6980f2..984372bfb4 100644 --- a/src/main/java/com/codeborne/selenide/impl/WebDriverThreadLocalContainer.java +++ b/src/main/java/com/codeborne/selenide/impl/WebDriverThreadLocalContainer.java @@ -4,7 +4,6 @@ import com.codeborne.selenide.proxy.SelenideProxyServer; import com.codeborne.selenide.webdriver.WebDriverFactory; import org.openqa.selenium.*; -import org.openqa.selenium.internal.Killable; import org.openqa.selenium.remote.UnreachableBrowserException; import org.openqa.selenium.support.events.EventFiringWebDriver; import org.openqa.selenium.support.events.WebDriverEventListener; @@ -23,7 +22,6 @@ import static com.codeborne.selenide.impl.Describe.describe; import static java.lang.Thread.currentThread; import static java.util.logging.Level.FINE; -import static java.util.logging.Level.SEVERE; public class WebDriverThreadLocalContainer implements WebDriverContainer { private static final Logger log = Logger.getLogger(WebDriverThreadLocalContainer.class.getName()); @@ -127,7 +125,7 @@ protected void closeWebDriver(Thread thread) { ALL_WEB_DRIVERS_THREADS.remove(thread); WebDriver webdriver = THREAD_WEB_DRIVER.remove(thread.getId()); SelenideProxyServer proxy = THREAD_PROXY_SERVER.remove(thread.getId()); - + if (webdriver != null && !holdBrowserOpen) { log.info("Close webdriver: " + thread.getId() + " -> " + webdriver); if (proxy != null) { @@ -185,25 +183,12 @@ public void run() { catch (WebDriverException cannotCloseBrowser) { log.severe("Cannot close browser normally: " + Cleanup.of.webdriverExceptionMessage(cannotCloseBrowser)); } - finally { - killBrowser(webdriver); - } - + if (proxy != null) { log.info("Trying to shutdown " + proxy + " ..."); proxy.shutdown(); } } - - protected void killBrowser(WebDriver webdriver) { - if (webdriver instanceof Killable) { - try { - ((Killable) webdriver).kill(); - } catch (Exception e) { - log.log(SEVERE, "Failed to kill browser " + webdriver + ':', e); - } - } - } } @Override @@ -231,7 +216,7 @@ public String getCurrentFrameUrl() { protected WebDriver createDriver() { Proxy userProvidedProxy = proxy; - + if (Configuration.fileDownload == PROXY) { SelenideProxyServer selenideProxyServer = new SelenideProxyServer(proxy); selenideProxyServer.start(); @@ -242,7 +227,7 @@ protected WebDriver createDriver() { WebDriver webdriver = factory.createWebDriver(userProvidedProxy); log.info("Create webdriver in current thread " + currentThread().getId() + ": " + - describe(webdriver) + " -> " + webdriver); + describe(webdriver) + " -> " + webdriver); return markForAutoClose(addListeners(webdriver)); } diff --git a/src/main/java/com/codeborne/selenide/webdriver/AbstractDriverFactory.java b/src/main/java/com/codeborne/selenide/webdriver/AbstractDriverFactory.java index 1606d29898..4b0078af2b 100644 --- a/src/main/java/com/codeborne/selenide/webdriver/AbstractDriverFactory.java +++ b/src/main/java/com/codeborne/selenide/webdriver/AbstractDriverFactory.java @@ -1,23 +1,20 @@ package com.codeborne.selenide.webdriver; -import static com.codeborne.selenide.Configuration.browserVersion; -import static com.codeborne.selenide.Configuration.pageLoadStrategy; -import static com.codeborne.selenide.WebDriverRunner.isPhantomjs; -import static org.openqa.selenium.remote.CapabilityType.ACCEPT_SSL_CERTS; -import static org.openqa.selenium.remote.CapabilityType.PROXY; -import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_ALERTS; -import static org.openqa.selenium.remote.CapabilityType.TAKES_SCREENSHOT; - import com.codeborne.selenide.WebDriverProvider; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.logging.Logger; import org.openqa.selenium.Capabilities; import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.logging.Logger; + +import static com.codeborne.selenide.Configuration.browserVersion; +import static com.codeborne.selenide.Configuration.pageLoadStrategy; +import static com.codeborne.selenide.WebDriverRunner.isPhantomjs; +import static org.openqa.selenium.remote.CapabilityType.*; + abstract class AbstractDriverFactory { private static final Logger log = Logger.getLogger(AbstractDriverFactory.class.getName()); @@ -31,7 +28,6 @@ WebDriver createInstanceOf(final String className, final Proxy proxy) { DesiredCapabilities capabilities = createCommonCapabilities(proxy); capabilities.setJavascriptEnabled(true); capabilities.setCapability(TAKES_SCREENSHOT, true); - capabilities.setCapability(ACCEPT_SSL_CERTS, true); capabilities.setCapability(SUPPORTS_ALERTS, true); if (isPhantomjs()) { capabilities.setCapability("phantomjs.cli.args", // PhantomJSDriverService.PHANTOMJS_CLI_ARGS == "phantomjs.cli.args" @@ -66,14 +62,15 @@ DesiredCapabilities createCommonCapabilities(final Proxy proxy) { if (browserVersion != null && !browserVersion.isEmpty()) { browserCapabilities.setVersion(browserVersion); } - browserCapabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, pageLoadStrategy); - browserCapabilities.setCapability("acceptSslCerts", true); + browserCapabilities.setCapability(PAGE_LOAD_STRATEGY, pageLoadStrategy); + browserCapabilities.setCapability(ACCEPT_SSL_CERTS, true); - browserCapabilities = transferCapabilitiesFromSystemProperties(browserCapabilities, "capabilities."); + transferCapabilitiesFromSystemProperties(browserCapabilities); return browserCapabilities; } - private DesiredCapabilities transferCapabilitiesFromSystemProperties(DesiredCapabilities currentBrowserCapabilities, String prefix) { + private void transferCapabilitiesFromSystemProperties(DesiredCapabilities currentBrowserCapabilities) { + String prefix = "capabilities."; for (String key : System.getProperties().stringPropertyNames()) { if (key.startsWith(prefix)) { String capability = key.substring(prefix.length()); @@ -88,6 +85,5 @@ private DesiredCapabilities transferCapabilitiesFromSystemProperties(DesiredCapa } } } - return currentBrowserCapabilities; } } diff --git a/src/main/java/com/codeborne/selenide/webdriver/ChromeDriverFactory.java b/src/main/java/com/codeborne/selenide/webdriver/ChromeDriverFactory.java index d868f12dee..47549badf8 100644 --- a/src/main/java/com/codeborne/selenide/webdriver/ChromeDriverFactory.java +++ b/src/main/java/com/codeborne/selenide/webdriver/ChromeDriverFactory.java @@ -4,15 +4,12 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; -import org.openqa.selenium.remote.DesiredCapabilities; -import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; -import static com.codeborne.selenide.Configuration.browser; -import static com.codeborne.selenide.Configuration.chromeSwitches; +import static com.codeborne.selenide.Configuration.*; import static com.codeborne.selenide.WebDriverRunner.CHROME; class ChromeDriverFactory extends AbstractDriverFactory { @@ -20,10 +17,8 @@ class ChromeDriverFactory extends AbstractDriverFactory { private static final Logger log = Logger.getLogger(ChromeDriverFactory.class.getName()); WebDriver create(final Proxy proxy) { - DesiredCapabilities capabilities = createCommonCapabilities(proxy); - ChromeOptions options = createChromeOptions(); - capabilities.setCapability(ChromeOptions.CAPABILITY, options); - return new ChromeDriver(capabilities); + ChromeOptions options = createChromeOptions(proxy); + return new ChromeDriver(options); } @Override @@ -31,19 +26,16 @@ boolean supports() { return CHROME.equalsIgnoreCase(browser); } - ChromeOptions createChromeOptions() { + ChromeOptions createChromeOptions(Proxy proxy) { ChromeOptions options = new ChromeOptions(); + options.setHeadless(headless); options.addArguments("--no-sandbox"); // This make Chromium reachable (?) if (chromeSwitches != null) { options.addArguments(chromeSwitches); } - options = transferChromeOptionsFromSystemProperties(options, "chromeoptions."); - try { - log.config("Chrome options:" + options.toJson().toString()); - } catch (IOException e) { - log.warning("Error while reading from file:" + e.getMessage() + ". Ignoring it."); - e.printStackTrace(System.err); - } + options.merge(createCommonCapabilities(proxy)); + options = transferChromeOptionsFromSystemProperties(options); + log.config("Chrome options:" + options.toString()); return options; } @@ -51,10 +43,10 @@ ChromeOptions createChromeOptions() { * This method only handles so-called "arguments" for ChromeOptions (there is also "ExperimentalOptions", "Extensions" etc.) * * @param currentChromeOptions - * @param prefix * @return */ - private ChromeOptions transferChromeOptionsFromSystemProperties(final ChromeOptions currentChromeOptions, final String prefix) { + private ChromeOptions transferChromeOptionsFromSystemProperties(ChromeOptions currentChromeOptions) { + String prefix = "chromeoptions."; for (String key : System.getProperties().stringPropertyNames()) { if (key.startsWith(prefix)) { String capability = key.substring(prefix.length()); diff --git a/src/main/java/com/codeborne/selenide/webdriver/EdgeDriverFactory.java b/src/main/java/com/codeborne/selenide/webdriver/EdgeDriverFactory.java index 05d0e47bbe..98d4542d16 100644 --- a/src/main/java/com/codeborne/selenide/webdriver/EdgeDriverFactory.java +++ b/src/main/java/com/codeborne/selenide/webdriver/EdgeDriverFactory.java @@ -3,14 +3,15 @@ import com.codeborne.selenide.WebDriverRunner; import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.ie.InternetExplorerDriver; +import org.openqa.selenium.edge.EdgeDriver; +import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.remote.DesiredCapabilities; class EdgeDriverFactory extends AbstractDriverFactory { @Override WebDriver create(final Proxy proxy) { - return createInternetExplorerDriver(proxy); + return createEdgeDriver(proxy); } @Override @@ -18,8 +19,10 @@ boolean supports() { return WebDriverRunner.isEdge(); } - private WebDriver createInternetExplorerDriver(final Proxy proxy) { + private WebDriver createEdgeDriver(final Proxy proxy) { DesiredCapabilities capabilities = createCommonCapabilities(proxy); - return new InternetExplorerDriver(capabilities); + EdgeOptions options = new EdgeOptions(); + options.merge(capabilities); + return new EdgeDriver(options); } } diff --git a/src/main/java/com/codeborne/selenide/webdriver/FirefoxDriverFactory.java b/src/main/java/com/codeborne/selenide/webdriver/FirefoxDriverFactory.java index dd48db9285..17ae53a8e6 100644 --- a/src/main/java/com/codeborne/selenide/webdriver/FirefoxDriverFactory.java +++ b/src/main/java/com/codeborne/selenide/webdriver/FirefoxDriverFactory.java @@ -4,11 +4,13 @@ import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.firefox.FirefoxProfile; -import org.openqa.selenium.remote.DesiredCapabilities; import java.util.logging.Logger; +import static com.codeborne.selenide.Configuration.headless; + class FirefoxDriverFactory extends AbstractDriverFactory { private static final Logger log = Logger.getLogger(FirefoxDriverFactory.class.getName()); @@ -24,43 +26,46 @@ WebDriver create(final Proxy proxy) { } private WebDriver createFirefoxDriver(final Proxy proxy) { - DesiredCapabilities capabilities = createFirefoxCapabilities(proxy); + FirefoxOptions options = createFirefoxOptions(proxy); log.info("Firefox 48+ is currently not supported by Selenium Firefox driver. " + "Use browser=marionette with geckodriver, when using it."); - return new FirefoxDriver(capabilities); + return new FirefoxDriver(options); } - DesiredCapabilities createFirefoxCapabilities(Proxy proxy) { - FirefoxProfile myProfile = new FirefoxProfile(); - myProfile.setPreference("network.automatic-ntlm-auth.trusted-uris", "http://,https://"); - myProfile.setPreference("network.automatic-ntlm-auth.allow-non-fqdn", true); - myProfile.setPreference("network.negotiate-auth.delegation-uris", "http://,https://"); - myProfile.setPreference("network.negotiate-auth.trusted-uris", "http://,https://"); - myProfile.setPreference("network.http.phishy-userpass-length", 255); - myProfile.setPreference("security.csp.enable", false); + FirefoxOptions createFirefoxOptions(Proxy proxy) { + FirefoxOptions firefoxOptions = new FirefoxOptions(); + firefoxOptions.setHeadless(headless); + firefoxOptions.addPreference("network.automatic-ntlm-auth.trusted-uris", "http://,https://"); + firefoxOptions.addPreference("network.automatic-ntlm-auth.allow-non-fqdn", true); + firefoxOptions.addPreference("network.negotiate-auth.delegation-uris", "http://,https://"); + firefoxOptions.addPreference("network.negotiate-auth.trusted-uris", "http://,https://"); + firefoxOptions.addPreference("network.http.phishy-userpass-length", 255); + firefoxOptions.addPreference("security.csp.enable", false); + + firefoxOptions.setCapability("marionette", false); + firefoxOptions.merge(createCommonCapabilities(proxy)); + firefoxOptions = transferFirefoxProfileFromSystemProperties(firefoxOptions); - DesiredCapabilities capabilities = createCommonCapabilities(proxy); - myProfile = transferFirefoxProfileFromSystemProperties(myProfile, "firefoxprofile."); - capabilities.setCapability("marionette", false); - capabilities.setCapability(FirefoxDriver.PROFILE, myProfile); - return capabilities; + return firefoxOptions; } - private FirefoxProfile transferFirefoxProfileFromSystemProperties(FirefoxProfile currentFirefoxProfile, String prefix) { + private FirefoxOptions transferFirefoxProfileFromSystemProperties(FirefoxOptions currentFirefoxOptions) { + String prefix = "firefoxprofile."; + FirefoxProfile profile = new FirefoxProfile(); for (String key : System.getProperties().stringPropertyNames()) { if (key.startsWith(prefix)) { String capability = key.substring(prefix.length()); String value = System.getProperties().getProperty(key); log.config("Use " + key + "=" + value); if (value.equals("true") || value.equals("false")) { - currentFirefoxProfile.setPreference(capability, Boolean.valueOf(value)); + profile.setPreference(capability, Boolean.valueOf(value)); } else if (value.matches("^-?\\d+$")) { //if integer - currentFirefoxProfile.setPreference(capability, Integer.parseInt(value)); + profile.setPreference(capability, Integer.parseInt(value)); } else { - currentFirefoxProfile.setPreference(capability, value); + profile.setPreference(capability, value); } } } - return currentFirefoxProfile; + return currentFirefoxOptions.setProfile(profile); } } diff --git a/src/main/java/com/codeborne/selenide/webdriver/InternetExplorerDriverFactory.java b/src/main/java/com/codeborne/selenide/webdriver/InternetExplorerDriverFactory.java index 560427f33f..98fb5ed1a4 100644 --- a/src/main/java/com/codeborne/selenide/webdriver/InternetExplorerDriverFactory.java +++ b/src/main/java/com/codeborne/selenide/webdriver/InternetExplorerDriverFactory.java @@ -4,6 +4,7 @@ import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; +import org.openqa.selenium.ie.InternetExplorerOptions; import org.openqa.selenium.remote.DesiredCapabilities; class InternetExplorerDriverFactory extends AbstractDriverFactory { @@ -20,6 +21,7 @@ WebDriver create(final Proxy proxy) { private WebDriver createInternetExplorerDriver(final Proxy proxy) { DesiredCapabilities capabilities = createCommonCapabilities(proxy); - return new InternetExplorerDriver(capabilities); + InternetExplorerOptions options = new InternetExplorerOptions(capabilities); + return new InternetExplorerDriver(options); } } diff --git a/src/main/java/com/codeborne/selenide/webdriver/MarionetteDriverFactory.java b/src/main/java/com/codeborne/selenide/webdriver/MarionetteDriverFactory.java index 8523ac6c2d..37c52a3cfe 100644 --- a/src/main/java/com/codeborne/selenide/webdriver/MarionetteDriverFactory.java +++ b/src/main/java/com/codeborne/selenide/webdriver/MarionetteDriverFactory.java @@ -4,7 +4,7 @@ import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; -import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.firefox.FirefoxOptions; class MarionetteDriverFactory extends FirefoxDriverFactory { @@ -19,8 +19,8 @@ WebDriver create(final Proxy proxy) { } private WebDriver createMarionetteDriver(final Proxy proxy) { - DesiredCapabilities capabilities = createFirefoxCapabilities(proxy); - capabilities.setCapability("marionette", true); - return new FirefoxDriver(capabilities); + FirefoxOptions firefoxOptions = createFirefoxOptions(proxy); + firefoxOptions.setCapability("marionette", true); + return new FirefoxDriver(firefoxOptions); } } diff --git a/src/test/java/com/codeborne/selenide/webdriver/FirefoxDriverFactoryTest.java b/src/test/java/com/codeborne/selenide/webdriver/FirefoxDriverFactoryTest.java index 049dcb91d4..51e8827c53 100644 --- a/src/test/java/com/codeborne/selenide/webdriver/FirefoxDriverFactoryTest.java +++ b/src/test/java/com/codeborne/selenide/webdriver/FirefoxDriverFactoryTest.java @@ -1,19 +1,21 @@ package com.codeborne.selenide.webdriver; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.mock; - import com.codeborne.selenide.Configuration; -import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.Proxy; -import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; + public class FirefoxDriverFactoryTest { private Proxy proxy = mock(Proxy.class); @@ -54,8 +56,7 @@ public void transfersIntegerCapabilitiesFromSystemPropsToDriver() { @Test public void transferIntegerFirefoxProfilePreferencesFromSystemPropsToDriver() { System.setProperty("firefoxprofile.some.cap", "25"); - FirefoxProfile profile = (FirefoxProfile) driverFactory.createFirefoxCapabilities(proxy).getCapability( - FirefoxDriver.PROFILE); + FirefoxProfile profile = driverFactory.createFirefoxOptions(proxy).getProfile(); assertThat(profile.getIntegerPreference("some.cap", 0), is(25)); } @@ -63,22 +64,24 @@ public void transferIntegerFirefoxProfilePreferencesFromSystemPropsToDriver() { @Test public void transferBooleanFirefoxProfilePreferencesFromSystemPropsToDriver() { System.setProperty("firefoxprofile.some.cap", "false"); - FirefoxProfile profile = (FirefoxProfile) driverFactory.createFirefoxCapabilities(proxy).getCapability(FirefoxDriver.PROFILE); + FirefoxProfile profile = driverFactory.createFirefoxOptions(proxy).getProfile(); assertThat(profile.getBooleanPreference("some.cap", true), is(false)); } @Test public void transferStringFirefoxProfilePreferencesFromSystemPropsToDriver() { System.setProperty("firefoxprofile.some.cap", "abdd"); - FirefoxProfile profile = (FirefoxProfile) driverFactory.createFirefoxCapabilities(proxy).getCapability(FirefoxDriver.PROFILE); + FirefoxProfile profile = driverFactory.createFirefoxOptions(proxy).getProfile(); assertThat(profile.getStringPreference("some.cap", "sjlj"), is("abdd")); } @Test public void transferChromeOptionArgumentsFromSystemPropsToDriver() throws IOException { System.setProperty("chromeoptions.args", "abdd,--abcd,xcvcd=123"); - String arrayOfArguments = new ChromeDriverFactory().createChromeOptions().toJson() - .getAsJsonObject().getAsJsonArray("args").toString(); + String chromeOptions = new ChromeDriverFactory().createChromeOptions(proxy).toString(); + Matcher matcher = Pattern.compile("args=\\[(.*)\\],").matcher(chromeOptions); + matcher.find(); + String arrayOfArguments = matcher.group(1); assertThat(arrayOfArguments, containsString("abdd")); assertThat(arrayOfArguments, containsString("--abcd")); diff --git a/src/test/java/integration/FirefoxWithProfileTest.java b/src/test/java/integration/FirefoxWithProfileTest.java index a4930e549a..e14aa6509b 100644 --- a/src/test/java/integration/FirefoxWithProfileTest.java +++ b/src/test/java/integration/FirefoxWithProfileTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.firefox.FirefoxProfile; import java.io.File; @@ -17,7 +18,7 @@ public void createFirefoxWithCustomProfile() { assumeTrue(WebDriverRunner.isFirefox()); FirefoxProfile profile = createFirefoxProfileWithExtensions(); - WebDriver driver = new FirefoxDriver(profile); + WebDriver driver = new FirefoxDriver(new FirefoxOptions().setProfile(profile)); driver.manage().window().maximize(); try { WebDriverRunner.setWebDriver(driver); @@ -37,7 +38,6 @@ private FirefoxProfile createFirefoxProfileWithExtensions() { profile.addExtension(new File(currentThread().getContextClassLoader().getResource("firepath-0.9.7-fx.xpi").getPath())); profile.setPreference("extensions.firebug.showFirstRunPage", false); profile.setPreference("extensions.firebug.allPagesActivation", "on"); - profile.setEnableNativeEvents(true); profile.setPreference("intl.accept_languages", "no,en-us,en"); profile.setPreference("extensions.firebug.console.enableSites", "true"); return profile; diff --git a/src/test/java/integration/ScreenshotTest.java b/src/test/java/integration/ScreenshotTest.java index 349a28f7b8..151f418409 100644 --- a/src/test/java/integration/ScreenshotTest.java +++ b/src/test/java/integration/ScreenshotTest.java @@ -18,6 +18,7 @@ import static com.codeborne.selenide.Selenide.$; import static com.codeborne.selenide.WebDriverRunner.getWebDriver; import static com.codeborne.selenide.WebDriverRunner.isHtmlUnit; +import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.lessThan; import static org.junit.Assert.*; @@ -36,13 +37,13 @@ public void canTakeScreenshotOfElement() throws IOException { SelenideElement element = $("#small_div"); File screenshot = element.screenshot(); String info = "(Screenshot of element: " + screenshot.getAbsolutePath() + ") "; + String screenshotPath = IS_OS_WINDOWS ? Configuration.reportsFolder.replace("/", "\\") : Configuration.reportsFolder; BufferedImage img = ImageIO.read(screenshot); assertEquals("Screenshot doesn't fit width " + info, img.getWidth(), element.getSize().getWidth()); assertEquals("Screenshot doesn't fit height " + info, img.getHeight(), element.getSize().getHeight()); - assertTrue("Screenshot file should be located in " + Configuration.reportsFolder + - ", but was: " + screenshot.getPath(), - screenshot.getPath().startsWith(Configuration.reportsFolder)); + assertTrue("Screenshot file should be located in " + screenshotPath + ", but was: " + + screenshot.getPath(), screenshot.getPath().startsWith(screenshotPath)); } @Test