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

时间:2015-04-24 17:00:44

标签: ruby date datepicker cucumber capybara

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

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

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

不确定下一步该尝试什么。任何建议都非常感谢。

黄瓜1.3.10

capybara 2.4.1

ruby​​ 1.9.3p551

1 个答案:

答案 0 :(得分:1)

理想情况下,如果可以避免,请不要通过文字进行选择。

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

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

在这个(目前尚未实现的)问题的最后,有一点相关的阅读:https://github.com/jnicklas/capybara/issues/1256