无法在Selenium WebDriver中使用sendKeys输入日期

时间:2012-09-14 06:40:24

标签: java selenium-webdriver

日期字段就像一个日历,我无法使用Selenium WebDriver的sendKeys输入日期。

但是在使用Selenium RC之前,日期字段中的“type”工作正常。

我尝试在“sendKeys()”之前使用“clear()”但是这给出了错误:

Caught Exception: Element is read-only and so may not be used for actions
Command duration or timeout: 10.11 seconds

sendKeys()适用于其他文本输入字段。

我尝试使用isDisplayed()来检查元素,它是真的。即使在浏览器中,当运行测试时,光标也会转到日期字段,但不会在其中键入任何文本。

5 个答案:

答案 0 :(得分:6)

使用以下代码...

((JavascriptExecutor)driver).executeScript ("document.getElementById('dateofbirth').removeAttribute('readonly',0);");

WebElement BirthDate= driver.findElement(By.id("dateofbirth"));
BirthDate.clear();
BirthDate.sendKeys("20-Aug-1985"); //Enter this date details with valid date format

答案 1 :(得分:3)

我也遇到了同样的问题。这就是我找到的解决方案。这对我来说很好。 只需删除输入字段的只读属性,然后像其他输入字段一样。

   ((JavascriptExecutor) driver).executeScript("document.getElementsByName('date'[0].removeAttribute('readonly');");
    WebElement dateFld = driver.findElement(By.id("date_completed"));
    dateFld.clear();
    dateFld.sendKeys("date Completed");

答案 2 :(得分:2)

对于该线程的未来读者,@ Flaburgan发布的解决方案 https://github.com/mozilla/geckodriver/issues/1070 被发现可以在Win7-64上使用Firefox 63

“为了便于记录,看起来具有正确格式的ISO日期(yyyy-mm-dd)的send_keys起作用。因此,以您的示例为例,您可以尝试使用诸如2012-11-02这样的值来调用send_keys吗?”

答案 3 :(得分:1)

如果您使用的是jQuery日期选择器对象,则该字段应为只读,并且必须从日历对象中选择日期。在这种情况下,您可以使用Selenium Web Driver的“选择”类方法来选择日期。

Select date = new Select(driver.findElement(By.linkText("the date want to select")));
date.click();

答案 4 :(得分:0)

我做到了这一点而且效果很好。照顾格式。通过这个,您甚至可以从控件中获取值。

var dob = element(by.id('dateOfBirth'))
dob.sendKeys('20-08-1985');

expect(element(by.id('dateOfBirth')).getAttribute('value')).toBe('2015-20-08');

希望它有所帮助。