public static void validateAssertionMode(Config config) { if (config.assertionMode() == SOFT) { if (!SelenideLogger.hasListener(LISTENER_SOFT_ASSERT)) { throw new IllegalStateException("Using soft asserts, but without @SoftAsserts annotation"); } } } }
String makeAbsoluteUrl(Config config, String relativeOrAbsoluteUrl) { return relativeOrAbsoluteUrl.startsWith("/") ? config.baseUrl() + relativeOrAbsoluteUrl : relativeOrAbsoluteUrl; }
public WebDriver createWebDriver(Config config, Proxy proxy) { log.config("browser=" + config.browser()); log.config("browser.version=" + config.browserVersion()); log.config("remote=" + config.remote()); log.config("browserSize=" + config.browserSize()); log.config("startMaximized=" + config.startMaximized()); Browser browser = new Browser(config.browser(), config.headless()); if (config.driverManagerEnabled() && config.remote() == null) { webDriverBinaryManager.setupBinaryPath(browser); } WebDriver webdriver = factories.stream() .filter(factory -> factory.supports(config, browser)) .findAny() .map(driverFactory -> driverFactory.create(config, proxy)) .orElseGet(() -> new DefaultDriverFactory().create(config, proxy)); webdriver = browserResizer.adjustBrowserSize(config, browser, webdriver); webdriver = browserResizer.adjustBrowserPosition(config, webdriver); logBrowserVersion(webdriver); log.info("Selenide v. " + SelenideDriver.class.getPackage().getImplementationVersion()); logSeleniumInfo(config); return webdriver; }
OperaOptions createOperaOptions(Config config, Proxy proxy) { OperaOptions operaOptions = new OperaOptions(); if (config.headless()) { throw new InvalidArgumentException("headless browser not supported in Opera. Set headless property to false."); } if (!config.browserBinary().isEmpty()) { log.info("Using browser binary: " + config.browserBinary()); operaOptions.setBinary(config.browserBinary()); } operaOptions.merge(createCommonCapabilities(config, proxy)); return operaOptions; } }
private WebDriver createRemoteDriver(Config config, Proxy proxy) { try { DesiredCapabilities capabilities = getDriverCapabilities(config, new Browser(config.browser(), false), proxy); RemoteWebDriver webDriver = new RemoteWebDriver(new URL(config.remote()), capabilities); webDriver.setFileDetector(new LocalFileDetector()); return webDriver; } catch (MalformedURLException e) { throw new IllegalArgumentException("Invalid 'remote' parameter: " + config.remote(), e); } }
WebDriver adjustBrowserSize(Config config, Browser browser, WebDriver driver) { if (config.browserSize() != null && !config.startMaximized()) { log.info("Set browser size to " + config.browserSize()); String[] dimension = config.browserSize().split("x"); int width = Integer.parseInt(dimension[0]); int height = Integer.parseInt(dimension[1]); driver.manage().window().setSize(new org.openqa.selenium.Dimension(width, height)); } else if (config.startMaximized()) { try { driver.manage().window().maximize(); } catch (Exception cannotMaximize) { log.warning("Cannot maximize " + driver.getClass().getSimpleName() + ": " + cannotMaximize); } } return driver; } }
DesiredCapabilities createCommonCapabilities(Config config, Proxy proxy) { DesiredCapabilities browserCapabilities = new DesiredCapabilities(); if (proxy != null) { browserCapabilities.setCapability(PROXY, proxy); } if (config.browserVersion() != null && !config.browserVersion().isEmpty()) { browserCapabilities.setVersion(config.browserVersion()); } browserCapabilities.setCapability(PAGE_LOAD_STRATEGY, config.pageLoadStrategy()); browserCapabilities.setCapability(ACCEPT_SSL_CERTS, true); transferCapabilitiesFromSystemProperties(browserCapabilities); browserCapabilities = mergeCapabilitiesFromConfiguration(config, browserCapabilities); return browserCapabilities; }
private WebDriver createSafariDriver(Config config, Proxy proxy) { if (!config.browserBinary().isEmpty()) { log.info("Using browser binary: " + config.browserBinary()); log.warning("Changing browser binary not supported in Safari, setting will be ignored."); } return createInstanceOf("org.openqa.selenium.safari.SafariDriver", config, proxy); } }
@Override WebDriver create(Config config, Proxy proxy) { return createInstanceOf(config.browser(), config, proxy); } }
protected void click(Driver driver, WebElement element) { if (driver.config().clickViaJs()) { driver.executeJavaScript("arguments[0].click()", element); } else { element.click(); } }
DesiredCapabilities mergeCapabilitiesFromConfiguration(Config config, DesiredCapabilities currentCapabilities) { return currentCapabilities.merge(config.browserCapabilities()); }
WebDriver adjustBrowserPosition(Config config, WebDriver driver) { if (config.browserPosition() != null) { log.info("Set browser position to " + config.browserPosition()); String[] coordinates = config.browserPosition().split("x"); int x = Integer.parseInt(coordinates[0]); int y = Integer.parseInt(coordinates[1]); Point target = new Point(x, y); Point current = driver.manage().window().getPosition(); if (!current.equals(target)) { driver.manage().window().setPosition(target); } } return driver; }
ChromeOptions createChromeOptions(Config config, Proxy proxy) { ChromeOptions options = new ChromeOptions(); options.setHeadless(config.headless()); if (!config.browserBinary().isEmpty()) { log.info("Using browser binary: " + config.browserBinary()); options.setBinary(config.browserBinary()); } options.merge(createCommonCapabilities(config, proxy)); options = transferChromeOptionsFromSystemProperties(options); log.config("Chrome options:" + options.toString()); return options; }
LazyDriver(Config config, Proxy userProvidedProxy, List<WebDriverEventListener> listeners, WebDriverFactory factory, BrowserHealthChecker browserHealthChecker) { this.config = config; this.browser = new Browser(config.browser(), config.headless()); this.userProvidedProxy = userProvidedProxy; this.listeners.addAll(listeners); this.factory = factory; this.browserHealthChecker = browserHealthChecker; }
private WebDriver createInternetExplorerDriver(Config config, Proxy proxy) { DesiredCapabilities capabilities = createCommonCapabilities(config, proxy); InternetExplorerOptions options = new InternetExplorerOptions(capabilities); if (!config.browserBinary().isEmpty()) { log.info("Using browser binary: " + config.browserBinary()); log.warning("Changing browser binary not supported in InternetExplorer, setting will be ignored."); } return new InternetExplorerDriver(options); } }
private WebDriver createHtmlUnitDriver(Config config, Proxy proxy) { DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit(); capabilities.merge(createCommonCapabilities(config, proxy)); capabilities.setCapability(HtmlUnitDriver.INVALIDSELECTIONERROR, true); capabilities.setCapability(HtmlUnitDriver.INVALIDXPATHERROR, false); if (config.browser().indexOf(':') > -1) { // Use constants BrowserType.IE, BrowserType.FIREFOX, BrowserType.CHROME etc. String emulatedBrowser = config.browser().replaceFirst("htmlunit:(.*)", "$1"); capabilities.setVersion(emulatedBrowser); } return new HtmlUnitDriver(capabilities); } }
protected void click(Driver driver, WebElement element, int offsetX, int offsetY) { if (driver.config().clickViaJs()) { driver.executeJavaScript("arguments[0].dispatchEvent(new MouseEvent('click', {" + "'view': window," + "'bubbles': true," + "'cancelable': true," + "'clientX': arguments[0].getClientRects()[0].left + arguments[1]," + "'clientY': arguments[0].getClientRects()[0].top + arguments[2]" + "}))", element, offsetX, offsetY); } else { driver.actions() .moveToElement(element, offsetX, offsetY) .click() .build() .perform(); } } }
DesiredCapabilities getDriverCapabilities(Config config, Browser browser, Proxy proxy) { DesiredCapabilities capabilities = createCommonCapabilities(config, proxy); capabilities.setBrowserName(getBrowserNameForGrid(config, browser)); if (config.headless()) { capabilities.merge(getHeadlessCapabilities(config, browser)); } if (!config.browserBinary().isEmpty()) { capabilities.merge(getBrowserBinaryCapabilities(config, browser)); } return capabilities; }
private WebDriver createEdgeDriver(Config config, Proxy proxy) { DesiredCapabilities capabilities = createCommonCapabilities(config, proxy); EdgeOptions options = new EdgeOptions(); options.merge(capabilities); if (!config.browserBinary().isEmpty()) { log.info("Using browser binary: " + config.browserBinary()); log.warning("Changing browser binary not supported in Edge, setting will be ignored."); } return new EdgeDriver(options); } }