【问题标题】:Clear date input fails on chromewebdriverchrome webdriver上的清除日期输入失败
【发布时间】:2013-03-12 11:48:45
【问题描述】:

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

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

【问题讨论】:

  • 显然这是由于 chromedriver 不够成熟。希望这会在未来得到解决。

标签: date time input selenium-chromedriver


【解决方案1】:

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

webElement.SendKeys(Keys.Delete);

清除字段。

【讨论】:

  • 我收到“未定义键”。 “键”是我应该插入的一些自定义变量的占位符吗?
  • @Vince:命名空间是OpenQA.Selenium.Keys
【解决方案2】:

有时您可以稍微更改 xpath 并使其工作:

例如对于这片DOM:&lt;tr class="table-filters"&gt;&lt;td&gt;&lt;input type="text" value=""&gt;&lt;/td&gt;&lt;/tr&gt;

如果你使用:

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();

工作。

【讨论】:

    【解决方案3】:
    welement.click 
    Actions action = new Actions(driver); 
    action.sendKeys(Keys.DELETE);
    action.sendKeys(webelement,value).build().perform();
    

    【讨论】:

      【解决方案4】:

      我有一个解决方案,我刚刚在 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();
      

      【讨论】:

        【解决方案5】:

        清除和更新模型...

             webElement.sendKeys(Keys.chord(Keys.CONTROL, "a"));
             webElement.sendKeys(Keys.BACK_SPACE);
        

        【讨论】:

        • 能否详细说明您的代码描述?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 2016-08-26
        • 2014-11-25
        • 2020-02-17
        • 2021-06-17
        • 1970-01-01
        相关资源
        最近更新 更多