我正在尝试为包含日期选择器的页面编写黄瓜测试。我发誓这是昨天工作,但今天没那么多。
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
答案 0 :(得分:1)
理想情况下,如果可以避免,请不要通过文字进行选择。
但在这种情况下,请尝试使用正则表达式而不是纯文本。
find('.day', :text => Regexp.new("^#{day.day}$"), match: :prefer_exact).click
在这个(目前尚未实现的)问题的最后,有一点相关的阅读:https://github.com/jnicklas/capybara/issues/1256