如何在Selenium WebDriver中使用JavascriptExecuter设置属性值

时间:2017-01-04 12:38:58

标签: javascript java selenium selenium-webdriver

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

<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;')");
        }
 }

但收到错误

  

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

是否有人帮助我在这里做错了什么或者我能做些什么?

3 个答案:

答案 0 :(得分:1)

有一个问题就是你像对象一样传递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;');" +
        "    }" +
        "}" );

我是在没有测试的情况下写的,所以也许你应该编辑它;)

答案 1 :(得分:1)

  

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

您正在使用JavascriptExecutorjavascript上执行element,但语法不正确,executeScript arguments将通过{{{}}提供给{ {1}}魔术变量,好像该函数是通过arguments调用的,其中Function.apply必须是数字,argumentsbooleanString

您可以尝试以下方法: -

WebElement

答案 2 :(得分:0)

您使用document找到WebElement。在你的情况下,你已经找到了它。尝试

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