如何在watir中选择之前的元素?

时间:2013-12-26 08:44:35

标签: ruby html-table watir

我有Watir的问题。 在UI中,有许多表如下:

<tr>
    <td>
        <select>
            <option value="0">0</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
    </td>
    <td>
        ABCD
    </td>
</tr>

我需要搜索UI中是否存在“ABCD”(如果存在),然后在下拉列表中选择“2”之类的值 试过这种方式,但效果不好

puts b.td(:text => "ABCD").exist?
puts b.td(:ABCD").parent.row(:index, 0)

还有另一张表如下:

<tr>
    <td>
        <select>
            <option value="1">1</option>
            <option value="2">2</option>
        </select>
    </td>
    <td>
        <select>
            <option value="ABCD">ABCD</option>
            <option value="EFGH">EFGH</option>
            <option value="IJKL">IJKL</option>
        </select>
    </td>
</tr>

相同要求:搜索UI中是否存在“ABCD”(如果存在),然后在下拉列表中选择“2”之类的值 以这种方式尝试,基于你向我展示的方式,效果不佳

if b.td(:text, "ABCD").present?
    b.td(:text, "ABCD").parent.select_list.select('2')
end

1 个答案:

答案 0 :(得分:0)

如果你想根据“ABCD”出现一些事情,那么你需要使用if语句(而不仅仅是检查它是否存在)。同样,您可能希望检查元素是present?而不只是exist?exist?仅检查元素是否在DOM中,并且不检查该元素是否实际显示给用户(有关详细信息,您可以看到this blog post)。

if b.td(:text => "ABCD").present?
  # Do something when the element is displayed
end

之前的td元素称为兄弟元素,有一个couple of options。我们可以按照您的尝试使用parent方法。但请注意,parent方法已经返回了row元素(因为它是td的父元素)。要找到选择列表:

b.td(:text => "ABCD").parent.select_list

全部放在一起:

if b.td(:text => "ABCD").present?
    b.td(:text => "ABCD").parent.select_list.select('2')
end