如何设置HTML5类型=";日期“;使用Selenium/量角器输入字段(例如,在Chrome中)?

如何设置HTML5类型=";日期“;使用Selenium/量角器输入字段(例如,在Chrome中)?,html,angularjs,selenium,protractor,Html,Angularjs,Selenium,Protractor,我想更新一些HTML5日期表单字段的日期值(显示为mm/dd/yyyy,仅数字部分可修改): <input type="date"/> 在我的硒/量角器测试中。我已经尝试使用sendKeys来实现这一点,但是(在Chrome上)到目前为止还没有成功 有没有办法使用sendKeys?或者其他方法来实现这一点?Selenium旨在模拟用户交互,而不是设置属性。 但是,通过设置类型来更新DOM元素可以使用Javascript完成 document.getElementById("so

我想更新一些HTML5日期表单字段的日期值(显示为mm/dd/yyyy,仅数字部分可修改):

<input type="date"/>

在我的硒/量角器测试中。我已经尝试使用
sendKeys
来实现这一点,但是(在Chrome上)到目前为止还没有成功


有没有办法使用
sendKeys
?或者其他方法来实现这一点?

Selenium旨在模拟用户交互,而不是设置属性。 但是,通过设置类型来更新DOM元素可以使用Javascript完成

document.getElementById("someID").setAttribute("type","date")

似乎目前最好的方法是更新输入字段而不触及其UI表示

对于普通的Selenium,此方法似乎有效(随着UI更新以匹配):

我的例子有点棘手,因为我使用的是角度和量角器,上面的方法没有导致模型被改变。因此,我最终采用了直接修改模型的方法(甚至更丑陋):

browser.waitForAngular();
browser.executeScript('var scope = angular.element($("#continuousFrom").get(0)).scope(); scope.dates.from = "2033-01-01"; scope.$apply();');
browser.executeScript('var scope = angular.element($("#continuousTo").get(0)).scope(); scope.dates.to = "2033-01-14"; scope.$apply();');

这也是在一个量角器测试中,我花了一段时间才意识到,
executeScript
调用并不等待Angular完成新DOM本身的创建-因此,
waitForAngular
确保ID在那里。

在Mac上使用Chrome和量角器,下面的方法对我有效

模板(html5)


在输入日期格式为“01-30-2015”之前,我一直出现错误。

今天我遇到了同样的问题,我在这里找到了解决方案


解决方案是只发送日期编号,例如,不发送“2015-06-12”,而需要发送“20150612”。

我在sendKeys()工作时遇到问题,但输入总是$invalid。唯一适合我的格式是“YYYY-MM-DD”,即“2015-08-05”。该格式的任何其他变化;斜杠而不是连字符、无分隔符等仍然无效

尽管我使用的是Firefox版本37.0.2,它显然支持HTML5输入类型=日期,但值得注意的是:

在尚不支持HTML5日期输入的浏览器中,将使用文本元素。在这种情况下,文本必须以有效的ISO-8601日期格式(yyyy-MM-dd)输入,例如:2009-01-06


FWIW与我的工作正好相反

我终于找到了一个有效的解决方案,使用
Date.prototype.toLocaleDateString

// Remember that Date months are 0 based.
var keys = selenium.executeScript(
    'return (new Date(2016, 2, 7)).toLocaleDateString()'
);
sendKeys(keys);

我的信用卡有效期只有月份和年份。从我这里得到的解决方案是使用pergrator.Key.TAB移动光标并输入,如下所示

元素(by.id('cc-expiry')).sendKeys('12',dragrator.Key.TAB,'2019')

所以你可以试试看

元素(by.id('cc-expiry')).sendKeys('12',dragrator.Key.TAB,'12',dragrator.Key.TAB,'2019');

对不起,我的问题不够清楚-我已经更新了。我需要从Selenium更新用户输入的日期值。是的,就是这个奇特的日期字段。如果你有一个你认为有效的方法,请进一步评论。我想我已经尝试过了,但大概没有。谢谢。我还需要将日期设置为mm dd yyyy格式才能让SendKeys正常工作。根据以下链接,用户在框中看到的格式是“从操作系统的设置中获得的”。当手动键入日期(或使用SendKeys模拟手动输入)时,我们似乎需要使用该格式。不适用于chrome。日期已中断:
2018-11-09
结束为
11/09/1908
<input type="date" placeholder="Due Date" ng-model="newLesson.dueDate">
this.newLessonDate = element( by.model('newLesson.dueDate') );
this.newLessonDate.sendKeys('01-30-2015');
// Remember that Date months are 0 based.
var keys = selenium.executeScript(
    'return (new Date(2016, 2, 7)).toLocaleDateString()'
);
sendKeys(keys);