1

我会尽量保持简单。

我有一个类似的行列表:

在此处输入图像描述

HTML 代码:

<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,这很明显,因为复选框没有嵌套标签。

在这种情况下我能做什么?

谢谢

4

2 回答 2

2

h2 和 checkbox 由 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 。
于 2013-07-19T13:02:19.223 回答
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
于 2013-07-19T11:46:23.403 回答