Capybara测试中的日期选择器问题

8

我正在使用Capybara 1.0.0进行验收测试,并且一直很喜欢它,直到遇到一个问题。我的问题是我已经使用了jQuery日期选择器,但现在我不知道如何在我的测试规范中从日期选择器中选择日期。

如果有任何帮助,将不胜感激。


7
我们也遇到过类似的问题,我们的解决方案是直接在日期选择器文本框中输入日期,而不是尝试点击日历弹出框。这样做的理由是我们不想测试jQuery代码——我们要测试我们自己的代码。放手吧! - user483040
今天我也做了同样的事情,甚至不想尝试使用日期选择器本身。此外,我正在为一个正在运行的应用程序编写测试(很调皮,我知道),我已经知道日期选择器的功能正常。 - Tass
5个回答

25

也许测试一下是个好主意,因为日期格式可能会在保存到数据库时出现问题。这是我的做法:

page.execute_script %Q{ $('#auction_event_date').trigger("focus") } # activate datetime picker
page.execute_script %Q{ $('a.ui-datepicker-next').trigger("click") } # move one month forward
page.execute_script %Q{ $("a.ui-state-default:contains('15')").trigger("click") } # click on day 15

测试必须使用JavaScript驱动程序运行。


选择特定的月份,使用 page.execute_script %Q{ $('.ui-datepicker-month').val("4") } (基于0的索引,所以4代表五月)。同样地,选择特定的年份使用page.execute_script %Q{ $('.ui-datepicker-year').val("2016") }。 - Les Nightingill

2

我不喜欢使用JavaScript。如果Rails.env.test?,我只需公开alt字段,并直接使用Capybara定位alt。

我创建了一个帮助方法来生成日期选择器输入和隐藏字段(有点长,我认为没有必要全部展示)。在该方法中,我使用:

 def date_picker(options={})

    alt_field = Rails.env.test? ? "string" : "hidden"
    input = "#{ options[:f].input options[:field], as: alt_field.to_sym, input_html: {id: "#{options[

"as: alt_field.to_sym"是用于暴露日期选择器隐藏的alt字段。我可以通过以下方式在Capybara中定位到alt字段输入框(该输入框由模型处理):"as: alt_field.to_sym"。
  fill_in 'userdoc[issued_date]', with: "2013-05-02

简单、干净,无需JavaScript...


0

看一下我的例子,或许可以帮到你

  find("input.form-control.date-mask[ng-model='scope.values.created_at.start']").set(Date.yesterday)

1
这似乎是一个AngularJS解决方案。你确定这适合这个问题吗? - James A Mohler

0

在辅助函数中:

def fill_flatpickr_time_field(selector, value)
    page.execute_script "$('#{selector}').val('#{value}')"
end

测试示例:

fill_flatpickr_time_field('#article_calendar_end_time', '08:00')

0

出于某种原因,上面的page.execute_script答案对我不起作用。然而,这是一个取巧的方法来打开日历。

#trigger opening of calendar    
fill_in('#auction_event_date', with: "2013-05-01) 
#select specific day
click_link("27")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接