我会尽量保持简单。
我有一个类似行的列表:
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,这很明显,因为复选框没有嵌套标签。
在这种情况下我该怎么办?
由于
答案 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。