Capybara'不明确的匹配链接或按钮nil'

时间:2016-05-24 05:24:25

标签: ruby capybara

inspecting web element

code to find element

while True:
   data = yield self.ostream.read_until(b'CCMM\n')
   if data:
      data=data[:-1]+" "+str(cntr)
      for c in cl:
         yield c.write_message(json.dumps({"data":data}))

我一直在尝试点击嵌套在div元素中的锚标记,我试图根据我正在通过的争论点击'x'元素。

在尝试根据争论点击元素时,我得到 不明确的 匹配。

  

模糊匹配,发现3个元素匹配链接或按钮为零(Capybara :: Ambiguous)

附加的两个图像是页面上的代码和元素。请帮忙

解决:在@Tom

的帮助下
 def choose_ifp_term(ifp_term)
    if ifp_term == "Pay outright"
      Log.debug"Pay outright!"
    elsif ifp_term == "Interest Free 12 month"
      within page.first("div.tripleColumn") do
        page.find("div.device-payment-option-container").click_link_or_button(all("a").text.match(/#{ifp_term}/))
      end
      Log.debug"Found!"
    else
      Log.debug"Not Found!"
    end
  end

由于我找不到基于正则表达式参数传递的元素,所以不得不根据位置点击!

1 个答案:

答案 0 :(得分:0)

#all会返回一个类似于元素集合的数组,因此调用它上面的text并不是有效的,而且我不确定为什么它不会引发错误您。此外,#all有许多缺点(不等待,如果更改后无法重新加载找到的元素等),并且只应在绝对必要时使用。在您似乎正在寻找与正则表达式匹配的链接的情况下,您可以将#all的使用替换为#find

find('a', text: /#{ifp_term}/)

所以如果一起使用旧的Capybara那就是

page.find("div.device-payment-option-container").click_link_or_button(find('a', text: /#{ifp_term}/).text)

但是如果您使用Capybara 2.7,您应该可以

page.find("div.device-payment-option-container").click_link_or_button(nil, text: /#{ifp_term}/)

如果使用将变为2.8的Capybara master,你应该能够做到

page.find("div.device-payment-option-container").click_link_or_button(text: /#{ifp_term}/)