private boolean supportsJavascriptAttributes() { return driver.supportsJavascript() && !driver.browser().isHtmlUnit(); }
public void close() { driver.close(); }
private Config config() { return driver().config(); }
default boolean supportsJavascript() { return hasWebDriverStarted() && getWebDriver() instanceof JavascriptExecutor; }
protected void addHttpHeaders(Driver driver, HttpGet httpGet) { if (driver.hasWebDriverStarted()) { httpGet.setHeader("User-Agent", driver.getUserAgent()); } }
default SelenideTargetLocator switchTo() { return new SelenideTargetLocator(config(), getWebDriver()); }
protected Boolean sizzleLoaded(Driver driver) { try { return driver.executeJavaScript("return typeof Sizzle != 'undefined'"); } catch (WebDriverException e) { return false; } }
default boolean hasWebDriverStarted() { return getWebDriver() != null; }
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(); } } }
protected void click(Driver driver, WebElement element) { if (driver.config().clickViaJs()) { driver.executeJavaScript("arguments[0].click()", element); } else { element.click(); } }
@Override public String execute(SelenideElement proxy, WebElementSource locator, Object[] args) { WebElement element = locator.getWebElement(); if (locator.driver().browser().isHtmlUnit()) { return locator.driver().executeJavaScript("return arguments[0].innerHTML", element); } return element.getAttribute("innerHTML"); } }
@Override public File execute(SelenideElement proxy, WebElementSource linkWithHref, Object[] args) throws IOException { WebElement link = linkWithHref.findAndAssertElementIsInteractable(); Config config = linkWithHref.driver().config(); long timeout = getTimeout(config, args); if (config.fileDownload() == HTTPGET) { LOG.config("selenide.fileDownload = " + System.getProperty("selenide.fileDownload") + " download file via http get"); return downloadFileWithHttpRequest.download(linkWithHref.driver(), link, timeout); } if (!config.proxyEnabled()) { throw new IllegalStateException("Cannot download file: proxy server is not enabled. Setup proxyEnabled"); } if (linkWithHref.driver().getProxy() == null) { throw new IllegalStateException("Cannot download file: proxy server is not started"); } return downloadFileWithProxyServer.download(linkWithHref, link, linkWithHref.driver().getProxy(), timeout); }
@Override public SelenideElement execute(SelenideElement proxy, WebElementSource locator, Object[] args) { locator.driver().actions().doubleClick(locator.findAndAssertElementIsInteractable()).perform(); return proxy; } }
public Browser browser() { return driver().browser(); }
public WebDriver getAndCheckWebDriver() { return driver.getAndCheckWebDriver(); }
public SelenideProxyServer getProxy() { return driver().getProxy(); }
public String getUserAgent() { return driver().getUserAgent(); }
public boolean hasWebDriverStarted() { return driver().hasWebDriverStarted(); }
private <T> T ifWebDriverStarted(Driver driver, Function<WebDriver, T> lambda) { if (!driver.hasWebDriverStarted()) { log.warning("Cannot take screenshot because browser is not started"); return null; } return lambda.apply(driver.getWebDriver()); }
void executeJavaScript(Driver driver, WebElement element, String... event) { driver.executeJavaScript(jsCodeToTriggerEvent, element, event); } }