我想找到并点击以下值中的Line Lo
值。以下li
有超过100条记录具有相同的类名。如何查找Line Lo
并单击该值。
<div id="loc">
<ul id="tab">
<li class="criteria">
<div class="bud">
<div class="inner">
<div class="attr">Code Lo</div>
</div>
</div>
</li>
<li class="criteria">
<div class="bud">
<div class="inner">
<div class="attr">Line Lo</div>
</div>
</div>
</li>
<li class="criteria">
<div class="bud">
<div class="inner">
<div class="attr">Add Lo</div>
</div>
</div>
</li>
</ul>
</div>
当我尝试时,browser.ul(id: "tab").li(class: "criteria").div(text: "Line Lo")
发生了失败错误。
Unable to locate element, using(:class => "Criteria", :tag_name=>"li"
我尝试了不同的不同属性来查找文本Line Lo
,但我失败了。
此外,此元素类似于第45个,因此可以在点击之前向下滚动并刷新此值吗?
提前致谢
答案 0 :(得分:6)
您尝试的原始内容
browser.ul(id: "tab").li(class: "criteria").div(text: "Line Lo")
失败,因为当有多个元素可以匹配您指定的条件时,watir将使用它找到的第一个元素。那么要求watir做的事情将等同于英语中的以下内容
找到第一个带有“标签”的无序列表, 然后在该列表中找到具有类“条件”的第一个列表项, 然后在该列表项内,找到一个带有文本'Line Lo'的div。
由于该列表中的第一个LI不包含具有该文本的div,因此它将失败。
要点击最里面的div (基于评论,这就是您要做的事情)
browser.div(:class => "attr", :text => "Line Lo").click
又名找到一个带有“attr”类和文本“Line Lo”的div,然后让div点击它自己
这些其他选项是在不清楚OP究竟属于哪个div的情况下提出的,但是我要离开它们,因为它们可能会为其他在类似问题上挣扎的人提供信息
单击包含上述内容的div(父级)。
browser.div(:class => "inner", :text => "Line Lo").click
如果那个父div没有唯一性(没有类等),你仍然可以像这样
browser.div(:class => "attr", :text => "Line Lo").parent.click
点击包含所有内容的li标记
browser.li(:class => "criteria", :text => "Line Lo").click
对于其中任何一个,如果您需要限制只查看该特定列表,请指定如下
browser.ul(:id => "tab").li(:class => "criteria", :text => "Line Lo").click
答案 1 :(得分:3)
你可以尝试:
browser.ul(:id => 'tab').div(:class => 'attr', :text => 'Line Lo').click
使用.click
时,它应该在点击之前滚动到视图中。