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

Sri*_*Sri 2 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>
Run Code Online (Sandbox Code Playgroud)

我试过的时候 browser.ul(id: "tab").li(class: "criteria").div(text: "Line Lo")

得到了失败错误.

Unable to locate element, using(:class => "Criteria", :tag_name=>"li"
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的,不同的属性来找到文本Line Lo而我失败了.

此外,此元素类似于第45个,因此可以在单击之前向下滚动并刷新此值吗?

提前致谢

Chu*_*den 6

你试过的最初的东西

browser.ul(id: "tab").li(class: "criteria").div(text: "Line Lo")
Run Code Online (Sandbox Code Playgroud)

失败,因为当有多个元素可以匹配您指定的条件时,watir将使用它找到的第一个元素.那么要求watir做的事情将等同于英语中的以下内容

找到第一个带有id'tab'的无序列表,然后在该列表中找到第一个带有'criteria'类的列表项,然后在该列表项中找到一个带有'Line Lo'文本的div.

由于该列表中的第一个LI不包含具有该文本的div,因此失败.

要点击最里面的div(根据评论,这是你要做的)

browser.div(:class => "attr", :text => "Line Lo").click
Run Code Online (Sandbox Code Playgroud)

找到一个带有"attr"类和文本"Line Lo"的div,然后让div单击它


这些其他选项是在不清楚OP究竟属于哪个div的情况下提出的,但是我要离开它们,因为它们可能会为其他在类似问题上挣扎的人提供信息.

单击包含上面一个(父项)的div.

browser.div(:class => "inner", :text => "Line Lo").click
Run Code Online (Sandbox Code Playgroud)

如果那个父div没有唯一性(没有类等),你仍然可以这样做

browser.div(:class => "attr", :text => "Line Lo").parent.click
Run Code Online (Sandbox Code Playgroud)

单击包含所有内容的li标记

browser.li(:class => "criteria", :text => "Line Lo").click
Run Code Online (Sandbox Code Playgroud)

对于其中任何一个,如果您需要限制只查看该特定列表,请指定如下

browser.ul(:id => "tab").li(:class => "criteria", :text => "Line Lo").click
Run Code Online (Sandbox Code Playgroud)