Webdriver有时会跳过日期字段

时间:2014-04-17 19:39:30

标签: selenium selenium-webdriver webdriver selenium-chromedriver

我有一个日期字段,有时会被Webdriver element.sendKeys()填写,有时候字段会被跳过。 (使用Chromedriver 2.9)。

元素定位器信息:

<input id="dateOfBirth" type="date" class=" form-control " placeholder="">

输入文字的代码,如果失败则重新尝试:

//Web element already verified present and visible before being passed into the method
public static void enterText(WebElement weElement, String textToEnter) {

            System.out.println("    *Thread:" +Thread.currentThread().getId() +" INFO: EnteringText: "  +textToEnter);
            //weElement.click(); 
            weElement.sendKeys(textToEnter);  
            String textEntered = weElement.getAttribute("value");
            System.out.println("    *Thread:" +Thread.currentThread().getId() +" INFO: TextDisplayed is: "+ textEntered);
            //continued
            int iAttempts = 0;
            while (iAttempts < 1) {
                if(!textEntered.isEmpty())
                    break;
                else{
                    System.out.println("    *Thread:" +Thread.currentThread().getId() +" ERROR: re-Attempting to enter text: "+ textToEnter);

                    //weElement.click();
                    weElement.sendKeys(textToEnter);
                    textEntered= weElement.getAttribute("value");
                    System.out.println("    *Thread:" +Thread.currentThread().getId() +" INFO: Element text after re-attempt: "+ textEntered);
                    iAttempts++;
                }

                }

            }

控制台输出:

*Thread:10 Trying:  com.xxx.pageobjects.IdentityPage.typeDOB
    *Thread:10 INFO: Locator is: [data-model-attribute='dateOfBirth'] input
    *Thread:10 INFO: EnteringText: 01/01/1981
    *Thread:10 INFO: TextDisplayed is: 
    *Thread:10 ERROR: re-Attempting to enter text: 01/01/1981
    *Thread:10 INFO: Element text after re-attempt: 

有没有人知道为什么只有日期字段才会发生这种情况?如果它失败了,有什么想法可以提供更好的解决方法吗? 谢谢!

注意:我的应用仅适用于Chrome,因此我无法确认其他浏览器是否出现此问题

4 个答案:

答案 0 :(得分:2)

我们在日期字段中遇到同样的错误。特别是最近的Chrome浏览器升级到版本34.尝试回滚到版本33.它应该可以工作。

答案 1 :(得分:2)

我通过执行一些javascript来填写日期字段来解决这个问题。

protected void FillOutDate(string cssSelector, DateTime date)
    {
        var js = Driver as IJavaScriptExecutor;
        if (js != null) js.ExecuteScript(string.Format("$('{0}').val('{1}').change()", cssSelector,date.ToString("yyyy-MM-dd")));
    }

或者只是

  ((IJavaScriptExecutor)Driver).ExecuteScript("$('#IdSelector').val('2014-06-11').change()");

答案 2 :(得分:1)

根据您的控制台输出,您使用的定位器不正确。似乎我在任何地方都看不到data-model-attribute attr,让我们使用该ID。

enterText(driver.findElement(By.id("dateOfBirth")), "test");

答案 3 :(得分:0)

我相信&#34; date&#34;的输入类型是html 5的新手,需要特定于RFC 3339:http://www.ietf.org/rfc/rfc3339.txt

尝试使用1981-01-01,它应该可以使用。你提供的是YYYY-MM-DD而不是MM / DD / YYYY。