在我的测试中,我有一个步骤,我填写一个字段,然后按回车键。然后,该字段将在下一页返回结果集。
这是我的助手方法:
def search(term)
fill_in('query-text', :with => term)
click_button('search-button')
end
之后我有一个简单的说法:
page.should have_content(tutor)
然而,问题在于,即使我的页面加载了结果后的页面,即使它应该为假,它也会通过。我在步骤中设置了一个调试器,当我手动检查它时,断言失败,因为我也期望它。我的假设是下一步是在页面重新加载之前检查。我在搜索方法结束时进行了一次睡眠,使其看起来像:
def search(term)
fill_in('query-text', :with => term)
click_button('search-button')
sleep 5
end
但我觉得使用睡眠是解决这个问题的一种黑客方法。我正在使用Capybara 2,因此删除了wait_until的使用。有没有更好的方法来处理这个问题而不是依赖睡眠?
答案 0 :(得分:5)
您的HTML页面中隐藏了tutor
个文字吗?对于html中存在的任何文本,has_content?
都会返回true
,包括不可见的隐藏文字。所以我宁愿用expect(page).to have_text(tutor)
替换它,它只检查页面上的可见文本。 .text
也是一种非常慢的方法,所以这些额外的分秒可能对你很方便。
另一种方法是在规范助手中恢复wait_until方法,因为在大多数情况下它非常方便:
def wait_until(timeout = DEFAULT_WAIT_TIME)
Timeout.timeout(timeout) do
sleep(0.1) until value = yield
value
end
end
在任何情况下,每次等待固定超时都会好一些。
答案 1 :(得分:1)
此测试在页面上已存在tutor
时通过。
因此,您应该检查不是tutor
,而是检查其他内容,例如对于文本tutor
的元素,仅在页面重新加载后才会出现。
答案 2 :(得分:0)
是的,你是对的wait_until被删除,新方法是#synchronize,但我现在还不知道如何使用它:)
了解
http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara
https://github.com/jnicklas/capybara/blob/master/lib/capybara/node/base.rb#L44