2017-08-28 24 views
0

我有这样的步骤:是否豚“内”对付阿贾克斯,为什么CSS中失败,错误为“无法找到找到CSS”

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“。”合格bug“'

我觉得这很奇怪。 为断言已通过。这意味着CSS是可见的。 为什么在找不到css?它是如何发生的。

但是,此举在“内(”合格臭虫“)做”有错误“无法找到CSS‘.eligible臭虫’”

我觉得奇怪的是有时会失败。 为断言已通过。这意味着CSS是可见的。 为什么在找不到css?它是如何发生的。

BTW,我已经把我的最长等待时间为5

Capybara.default_max_wait_time = 5 

回答

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