首页 文章

删除Selenium WebDriver中的只读属性

提问于
浏览
4

我需要用Java中的Selenium WebDriver编辑一些 readonly 字段 . 由于Selenium不会让我找到这些字段,我搜索了解决方案,发现最简单的可能是使用带有JavaScript Executor的JavaScript代码段删除 readonly 属性 .

虽然此代码段可以在Firefox控制台上运行,但是从所有输入中成功删除了该属性,它会在Selenium中引发异常 .

JavaScript执行者:

((JavascriptExecutor) driver).executeScript(
    "var inputs = document.getElementsByTagName('input');​​​​"+
    "for(var i = 0; i < inputs.length; i++)"+
        "inputs[i].removeAttribute('readonly','readonly');​​​​"
);

并返回错误:

线程“main”中的异常org.openqa.selenium.WebDriverException:非法字符命令持续时间或超时:51毫秒

UPDATE:

如果我只留下第一个JS命令,则会出现相同的错误:

((JavascriptExecutor) driver).executeScript(
    "var inputs = document.getElementsByTagName('input');​​​​");

堆栈跟踪的其余部分与此无关 . 任何人都知道如何解决这个问题,或者其他方式来编辑 readonly 字段?

3 回答

  • 10

    我无法找到您的代码的问题 . 但在此期间使用下面给出的代码 .

    List<WebElement> inputs = driver.findElements(By.tagName("input"));
    
    for (WebElement input : inputs) {
        ((JavascriptExecutor) driver).executeScript(
                    "arguments[0].removeAttribute('readonly','readonly')",input);
    }
    

    如果这有助于您,请告诉我 .

  • 2

    显然有一个非常时髦的角色被放入你的字符串..当我使用我的< - 和 - >箭头键时,它最终被捕获了三个字符,并在字符串的中间 . 似乎是一些复制面食问题 .

    我修好它只是把它放在一行,但我仍然建议使用@ lost的答案,因为它更明确 .

    @Config(url="https://rawgithub.com/ddavison/so-tests/master/22711441.html", browser= Browser.CHROME)
    public class _22711441 extends AutomationTest {
        @Test
        public void test() {
            ((JavascriptExecutor) driver).executeScript(
            // the issue was happening                          \/ here and                                                                             \/ here
            "var inputs = document.getElementsByTagName('input');for(var i = 0; i < inputs.length; i++){inputs[i].removeAttribute('readonly','readonly');}"
            );
    
            setText(By.id("1"), "something")
            .validateText(By.id("1"), "something");
        }
    }
    

    查看脚本here和我用来测试的页面here

  • 0
    WebElement elementName = driver.findElement(By.xpath("//div[@arid='7']//input[@id='arid7']"));
    ((JavascriptExecutor) driver).executeScript("arguments[0].removeAttribute('readonly','readonly')", elementName);
    

    这对我有用

相关问题