如何在使用Capybara 1.x提交表单后验证页面内容

时间:2013-08-02 18:45:05

标签: rspec capybara

我正在撰写功能/集成规范来验证内容 在页面上提交表单后。表单提交后, 我们的代码重定向(302)到一个主要说“帐户已保存”的页面。

我遇到了竞争条件,无法验证所看到的网页内容 表格提交后。我们目前仍然在Capybara 1.1.2(我们的经理希望留在其中)。这就是我所拥有的,但它有时会过去而有时会失败。

fill_in 'Some Field', with: 'Some Value'
click_button 'Save'

WAIT_CONDITION
page.should have_content('Account saved')

对于包含WAIT_CONDITION的行,我尝试过以下方法, 但他们要么不一致地传递,要么有时会产生错误:

# this fails because 'page' sometimes evaluates to page w/ form, not confirmation page
wait_until(5) { page.has_content? 'Account Saved' }

# sometimes generates "NoMethodError: undefined method `-' for "Conflict":String"
wait_until(5) { current_url =~ /#{confirmation_url}$/ }

# sometimes generates "undefined method `map' for nil:NilClass"
wait_until(5) { current_url != /#{form_url}$/ }

# this works, but it's a hack
sleep(5)

1 个答案:

答案 0 :(得分:1)

您可以假设wait_until块中的任何异常都是由于竞争条件而忽略它们(即抢救它们)。它仍然是一个黑客,但它比使用睡眠更好。

尝试添加返回false的救援:

wait_until(5) { current_url =~ /#{confirmation_url}$/ rescue false }