13

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

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

4

5 回答 5

10

作为一种解决方法,您可以选择表示输入字段的 webElement 并执行

webElement.SendKeys(Keys.Delete);

清理场地。

于 2013-05-06T02:49:14.993 回答
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();

作品。

于 2015-12-03T23:28:35.793 回答
0
welement.click 
Actions action = new Actions(driver); 
action.sendKeys(Keys.DELETE);
action.sendKeys(webelement,value).build().perform();
于 2013-09-11T06:39:33.623 回答
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();
于 2015-08-17T20:20:45.410 回答
0

清除和更新模型...

     webElement.sendKeys(Keys.chord(Keys.CONTROL, "a"));
     webElement.sendKeys(Keys.BACK_SPACE);
于 2020-01-03T10:27:26.027 回答