void executeJavaScript(Driver driver, WebElement element, String... event) { driver.executeJavaScript(jsCodeToTriggerEvent, element, event); } }
protected Boolean sizzleLoaded(Driver driver) { try { return driver.executeJavaScript("return typeof Sizzle != 'undefined'"); } catch (WebDriverException e) { return false; } }
default String getUserAgent() { return executeJavaScript("return navigator.userAgent;"); }
private WebElement getFocusedElement(Driver driver) { return (WebElement) driver.executeJavaScript("return document.activeElement"); }
private String setValueByJs(Driver driver, WebElement element, String text) { return driver.executeJavaScript( "return (function(webelement, text) {" + "if (webelement.getAttribute('readonly') != undefined) return 'Cannot change value of readonly element';" + "if (webelement.getAttribute('disabled') != undefined) return 'Cannot change value of disabled element';" + "webelement.focus();" + "var maxlength = webelement.getAttribute('maxlength') == null ? -1 : parseInt(webelement.getAttribute('maxlength'));" + "webelement.value = " + "maxlength == -1 ? text " + ": text.length <= maxlength ? text " + ": text.substring(0, maxlength);" + "return null;" + "})(arguments[0], arguments[1]);", element, text); } }
@Override public boolean apply(Driver driver, WebElement element) { actualResult = driver.executeJavaScript( "return arguments[0].value.substring(arguments[0].selectionStart, arguments[0].selectionEnd);", element); return actualResult.equals(expectedText); }
protected synchronized void injectSizzle(Driver driver) { if (sizzleSource == null) { try { sizzleSource = IOUtils.toString(currentThread().getContextClassLoader().getResource("sizzle.js"), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException("Cannot load sizzle.js from classpath", e); } } driver.executeJavaScript(sizzleSource); } }
protected List<WebElement> cloneInputField(Driver driver, SelenideElement form, WebElement inputField, int count) { return driver.executeJavaScript(String.format("" + "var newInputs = [];" + "for (var i = 1; i <= arguments[2]; i++) {" + " var id = '___selenide___id___' + arguments[1].getAttribute('name') + '___' + i + '___%s';" + " var fileInput = document.createElement('input');" + " fileInput.setAttribute('type', arguments[1].getAttribute('type'));" + " fileInput.setAttribute('name', arguments[1].getAttribute('name'));" + " fileInput.setAttribute('id', id);" + " fileInput.style.width = '1px';" + " fileInput.style.height = '1px';" + " arguments[0].appendChild(fileInput);" + " newInputs.push(fileInput);" + "}" + "return newInputs;", System.nanoTime()), form, inputField, count); } }
protected List<WebElement> evaluateSizzleSelector(Driver driver, SearchContext context, ByCssSelector sizzleCssSelector) { injectSizzleIfNeeded(driver); String sizzleSelector = sizzleCssSelector.toString() .replace("By.selector: ", "") .replace("By.cssSelector: ", ""); if (context instanceof WebElement) return driver.executeJavaScript("return Sizzle(arguments[0], arguments[1])", sizzleSelector, context); else return driver.executeJavaScript("return Sizzle(arguments[0])", sizzleSelector); }
@Override public WebElement execute(SelenideElement proxy, WebElementSource locator, Object[] args) { String param = args[0].toString(); locator.driver().executeJavaScript("arguments[0].scrollIntoView(" + param + ")", proxy); return proxy; } }
public <T> T executeJavaScript(String jsCode, Object... arguments) { return driver().executeJavaScript(jsCode, arguments); }
protected void click(Driver driver, WebElement element) { if (driver.config().clickViaJs()) { driver.executeJavaScript("arguments[0].click()", element); } else { element.click(); } }
private Describe appendAllAttributes() { Map<String, String> map = driver.executeJavaScript( "var s = {};" + "var attrs = arguments[0].attributes;" + "for (var i = 0; i < attrs.length; i++) {" + " var a = attrs[i]; " + " if (a.name != 'style') {" + " s[a.name] = a.value;" + " }" + "}" + "return s;", element); SortedMap<String, String> sortedByName = new TreeMap<>(); if (map != null) { sortedByName.putAll(map); } sortedByName.put("value", element.getAttribute("value")); if (!sortedByName.containsKey("type")) { sortedByName.put("type", element.getAttribute("type")); } for (Map.Entry<String, String> entry : sortedByName.entrySet()) { attr(entry.getKey(), entry.getValue()); } return this; }
@Override public Boolean execute(SelenideElement proxy, WebElementSource locator, Object[] args) { WebElement img = locator.getWebElement(); if (!"img".equalsIgnoreCase(img.getTagName())) { throw new IllegalArgumentException("Method isImage() is only applicable for img elements"); } return locator.driver().executeJavaScript("return arguments[0].complete && " + "typeof arguments[0].naturalWidth != 'undefined' && " + "arguments[0].naturalWidth > 0", img); } }
@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 WebElement execute(SelenideElement proxy, WebElementSource locator, Object[] args) { Point location = locator.getWebElement().getLocation(); locator.driver().executeJavaScript("window.scrollTo(" + location.getX() + ", " + location.getY() + ')'); return proxy; } }
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(); } } }