我是第一次写Cucumber / Capybara测试的几天,我遇到了麻烦。
我有一个包含两个功能的Login.feature
文件;一个用无效凭证测试登录尝试,另一个用有效凭证测试。前一个测试成功完成,而后一个测试失败。
我通过查找在每种操作类型后呈现的Bootstrap alert
来测试它们。在登录失败时,将使用警报消息刷新页面。成功后,用户将被重定向到显示警报的主页。
我的问题似乎是在寻找"成功"在测试中使用有效凭据发出警报,因为页面尚未加载而失败。我理解find
方法应该在Capybara.default_wait_time
定义的一段时间内继续查找给定元素。
以下是我使用的简单测试:
find('div.alert.alert-success')
每次都会导致Capybara::ElementNotFound
错误。我已将default_wait_time
设置为不同的长度(最长为500),但无论如何都会立即发生错误。我已经挖掘了find
的代码并注入了一些输出,因此我可以看到该块是否在这段时间内继续执行 - 它似乎尝试一次并在异常提升时停止
我是以错误的方式看待这个吗?根据我的阅读,我们不鼓励他们明确等待一段时间,但默认机制对我不起作用。
答案 0 :(得分:0)
Capybara中的默认驱动程序是rack-test,它不会等待,因为它不支持JS或任何其他类型的异步行为。听起来你的警报要么由JS呈现(在机架测试驱动程序中不会发生),在JS显示之前是隐藏的(不会发生)或者你的凭证实际上没有效果。您可以通过查看`page.html'来查看正在呈现的html。要使用其他驱动程序,请参阅Capybaras README - https://github.com/teamcapybara/capybara#drivers