我是新手。请指教。如何选择我的复选框?
<ul class="phrases-list" style="">
<li>
<input type="checkbox" class="select-phrase">
<span class="prase-title"> Dog - Wikipedia, the free encyclopedia </span>
<a href="en.wikipedia.org">(en.wikipedia.org)</a>
<div class="prase-desc hidden">The domestic dog (Canis lupus familiaris or Canis familiaris) is a domesticated...</div>
</li>
以下内容对我不起作用:
When /I check box "([^\"]+)"$/ do |label|
page.check(label)
end
步骤:我勾选“狗 - 维基百科,免费百科全书”
答案 0 :(得分:0)
如果您可以更改html,请将输入和span包装在标签元素
中<ul class="phrases-list" style="">
<li>
<label>
<input type="checkbox" class="select-phrase">
<span class="prase-title"> Dog - Wikipedia, the free encyclopedia </span>
</label>
<a href="en.wikipedia.org">(en.wikipedia.org)</a>
<div class="prase-desc hidden">The domestic dog (Canis lupus familiaris or Canis familiaris) is a domesticated...</div>
</li>
其中包含点击“狗 - 维基百科...”的额外好处...&#34;文本也会触发复选框。通过该更改,您的步骤应该按照书面形式工作如果你不能修改html那么事情变得更加困难 像
这样的东西find('span', text: label).find(:xpath, './preceding-sibling::input').set(true)
应该有用,虽然我很好奇你是如何使用JS中的这些复选框而没有将它们绑定到任何特定值
答案 1 :(得分:0)
假设您无法更改HTML。在这种情况下,通过XPath查询元素可能最简单。例如:
# Here's the XPath query
q = "//span[contains(text(), 'Dog - Wikipedia')]/preceding-sibling::input"
# Use the query to find the checkbox. Then, check the checkbox.
page.find(:xpath, q).set(true)
好的 - 它没有它看起来那么糟糕!让我们分析一下这个XPath,这样我们就能理解它在做什么:
//span
第一部分说&#34;搜索整个HTML文档并发现所有&#34; span&#34;元素。当然,可能有很多&#34; span&#34; HTML文档中的元素,因此我们需要对此进行限制:
//span[contains(text(), 'Dog - Wikipedia')]
现在我们只搜索&#34; span&#34;包含文本的元素&#34; Dog - Wikipedia&#34;。据推测,该文本将唯一地标识所需的&#34; span&#34;页面上的元素(如果没有,则只搜索更多文本)。
此时,我们有&#34; span&#34;与所需&#34;输入相邻的元素&#34;元件。所以,我们可以查询&#34;输入&#34;元素使用&#34;前兄弟::&#34; XPath Axis:
//span[contains(text(), 'Dog - Wikipedia')]/preceding-sibling::input