如果它存在于水豚中,则单击元素

时间:2013-06-05 19:24:26

标签: capybara

我希望点击我的测试应用中显示的弹出消息(如果存在)。我是水豚的新手,似乎找不到办法做到这一点。我之前有过watir的经验,如果我用watir做的话,那就像是:

if browser.link(:text, "name").exists? do
   browser.link(:text, "name").click
end

我怎样才能在水豚中做同样的事情?请注意,此链接并不总是出现,因此我希望获得if语句。

3 个答案:

答案 0 :(得分:27)

直接代码只是调用has_link?匹配器然后click_link操作:

if page.has_link?('name')
  page.click_link('name')
end

但它不是最快的解决方案,因为Capybara会向驱动程序发出两个查询来获取元素:第一个在has_link?中,第二个在click_link中。

更好的变体可能是只生成一个查询来获取元素:

# This code doesn't check that an element exists only at one place and just chooses the first one
link = first('name')
link.click if link

# This code checks that element exists only at one place
links = all('name')
unless links.empty?
  links.count.should == 1
  link = links.first
  link.click
end

就个人而言,我会选择has_link? / click_link实施,因为第二个变体不会检查该元素是否只存在于一个地方而第三个存在太长。

答案 1 :(得分:6)

如果我使用has_css?查询:

if page.has_css?("button #popUpButton") 
    click_button(#popUpButton")
end

答案 2 :(得分:-3)

你有没有尝试过这样的事情:

if page.find('.id') do 
   click_link('Some Link') # or page.find('.id').click
else 
   page.should_not have_selector('.id') # or something like that
end