我需要使用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');"
);
错误返回:
线程中的异常&#34; main&#34; org.openqa.selenium.WebDriverException:非法字符
命令持续时间或超时:51毫秒
更新
如果我只留下第一个JS命令,则会出现同样的错误:
((JavascriptExecutor) driver).executeScript(
"var inputs = document.getElementsByTagName('input');");
堆栈跟踪的其余部分与此无关。任何人都知道如何解决这个问题,或者其他方式来编辑readonly
字段?
答案 0 :(得分:10)
我无法找到您的代码的问题。但在此期间请使用下面给出的代码。
List<WebElement> inputs = driver.findElements(By.tagName("input"));
for (WebElement input : inputs) {
((JavascriptExecutor) driver).executeScript(
"arguments[0].removeAttribute('readonly','readonly')",input);
}
如果这有助于您,请告诉我。
答案 1 :(得分:2)
显然有一个非常时髦的角色被放入你的字符串..当我使用我的&lt; - 和 - &gt; 箭头键时,它被抓住了最后三个字符,以及字符串的中间。似乎是一些复制面食问题。
我修好它只是把它放在一行,但是我仍然建议使用@ 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");
}
}
的页面
答案 2 :(得分:0)
WebElement elementName = driver.findElement(By.xpath("//div[@arid='7']//input[@id='arid7']"));
((JavascriptExecutor) driver).executeScript("arguments[0].removeAttribute('readonly','readonly')", elementName);
这对我有用