Jus*_*eph 12 ruby-on-rails cucumber capybara
在我的测试中,我有一个步骤,我填写一个字段,然后按回车键.然后,该字段将在下一页返回结果集.
这是我的助手方法:
def search(term)
fill_in('query-text', :with => term)
click_button('search-button')
end
Run Code Online (Sandbox Code Playgroud)
在那之后,我有一个简单的说法:
page.should have_content(tutor)
Run Code Online (Sandbox Code Playgroud)
但是,问题在于,即使我的页面加载了结果之后的页面,即使它应该为假,它也会通过该步骤.我在步骤中设置了一个调试器,当我手动检查它时,断言失败,因为我也期望它.我的假设是下一步是在页面重新加载之前检查.我在搜索方法结束时进行了一次睡眠,使其看起来像:
def search(term)
fill_in('query-text', :with => term)
click_button('search-button')
sleep 5
end
Run Code Online (Sandbox Code Playgroud)
但我觉得使用睡眠是解决这个问题的一种黑客方式.我正在使用Capybara 2,因此删除了wait_until的使用.有没有更好的方法来处理这个问题而不是依赖睡眠?
你有没有tutor在你的HTML页面文字隐藏?has_content?返回truehtml中存在的任何文本,包括不可见的隐藏文本。因此,我宁愿将其替换为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
Run Code Online (Sandbox Code Playgroud)
无论如何,总比每次等待固定的超时时间要好。
是的,你是对的 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
| 归档时间: |
|
| 查看次数: |
9050 次 |
| 最近记录: |