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
我第一次编写 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