我在使用selenium从firefoxdriver切换到chromedriver时遇到了问题,它在FF中正常工作但现在当我尝试清除日期输入字段时出现此错误:
Caused by: org.openqa.selenium.InvalidElementStateException: Element must be user-editable
in order to clear it. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 38 milliseconds
Build info: version: '2.31.0', revision: '1bd294d185a80fa4206dfeab80ba773c04ac33c0',
time: '2013-02-27 13:51:26'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.2', java.version:
'1.6.0_41'
Session ID: cb5a1b7e5f4abc4f2e56e2fe284a9dc3
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=MAC, chrome.chromedriverVersion=26.0.1383.0, acceptSslCerts=false,
javascriptEnabled=true, browserName=chrome, rotatable=false, locationContextEnabled=false,
version=25.0.1364.160, cssSelectorsEnabled=true, databaseEnabled=false,
handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true,
webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
blah blah...
我尝试将contenteditable属性添加到输入字段,但没有运气:
<input type="date" contenteditable="true" required="required" placeholder="YYYY-MM-dd" />
我不确定是否应报告该报告或在何处报告,但我发现这些问题在相关项目中有些相似:
https://github.com/jnicklas/capybara/issues/554
https://github.com/Behat/MinkSelenium2Driver/pull/29
与此同时,有什么建议可以解决这个错误吗?
韧
答案 0 :(得分:10)
作为一种解决方法,您可以选择表示输入字段的webElement并执行
webElement.SendKeys(Keys.Delete);
清除该字段。
答案 1 :(得分:2)
有时你可以稍微更改一下xpath并达到它的工作点:
例如,这篇DOM:<tr class="table-filters"><td><input type="text" value=""></td></tr>
如果您使用:
wait.until(ExpectedConditions.visibilityOfElementLocated(By
.xpath("//tr[@class='table-filters']//td"))).clear();
它不起作用,但是:
wait.until(ExpectedConditions.visibilityOfElementLocated(By
.xpath("//tr[@class='table-filters']//td//input"))).clear();
作品。
答案 2 :(得分:0)
welement.click
Actions action = new Actions(driver);
action.sendKeys(Keys.DELETE);
action.sendKeys(webelement,value).build().perform();
答案 3 :(得分:0)
我有一个解决方案,我刚刚在Eclipse的ChromeDriver项目中使用过。这也是一种解决方法。
我发现只使用{webElement.Keys}只删除了输入字段中的部分文本。因此,您必须先使用左箭头键选择要删除的整个文本。
以下代码应适用于ChromeDriver。它是在Java中(使用Eclipse):
private WebDriver driver;
driver= new ChromeDriver();
Actions action = new Actions(driver);
int lenText = driver.findElement(By.xpath(elementLocator)).getText().length();
for(int i = 0; i < lenText; i++){
action.sendKeys(Keys.ARROW_LEFT);
}
action.build().perform();
for(int i = 0; i < lenText; i++){
action.sendKeys(Keys.DELETE);
}
Thread.sleep(1000);
action.build().perform();
答案 4 :(得分:0)
清除并更新模型...
webElement.sendKeys(Keys.chord(Keys.CONTROL, "a"));
webElement.sendKeys(Keys.BACK_SPACE);