在Rails项目中,我们使用pickadate
v3.6.2提供了日期选择器。测试已经进行了一段时间,但是最近从moment.js
移至luxon.js
时,一些功能规格失败了。 IRL,功能正常。我认为这与我们如何设置日期输入有关。我正在尝试使用正确的功能来驱动capybara
来设置日期输入。
日期输入采用的表单元素已初始化
$("#the_date_input").pickadate()
和使用脚本(IRL)的工作方式如下:
const startDateField = this.element.find(this.opts.the_date_inputs_field);
const datePicker = startDateField.pickadate('picker');
if (datePicker) {
// this logs the correct value in the browser console
console.log(datePicker.get('select', 'yyyy-mm-dd'));
...
}
浏览器中的日期格式类似于12, October, 2020
-可显示的长日期格式。
我们的capybara
代码尝试将值Rails
设置为默认的to_date
字符串格式,我认为是YYYY-MM-DD
。
page.execute_script("$('#the_date_input').val('#{start_date.to_date}');")
我需要将val
格式化为长英文日期字符串吗?或者在这些测试中使用pickadate
有更好的方法只是注入值或设置值(使用JS)。
答案 0 :(得分:0)
尽管更好的解决方案是构建一些与日期选择器交互的代码(就像普通用户一样,如@Thomas Walpole提到的那样),但是以编程方式与日期选择器模式交互是很棘手的。
我找到了一个解决方案-可能并不理想-但您可以使用pickadate
select
方法指定日期。这通过pickdate
代码运行,以正确设置输入值以及引擎盖下发生的任何其他事情。
这是我的水豚助手方法:
def set_pickadate_date(pickadate_selector, date)
page.execute_script("$('#{pickadate_selector}').pickadate('picker').set('select', [#{date.year}, #{date.month - 1}, #{date.day}]);")
end
我是通过pickadate
文档发现的:https://amsul.ca/pickadate.js/api/#method-set-select