我想更新一些HTML5日期表单字段的日期值(显示为mm / dd / yyyy,只有可修改的数字部分):
<input type="date"/>
在我的Selenium / Protractor测试中。我已尝试使用sendKeys
,但(在Chrome上)到目前为止尚未成功。
有没有办法使用sendKeys
执行此操作?或者其他一些方法呢?
答案 0 :(得分:7)
在Mac上使用带有Protractor的Chrome,以下方法对我有用。
模板(html5)
<input type="date" placeholder="Due Date" ng-model="newLesson.dueDate">
测试
this.newLessonDate = element( by.model('newLesson.dueDate') );
this.newLessonDate.sendKeys('01-30-2015');
在我输入日期格式为'01 -30-2015'之前,我一直收到错误。
答案 1 :(得分:2)
目前最好的方法似乎是更新输入字段而不触及其UI表示。
对于普通的Selenium,这种方法似乎有效(因为UI更新匹配):
selenium.executeScript('document.getElementById("continuousFrom").value = "2050-01-01"');
selenium.executeScript('document.getElementById("continuousTo").value = "2050-01-14"');
我的情况有点棘手,因为我使用的是Angular和Protractor,而上述方法并没有导致模型被更改。所以我最终采用了这种(甚至是更丑陋的)方法来直接修改模型:
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();');
这也是在Protractor测试中,我花了一段时间才意识到executeScript
调用不等待Angular完成创建新DOM本身 - 因此waitForAngular
确保ids就在那里。
答案 2 :(得分:2)
今天我遇到了同样的问题,我在这里找到了解决方案http://www.guru99.com/handling-date-time-picker-using-selenium.html
解决方案是仅发送日期编号,例如发送“2015-06-12”而不是发送“20150612”。
答案 3 :(得分:1)
我终于找到了一个有效的解决方案,使用Date.prototype.toLocaleDateString
:
// Remember that Date months are 0 based.
var keys = selenium.executeScript(
'return (new Date(2016, 2, 7)).toLocaleDateString()'
);
sendKeys(keys);
答案 4 :(得分:1)
我的信用卡到期日仅包含月份和年份。我使用的解决方案是使用protractor.Key.TAB来移动光标并输入如下所示
element(by.id('cc-expiry')).sendKeys('12', protractor.Key.TAB, '2019');
所以在你的情况下你可以试试
element(by.id('cc-expiry')).sendKeys('12', protractor.Key.TAB, '12', protractor.Key.TAB, '2019');
答案 5 :(得分:0)
Selenium旨在模仿用户交互而不是设置属性。 但是,通过设置类型来更新DOM元素可以使用Javascript
完成document.getElementById("someID").setAttribute("type","date")
答案 6 :(得分:0)
我遇到了sendKeys()正在运行的问题,但输入始终是$ invalid。对我有用的唯一格式是'YYYY-MM-DD',即'2015-08-05'。该格式的任何其他变体;斜杠而不是连字符,没有分隔符等仍然无效。
即使我使用的是Firefox版本37.0.2,它明确支持HTML5输入类型=日期,值得注意的是the docs say:
“在尚不支持HTML5日期输入的浏览器中,将使用文本元素。在这种情况下,必须以有效的ISO-8601日期格式(yyyy-MM-dd)输入文本,例如: 2009-01-06“。
FWIW This answer与对我有用的东西相反。