【问题标题】:How to set an attribute value using JavascriptExecuter in Selenium WebDriver如何在 Selenium WebDriver 中使用 JavascriptExecuter 设置属性值
【发布时间】:2017-01-04 12:38:58
【问题描述】:

我正在尝试为我的网站中所有相同类型的 <img> 标签设置一个 attribute 值,例如

<img src="images/temp/advertisement.png">

我想设置style="display:none",这样我就可以隐藏它们了。

我试过以下方法-

List<WebElement> element = driver.findElements(By.tagName("img"));

    for(WebElement e:element)
    {

        if(e.getAttribute(src).contains("images/temp/advertisement.png"))
        {
            jse.executeScript("document."+e+".setAttribute('style', 'display: none;')");
        }
 }

但出现错误

线程“主”org.openqa.selenium.WebDriverException 中的异常: 未知错误:Runtime.evaluate 抛出异常:SyntaxError: 意外的令牌 [

有没有人帮助这里出了什么问题或者我能做些什么?

【问题讨论】:

    标签: javascript java selenium selenium-webdriver


    【解决方案1】:

    线程“主”org.openqa.selenium.WebDriverException 中的异常:未知错误:Runtime.evaluate 抛出异常:SyntaxError: Unexpected token [

    您正在使用JavascriptExecutorelement 上执行javascript,但语法不正确,在executeScriptarguments 将通过arguments 魔术变量提供给JavaScript,就好像该函数是通过Function.apply 调用,其中arguments 必须是数字、booleanStringWebElement 等。

    您可以尝试如下:-

    List<WebElement> element = driver.findElements(By.tagName("img"));
    
    for(WebElement e:element) {    
      if(e.getAttribute("src").contains("images/temp/advertisement.png")){
           jse.executeScript("arguments[0].style.display = 'none'", e);
      }
    }
    

    【讨论】:

    • 现在没有显示错误,但是不能设置style="display:none"属性。
    • 如果该属性存在于 html 中,是否可以更改该标签的属性值?
    • @NarendraRajput 是的,如果它在运行时已经存在,您可以使用此更新属性值..
    • 谢谢。它的工作。现在加载图像的时间问题很好
    【解决方案2】:

    问题在于你像对象一样传递e,并且调用了toString(),所以最终结果是[]等...另一种方法可能是这样的:

    jse.executeScript(
            "var imgs = document.getElementsByTagName('img');" +
            "for(var i = 0; i < imgs.length; i++) { " +
            "    if (imgs[i].getAttribute('src').indexOf('images/temp/advertisement.png') != -1) { " +
            "       imgs[i].setAttribute('style', 'display: none;');" +
            "    }" +
            "}" );
    

    我没有测试就写了,所以也许你应该编辑它;)

    【讨论】:

      【解决方案3】:

      您使用document 来定位WebElement。在您的情况下,您已经找到了它。试试

      jse.executeScript("arguments[0].setAttribute('style', 'display: none;')", e);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        相关资源
        最近更新 更多