我有一个日期字段,有时会被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,因此我无法确认其他浏览器是否出现此问题
答案 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。