升级到Capybara 2.0后如何点击项目列表中的第一个链接?
如何在这种情况下点击第一个链接:
<div class="item"> <a href="/agree/">Agree</a> </div> <div class="item"> <a href="/agree/">Agree</a> </div>
within ".item" do first(:link, "Agree").click end
我得到这个错误:
Capybara::Ambiguous: Ambiguous match, found 2 elements matching css ".item"
没有within
我得到这个错误:
Failure/Error: first(:link, "Agree").click NoMethodError: undefined method `click' for nil:NilClass
你可以使用:
first('.item').click_link('Agree')
要么
first('.item > a').click
(如果你的默认select器是:CSS)
您的问题中的代码不起作用:
within ".item" do first(:link, "Agree").click end
相当于:
find('.item').first(:link, "Agree").click
水豚发现几个.item
的,所以它引发了一个例外。 我认为水豚2的这种行为非常好。
尝试以下操作:
within ".item" do click_link("Agree", :match => :first) end
资料来源:
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions#click_link-instance_method https://github.com/jnicklas/capybara#strategy
这个措词也起作用:
within first(".item") do click_link "Agree" end
Xpath可以处理元素。 我还不是很好,但有点像//div[@class='active'][1]/a
这可能会或可能不会工作,但重点是,XPath可以解决一系列的匹配,并拉出一个特定的。 你应该能够匹配这个。
来自我的一个项目的工作示例:
在page.find(“div.panel”,text:/ Proposals /)中做 在page.find('tr',text:/ Foo /)中做 page.should have_xpath('td [3]',text:@today) 结束 结束
由于first()并不总是等待,所以这可能是有用的:
expect(page).to have_css("selector") first("selector").click
简单的你可以使用:
$('.item').find('a').first().click();