14

我想使用 javascript 为网页上的选定元素设置属性。

我找到了两种使用 javascript 设置属性的方法

1

   WebDriver driver; // Assigned elsewhere
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("document.getElementByID('//id of element').setAttribute('attr', '10')");

2

WebElement element = driver.findElement(By.id("foo"));
    String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);

但我想将 javascript 应用于我使用 selenium webdriver 找到的特定 webelement

例如,我使用 selenium webdriver 选择了一个链接

driver.findElement(By.linkText("Click ME"))

现在我想使用 javascript 设置这个 webelement 的属性

但我不知道如何将两者结合起来

请帮我找到解决方案

4

3 回答 3

31

沿着:

JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element = driver.findElement(By.linkText("Click ME"));
js.executeScript("arguments[0].setAttribute('attr', '10')",element);
于 2013-11-12T16:40:36.837 回答
1

我也遇到过类似的问题,我使用了 javascript Executor

所以就我而言,我有一个元素列表,我必须在这些元素上更改一个属性

首先我在这里找到元素,然后遍历列表,创建一个 javascriptExecutor 对象,然后在该特定元素上执行脚本

//arguments[0] means the element
//arguments[1] means the property
//arguments[2] means the new value of the propert


List<WebElement> unselectableDiv = driver
                .findElements(By.xpath("//div[@class='x-grid3-cell-inner x-grid3-col-6']"));

        for (WebElement element : unselectableDiv) {

            // System.out.println( "**** Checking the size of div "+unselectableDiv.size());

            JavascriptExecutor js = (JavascriptExecutor) driver;

            String scriptSetAttr = "arguments[0].setAttribute(arguments[1],arguments[2])";

            js.executeScript(scriptSetAttr, element, "unselectable", "off");

            System.out.println(" *****   check value of Div property " + element.getAttribute("unselectable"));

        }
于 2020-07-06T05:38:03.147 回答
0

根据您的代码试验:

driver.findElement(By.linkText("Click ME"))

innerHTML似乎设置为Click ME

因此,要设置一个新值,例如10innerHTML您可以使用JavascriptExecutorexecuteScript()接口的方法,您可以使用以下解决方案:

  • 使用innerHTML

    WebDriver driver;
    WebElement element = driver.findElement(By.linkText("Click ME"));
    JavascriptExecutor jse = (JavascriptExecutor) driver;
    jse.executeScript("arguments[0].setAttribute('innerHTML', '10')", element);
    

理想情况下,您需要诱导WebDriverWait并且elementToBeClickable()您可以使用以下解决方案:

  • 使用textContent

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Click ME")))
    ((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('textContent','10')", element);
    

参考

您可以在以下位置找到相关的详细讨论:

于 2020-09-04T10:38:52.340 回答