如何让Capybara / Poltergeist等待js启动导航完成?

时间:2016-04-14 09:01:30

标签: javascript testing rspec capybara poltergeist

我有一个测试,用于检查用户从自动填充建议中选择一个选项后,路径是否已更改。我正在和Polygeist上的Capybara一起测试。但是,大概是因为我通过JS触发了页面更改,我现在必须使用sleep语句才能等待页面完成加载,这当然不太理想。

这是js:

window.location.href = suggestion.url;

这是测试:

sleep 1# Allow the time to navigate
expect(current_path).to eq(arg1)

其中arg1是预期的页面网址。

睡眠效果很好,但这并不是最佳的原因是显而易见的。如何使测试更智能并让它等待导航发生?

2 个答案:

答案 0 :(得分:7)

不要将eq匹配器与current_path一起使用(实际上与大多数Capybara事物一样),使用have_current_path匹配器

expect(page).to have_current_path(arg1)

将利用Capybara内置的自动等待/重试行为

答案 1 :(得分:0)

在新页面上测试某些内容(在您导航的页面上不存在),并且rspec会一直查看它(只要它在默认的等待限制内),然后检查你的道路,例如先做这样的事情

expect(page).to have_selector("a.testclass", text: "Some link on your new page")

然后你的路径测试:

expect(current_path).to eq(arg1)