如何从watir中的多个相同属性中查找文本?

时间:2013-04-03 16:49:33

标签: watir watir-webdriver

我想找到并点击以下值中的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个,因此可以在点击之前向下滚动并刷新此值吗?

提前致谢

2 个答案:

答案 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时,它应该在点击之前滚动到视图中。