如何测试内容是否可见,而不是Capybara / Selenium中的滚动条隐藏

时间:2014-06-29 23:03:56

标签: ruby-on-rails ruby selenium capybara

我有一些代码可以更新一次显示时间轴的哪个部分。因此,如果您正在查看从2013年1月1日到2013年12月31日的时间范围,您可以说我想要一次显示所有12个月,或者我只想要显示6个月(例如)。如果选择后者,则显示Jan - Jun,您必须向右滚动时间轴以查看剩余月份。

我试图用Selenium& amp;水豚。对于每个月,相应的缩写出现在时间轴的顶部(Jan,Feb等)。对于显示所有12个月的情况,我目前有这个......

expected = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']

for exp in expected do
  assert page.has_content?(exp), "Expected page to have #{exp}, it did not."
end

对于您选择一次只显示6个月的情况,我尝试执行以下操作:

expected = ['Jan','Feb','Mar','Apr','May','Jun']
for exp in expected do
  assert page.has_content?(exp), "Expected page to have #{exp}, it did not."
end

not_expected = ['Jul','Aug','Sep','Oct','Nov','Dec']
for exp in not_expected do
  assert !page.has_content?(exp), "Expected page NOT to have #{exp}, but it did."
end

问题是not_expected个月仍然在页面的内容中,它们只是不可见。我研究过使用:visible => true但是很难弄清楚如何使用它。此外,内容未被设置为不可见...它就在页面之外。有没有办法用Capybara / Selenium进行测试?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用find命令而不是page.has_content

你应该可以传入你已经使用的缩写,而且Capybara应该(默认情况下)忽略它看不到的任何东西(例如,如果它不在屏幕上)。

还有一个设置可用于确保Capybara忽略隐藏元素,但我相信这是默认行为:

Capybara.ignore_hidden_elements = true

顺便说一句,我避免在测试中的任何地方使用!page.has_content?,因为Capybara会在返回任何内容之前等待您的默认超时。有一个page.has_no_content?方法可以做到这一点,并且只要内容不存在就会立即返回,从而为您节省宝贵的时间。