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

How to make Capybara/Poltergeist wait for js initiated navigation to finish?

本文关键字:启动 导航 js 等待 Capybara Poltergeist      更新时间:2024-06-14

我有一个测试,检查用户从自动完成建议中选择一个选项后,路径是否发生了更改。我正在Poltergeist上测试Capybara。然而,大概是因为我通过JS触发了页面更改,所以我现在必须使用sleep语句来等待页面完成加载,这当然不理想。

这是js:

window.location.href = suggestion.url;

这就是测试:

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

其中arg1是预期的页面url。

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

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

expect(page).to have_current_path(arg1)

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

测试新页面上的某些内容(在您导航的页面上不存在),rspec将一直寻找,直到它出现(只要它在默认等待限制内),然后检查您的路径,例如,执行类似于第一个的操作

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

然后你的路径测试:

expect(current_path).to eq(arg1)