黄瓜水豚测试日期选择器选择了错误的日期

cucumber capybara testing date picker selects wrong day

我正在尝试为包含日期选择器的页面编写黄瓜测试。我发誓这在昨天有效,但今天就没那么有效了。

Then(/^select date (\d+) day(?:s|) prior to today$/) do |n|
  day=Date.today-(n.to_i)
  target = Date.strptime("#{day}",'%Y-%m-%d')
  target_month_year = target.strftime('%B %Y')
  selected_month_year = (find('.datepicker-switch').native.text)
        unless target_month_year == selected_month_year
          find('.prev').click
          sleep 1
        end
  find('.day', :text => "#{day.day}", match: :prefer_exact).click
  sleep 2
end

然后我有一个单独的测试来检查 selection 之后是否显示了正确的日期。我已经通过包含一个 puts(day.day) 以及所有其他变量来验证 day.day 给我正确的结果。我认为问题是匹配问题,今天的日期是 2015 年 4 月 24 日,我 select 在 15 天前。因此,显示上面月份和年份并允许您 select 上一个或下一个的日期选择器,然后显示的天数取决于该特定月份的天数。前后几天。上个月的天数是 class="old day",显示的月份的天数是 class="day",下个月的天数是 class="new day"。所以我想要的月份是四月,而这一天是第九天。它保持 selecting 3 月 29 日。这是包含“9”的页面上列出的第一天。但是 class 是错误的,因为我想要 "day" 而不是 "old day" 并且日期是错误的,因为我想要“9”而不是“29” 我什至输入了 :prefer_exact因为这已经修复了我过去匹配错误的元素。

不确定接下来要尝试什么。非常感谢任何建议。

黄瓜 1.3.10

水豚 2.4.1

ruby 1.9.3p551

理想情况下,如果可以避免的话,不要select通过文本。

但在这种情况下,请尝试使用正则表达式而不是纯文本。

find('.day', :text => Regexp.new("^#{day.day}$"), match: :prefer_exact).click

本期(目前未实现)末尾有一些相关阅读:https://github.com/jnicklas/capybara/issues/1256