单击Watir中嵌套元素的复选框

时间:2013-07-19 10:02:10

标签: testing watir watir-webdriver

我会尽量保持简单。

我有一个类似行的列表:

enter image description here

HTML code:

<li ...>
    <div ... >
        <some elements here>
    </div>
    <input id="121099" class="containerMultiSelect" type="checkbox" value="121099" name="NodeIds">
    <a ...>
        <div ... />
        <div ... >
            <h2>Identified Text</h2>
            <h3>...</h3>
        </div>
    </a>
</li>

我想单击带有特定文本的复选框,但我不能使用它的任何元素,因为它们对于所有列表都是相同的,并且id是自动生成的。唯一可以区分的是h2文本。我试过了:

browser.h2(:text => /Identified/).checkbox(:name => "NodeIds").set

我得到了UnknownException,这很明显,因为复选框没有嵌套标签。

在这种情况下我该怎么办?

由于

2 个答案:

答案 0 :(得分:2)

首先来看看这个解释 http://jkotests.wordpress.com/2012/12/20/finding-a-parent-element-that-matches-a-specific-criteria/

现在采用类似的方法,

首先找到具有唯一标识符的元素

parent=@browser.h2(:text=>"Identified Text")

现在我们必须迭代到父元素,其中包含复选框文本

parent=parent.parent until parent.tag_name=="li"

控件在li元素上后,只需单击复选框即可。

parent.checkbox.click

答案 1 :(得分:2)

h2和复选框与li相关,li是一个共同的祖先。因此,要查找复选框,您可以查找包含h2元素的li。我发现最可行的方法是使用元素集合的find方法。 find方法基本上允许您创建自定义定位器。

代码如下:

parent_li = browser.lis.find do |li|
    li.h2(:text => 'Identified Text').present?
end
parent_li.checkbox.set

注意:

  • browser.lis创建所有li元素的集合。
  • find遍历lis并返回第一个将块评估为true的元素 - 即第一个li,其中存在具有指定文本的h2。