3

我有一個日期字段有時會被Webdriver element.sendKeys()填寫,其他時候字段只會被跳過。 (使用Chromedriver 2.9)。Webdriver有時會跳過日期字段

元素定位信息:

<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瀏覽器,所以我無法證實,如果這個問題在其他瀏覽器

回答

2

我們得到與日期字段相同的錯誤。特別是最近的Chrome瀏覽器升級到版本34.嘗試回滾到版本33.它應該工作。

+0

嗯,這似乎是幫助。我會暫時關閉它,如果它再次擡起它醜陋的頭,它將重新開放。 – gorbysbm

1

根據您的控制檯輸出情況,您使用的是不正確定位。看起來是我沒有在任何地方看到data-model-attribute attr,讓我們使用ID。

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

謝謝,但定位是正確的。在webElement傳遞給函數之前,我檢查它是否可見並且存在於更早的方法中。數據模型屬性來自父元素,並且可以很好地與其他文本字段配合使用;它只是隨機失敗,日期字段 – gorbysbm

+0

順便說一句,我只是檢查你的空氣對配置文件,並在這裏你試圖回答我的問題。當然編程神已經把我們帶到一起:) – gorbysbm

0

相信的「日期」輸入型是新的HTML 5和需要特定的RFC 3339:http://www.ietf.org/rfc/rfc3339.txt

嘗試使用1981年1月1日,它應該工作。 YYYY-MM-DD,而不是MM/DD/YYYY。

+0

聽起來不錯,但不幸的是沒有工作。此外,當我輸入YYYY-MM-DD時,該應用預計輸入的日期爲MM/DD/YYYY,結果不是正確的日期:*主題:1信息:輸入文字:1981-11-01 *主題:1 INFO:輸入的文本是:11101-12-08 – gorbysbm

+0

「文本輸入」行來自不在上面的代碼片段中的位置? 這個字段可能只讀嗎? http://stackoverflow.com/questions/12419339/not-able-to-input-date-using-sendkeys-in-selenium-webdriver – DMart

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()"); 
相關問題