首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在升级到Capybara 2.0后点击项目列表中的第一个链接?

如何在升级到Capybara 2.0后点击项目列表中的第一个链接?
EN

Stack Overflow用户
提问于 2013-01-25 08:29:30
回答 4查看 81.8K关注 0票数 135

在这种情况下如何单击第一个链接:

代码语言:javascript
复制
<div class="item">
  <a href="/agree/">Agree</a>
</div>
<div class="item">
  <a href="/agree/">Agree</a>
</div>
代码语言:javascript
复制
within ".item" do
  first(:link, "Agree").click
end

我得到了这个错误:

代码语言:javascript
复制
Capybara::Ambiguous:
  Ambiguous match, found 2 elements matching css ".item"

如果没有within,我会得到这样的错误:

代码语言:javascript
复制
Failure/Error: first(:link, "Agree").click
NoMethodError:
  undefined method `click' for nil:NilClass
EN

回答 4

Stack Overflow用户

发布于 2014-08-13 02:41:37

这种说法也适用:

代码语言:javascript
复制
within first(".item") do
  click_link "Agree"
end
票数 25
EN

Stack Overflow用户

发布于 2019-06-18 17:30:50

这些解决方案中的大多数都不会使用Capybara出色的等待功能

最好按照此链接的建议进行操作:

https://thoughtbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara#find-the-first-matching-element

不好:

first(".active").click

如果页面上还没有.active元素,first将返回nil,单击将失败。

好:

如果你想确保只有一个

find(".active").click

如果您只想要第一个元素

find(".active", match: :first).click

水豚将等待元素出现,然后再尝试单击。

请注意,match: :first更脆弱,因为如果您引入匹配的新元素,它将静默地单击不同的元素。

票数 5
EN

Stack Overflow用户

发布于 2016-09-04 07:50:31

由于first()并不总是等待,也许这是有用的:

代码语言:javascript
复制
expect(page).to have_css("selector")                               
first("selector").click
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14513377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档