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
由于我找不到基于正则表达式参数传递的元素,所以不得不根据位置点击!
答案 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}/)