【问题标题】:How to use javascript to set attribute of selected web element using selenium Webdriver using java?如何使用 javascript 使用 selenium Webdriver 使用 java 设置所选 Web 元素的属性?
【发布时间】:2013-11-24 22:16:33
【问题描述】:

我想使用 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 设置这个 web 元素的属性

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

请帮我找到解决办法

【问题讨论】:

    标签: java javascript selenium selenium-webdriver


    【解决方案1】:

    大致如下:

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

    【讨论】:

      【解决方案2】:

      我也遇到过类似的问题,我使用了 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"));
      
              }
      

      【讨论】:

        【解决方案3】:

        根据您的代码试验:

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

        innerHTML 似乎设置为 Click ME

        所以,设置一个新值,例如10作为innerHTML可以使用JavascriptExecutor接口的executeScript()方法,可以使用如下解决方案:

        • 使用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(),并且您可以使用以下解决方案:

        • 使用文本内容

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

        参考

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

        【讨论】:

          猜你喜欢
          • 2015-02-21
          • 2015-08-19
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 2019-06-03
          • 2014-07-18
          • 1970-01-01
          • 2017-04-27
          相关资源
          最近更新 更多