15

我希望单击出现在我的测试应用程序上的弹出消息(如果存在)。我是水豚的新手,似乎找不到办法做到这一点。我以前有使用 watir 的经验,如果我使用 watir 进行操作,它会是这样的:

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

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

4

4 回答 4

30

直接的代码是调用has_link?matcher 然后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实现,因为第二个变体不会检查元素仅存在于一个地方,而第三个变体太长。

于 2013-06-05T22:36:20.893 回答
12

如果我使用has_css?查询:

if page.has_css?("button #popUpButton") 
    click_button(#popUpButton")
end
于 2017-10-12T14:17:43.820 回答
0

您可以使用,带选项minimum: 0

item = first ".dropdown-item", minimum: 0
item.click if item&.visible?
于 2021-12-01T08:44:12.523 回答
-4

您是否尝试过执行以下操作:

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
于 2013-06-05T21:12:24.733 回答