找不到使用水豚的链接

时间:2013-12-19 08:39:51

标签: ruby-on-rails rspec cucumber capybara

我正在使用黄瓜和水豚来测试我的应用程序。但是,我似乎无法在我的页面中找到锚点链接。我使用save_and_open_page来调试特定步骤,这是输出页面的相关填充:

<ul class='nav navbar-nav navbar-right'>
  <li><a href="http://www.example.com/en/accounts/login">Login</a></li>
  <li><a href="http://www.example.com/en/accounts/register">Register</a></li>
</ul>

我的方案失败的步骤包括以下代码:

expect(page).to have_link("Login")
expect(page).to have_link("Register")

我从水豚那里得到的失败信息是:

Capybara::ExpectationNotMet: expected to find link "Login" but there were no matches. Also found "", which matched the selector but not all filters.

我试图用id,name等取代我的期望,但没有运气。

有没有人可能知道如何才能让它发挥作用?

编辑:

可能证明有用的信息:

前面提到的两个链接位于我在我的测试中访问的页面布局中包含的部分内:

  • _title_bar.html.haml:包括如上所示的登录和注册链接
  • layout.html.haml:包含_partial.html.haml partial
  • login.html.haml:使用layout.html.haml作为templat
  • 进行渲染

例如

我注意到,当我直接将链接放在login.html.haml中时,我的测试通过了。当我将它们包含在layout.html.haml或_title_bar.html.haml中时,capybara无法解决它们。

1 个答案:

答案 0 :(得分:2)

从提供的信息中很难说出来,但这里有几点需要注意:

  1. 默认情况下,Capybara找不到隐藏的元素。如果链接是通过JavaScript或CSS隐藏的,那么这将给出您所看到的行为。您可以通过调用expect(page).to have_link("Login", visible: false)

  2. 来覆盖它
  3. 根据您使用的驱动程序,Capybara可能对页面中形成不良的标记很敏感。当您将链接移动到layout.html.haml_title_bar.html.haml时,它是否可能会在嵌套不正确的元素内部结束?