我有一个这样的步骤:
Then(/^I can see the Eligible Bugs list "([^"]*)"$/) do |bugs|
bugs_list = bugs.split(", ")
assert page.has_css?(".eligible-bugs", :visible => true)
within(".eligible-bugs") do
bugs_list.each do |bug|
assert page.has_content?(bug)
end
end
end
但有时在"在(" .eligible-bugs")内"错误'无法找到css" .eligible-bugs"'
我觉得这很奇怪。 因为断言已经过去了。这意味着css是可见的。 为什么内部找不到CSS?怎么会发生。
但有时在"在(" .eligible-bugs")内"错误'无法找到css" .eligible-bugs"'
我觉得这很奇怪。 因为断言已经过去了。这意味着css是可见的。 为什么内部找不到CSS?怎么会发生。
顺便说一下,我已将最长等待时间设置为5。
Capybara.default_max_wait_time = 5
答案 0 :(得分:0)
应该发生的唯一方法是,如果页面在您运行测试时动态更改 - 有时在检查页面上正在更改的所有错误内容并且'.eligible-bugs'元素正在运行办法。测试和浏览器分别运行,因此它发生的原因和原因取决于您的页面在浏览器中的其他内容,它还取决于测试前的步骤。
另请注意,它不一定会在首次运行的has_css?
和within
语句之间消失。如果它在within
运行的代码中的任何时候消失,它可能会抛出同样的错误,因为它试图重新加载'.eligible-bugs'元素。
从问题的标题我假设您要检查的列表是搜索或过滤操作的结果。如果是,该操作是否会删除现有的“.eligible-bugs”元素,然后在一段时间后将其替换为从ajax请求返回的新元素?如果是这种情况,那么,由于您控制测试数据,您应该等待显示正确的结果计数,从而确保在检查文本之前已完成任何元素替换。你如何做到这将取决于页面的确切构成,但如果每个符合条件的bug都是'.eligible-bugs'的孩子并且有一个'.eligible-bug'类,我会写你的测试类似
Then(/^I can see the Eligible Bugs list "([^"]*)"$/) do |bugs|
bugs_list = bugs.split(", ")
assert_css(".eligible-bugs > .eligible_bug", count: bugs_list.size) # wait until the expected number of results have shown up
within(".eligible-bugs") do
bugs_list.each do |bug|
assert_content(bug)
end
end
end