【问题标题】:Webdriver sometime skips date fieldWebdriver 有时会跳过日期字段
【发布时间】:2014-04-17 19:39:30
【问题描述】:

我有一个日期字段,有时会被 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,因此我无法确认问题是否发生在其他浏览器中

【问题讨论】:

    标签: selenium selenium-webdriver webdriver selenium-chromedriver


    【解决方案1】:

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

    【讨论】:

    • 嗯,这似乎有帮助。我暂时关闭它,如果它再次抬起丑陋的头,我会重新打开。
    【解决方案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()");
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 谢谢,但定位器是正确的。在将 webElement 传递给函数之前,我检查它是否在早期方法中既可见又存在。 data-model-attribute 来自父元素,可与其他文本字段一起正常工作;它只是随机失败,日期字段
      • 顺便说一句,我刚刚查看了您在 air pair 上的个人资料,而您正在尝试回答我的问题。当然,编程之神将我们聚集在一起:)
      【解决方案4】:

      我相信“日期”的输入类型对于 html 5 来说是新的,并且需要特定于 RFC 3339:http://www.ietf.org/rfc/rfc3339.txt

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

      【讨论】:

      • 这听起来不错,但不幸的是没有奏效。此外,当我将日期输入为 YYYY-MM-DD 时,应用程序还期望日期输入为 MM/DD/YYYY,结果不是正确的日期:*Thread:1 INFO: EnteringText: 1981-11-01 *线程:1 信息:输入的文本是:11101-12-08
      • 上面的代码 sn-p 中的“文本输入”行在哪里?这个字段可能是只读的吗? stackoverflow.com/questions/12419339/…
      猜你喜欢
      • 2023-01-20
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2022-08-22
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多