如何使用 Capybara 找到 link 中嵌套了文本的 div?

How to find a link that has text nested in a div with Capybara?

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

<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>

我试过使用以下方法并且 none 有效:

不太确定如何获取该元素...主要目标是通过 click_link.

测试 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>

我猜菜单是折叠的,您还没有打开它,所以 link 实际上在页面上不可见。假设您只需要单击“#loggedoutmenu”项即可打开菜单,您可以执行类似

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

会点击'loggedoutmenu'然后在里面寻找link,找到后点击link。如果点击“#loggedoutmenu”不是您打开菜单的方式,那么您需要提供更多信息。

更新:您现在已经指出菜单在悬停时打开 - 所以假设用户必须将鼠标悬停在您想要单击的按钮的祖先上,您可以这样做

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

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

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

编辑:由于之前的解释不正确,更新了我的答案。