如何找到与Capybara嵌套在div中的文本的链接?

时间:2017-07-28 17:23:50

标签: ruby-on-rails rspec capybara

我试图在导航栏中找到一个链接,嵌套如下:

<div class="menu logged-out" id="loggedoutmenu">
  <a href="/users/auth/twitter?state=navbar_basic" data-no-instant>
    <div class="option"> via Twitter</div>
  </a>
</div>

我尝试过使用以下方法,但没有一种方法有效:

  • find_link("via Twitter")
  • find_link("via Twitter", {href: "/users/auth/twitter?state=navbar_basic"})
  • find('div', {class: 'option'})

不确定如何抓住该元素......主要目标是通过click_link测试链接。

编辑: 这是完整的HTML结构:

<body>
 <div class="top-bar" id="top-bar">
   <nav>
    <--- other nav elements not listed --->
    <div class="navigation-butt desktop" id="navigation-butt"> 
      <div class="menu logged-out" id="loggedoutmenu">
        <a href="/users/auth/twitter?state=navbar_basic" data-no-instant>
          <div class="option"> via Twitter</div>
        </a>
      </div>
    </div>
   </nav>
  </div>
</body>

2 个答案:

答案 0 :(得分:1)

我猜测菜单已折叠,您还没有做任何事情来打开它,因此该链接实际上并未在页面上显示。假设您只需要点击“#loggedoutmenu”&#39;用于打开菜单的项目,您可以执行类似

的操作
find('#loggedoutmenu').click.click_link('via Twitter')

将点击“登录”菜单&#39;然后查找其中的链接,并在找到时单击该链接。如果点击“#loggedoutmenu&#39;不是您打开菜单的方式,那么您需要提供更多信息。

更新:您现在已经指示菜单在悬停时打开 - 因此假设用户必须将鼠标悬停在要单击的按钮的祖先上,您可以执行此操作

 find('<css selector for the visible element the user needs to hover over>').hover.click_link('via Twitter')

答案 1 :(得分:1)

将我的解决方案写成Thomas Walpole的扩展,这使我得到它。再次感谢,托马斯!

find('#navigation-butt').hover.click_link(href:"/users/auth/twitter?state=navbar_basic")

编辑:更新了我的答案,因为上一个解释不正确。