2

我想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 个,所以可以在点击之前向下滚动并闪烁这个值吗?

提前致谢

4

2 回答 2

6

你尝试过的原始东西

browser.ul(id: "tab").li(class: "criteria").div(text: "Line Lo")

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

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

由于该列表中的第一个 LI 不包含带有该文本的 div,因此它失败了。

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

browser.div(:class => "attr", :text => "Line Lo").click

也就是给我找一个带有“attr”类和文本“Line Lo”的div,然后让div自己点击


这些其他选项是在不清楚 OP 到底是哪个 div 时提出的,但我要离开它们,因为它们可能会为其他在类似问题上苦苦挣扎的人提供信息

单击包含上述 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
于 2013-04-03T17:33:49.653 回答
3

你可以试试:

browser.ul(:id => 'tab').div(:class => 'attr', :text => 'Line Lo').click

使用时.click,它应该在被点击之前滚动到视图中。

于 2013-04-03T17:06:31.393 回答