chrome webdriver上的清除日期输入失败

时间:2013-03-12 11:48:46

标签: date time input selenium-chromedriver

我在使用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

与此同时,有什么建议可以解决这个错误吗?

5 个答案:

答案 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);