如何使用 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 有效:
find_link("via Twitter")
find_link("via Twitter", {href: "/users/auth/twitter?state=navbar_basic"})
find('div', {class: 'option'})
不太确定如何获取该元素...主要目标是通过 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")
编辑:由于之前的解释不正确,更新了我的答案。
我试图在我的导航栏中找到一个 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 有效:
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>
我猜菜单是折叠的,您还没有打开它,所以 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")
编辑:由于之前的解释不正确,更新了我的答案。