Cucumber/Capybara find() 不重试

Cucumber/Capybara find() doesn't retry

我第一次编写 Cucumber/Capybara 测试已经有几天了,我 运行 遇到了麻烦。

我有一个包含两个功能的 Login.feature 文件;一个使用无效凭据测试登录尝试,另一个使用有效凭据测试登录尝试。前者测试成功,后者失败。

我正在通过寻找在每种类型的操作后呈现的 Bootstrap alert 来测试它们。登录失败时,页面会刷新并显示警告消息。成功后,用户将被重定向到显示警报的主页。

我的问题似乎是,在测试中使用有效凭据查找 "success" 警报时失败,因为页面尚未加载。我知道 find 方法应该在 Capybara.default_wait_time.

定义的一段时间内继续寻找给定的元素

以下是我正在使用的简单测试:

find('div.alert.alert-success')

这每次都会导致 Capybara::ElementNotFound 错误。我已经将 default_wait_time 设置为不同的长度(最长的是 500),但无论如何都会立即发生错误。我已经研究了 find 的代码并注入了一些输出,所以我可以看到该块是否在该时间段内继续执行 - 它似乎尝试一次并在引发异常时停止。

我是不是看错了?根据我的阅读,不鼓励明确等待一段时间,但默认机制对我不起作用。

Capybara 中的默认驱动程序是 rack-test,它不进行任何等待,因为它不支持 JS 或任何其他类型的异步行为。听起来您的警报要么由 JS 呈现(机架测试驱动程序不会发生),要么被隐藏直到被 JS 显示(不会发生),或者您的凭据实际上无效。您可以通过查看“page.html”来检查 html 正在呈现什么。要使用不同的驱动程序,请参阅 Capybaras README - https://github.com/teamcapybara/capybara#drivers