2016-11-22 125 views
0

我几天到写黄瓜/水豚测试的第一次,我遇到了麻烦。黄瓜/水豚找到()不重试

我有一个Login.feature文件有两个特点;一个使用无效凭证测试登录尝试,另一个使用有效凭证。前者测试成功,后者失败。

我通过查找是对每种类型的动作后呈现引导alert测试它们。在登录失败时,页面会刷新警报消息。如果成功,用户将被重定向到提供警报的主页。

我的问题似乎是,在使用有效凭据测试寻找“成功”的警报时,它失败,因为该页面没有加载。我知道find方法应该在Capybara.default_wait_time定义的一段时间内继续查找给定元素。

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

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

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

我看着这个错误的方式吗?从我读过的内容来看,不鼓励明确地等待一段时间,但默认机制不适用于我。

+0

你有没有试过'expect(page).to have_selector('div.alert.alert-success')'?或者'expect(page).to have_selector('#flash_notice')'。如果你发布你的html代码会更好 – fabersky

+0

你使用的驱动程序是什么? –

+0

我也尝试过'have_selector'方法,结果相同。 我不确定我使用的是哪个驱动程序。我没有修改它,所以我想默认情况下使用Cucumber v2.4.0 gem的驱动程序。 –

回答

0

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

+0

操作测试有点确认了凭据无效,即使我在手动登录时使用相同的凭据。 –

+0

@RyanDurel手动登录到测试环境?在通常在开发环境中工作的测试环境中运行测试,每个测试都有自己的数据库实例,在测试中,您需要使用工厂或设备生成每个测试所需的记录。 –

+0

你是对的,那是我没有意识到的。我需要对测试环境进行一些更改以匹配dev,尽管我仍然遇到问题。这更多与我们的项目设置有关。 –