使用Ruby Watir,如何选择具有更改ID的复选框?

时间:2013-05-21 19:47:59

标签: ruby salesforce watir

这是我正在使用的HTML:

<div class="pbSubsection">
    <table class="detailList" cellspacing="0" cellpadding="0" border="0">
        <tbody>
            <tr>
                <td class="labelCol">
                    <label for="00Ni0000003bw8O">Becomes Asset</label>
                </td>
                <td class="dataCol col02">
                    <input id="00Ni0000003bw8O" type="checkbox" value="1" tabindex="8" name="00Ni0000003bw8O" checked="checked">
                </td>

我需要选中复选框。

我无法使用该ID,因为我在多个组织中执行此操作,并且每个组织中的ID都不同。有没有办法可以通过标签文本或tabindex进行选择?

2 个答案:

答案 0 :(得分:3)

通过标签文本而不是tabindex获取复选框可能更安全。

解决方案1 ​​ - :标签定位器:

如果您使用的是watir-webdriver,则可以根据其标签文本直接找到元素 - 通过:label定位器。您可以执行以下操作:

#Exact match of label text:
b.checkbox(:label => 'Becomes Asset').set

#Partial match of label text using regex:
b.checkbox(:label => /Asset/).set

请注意,这假设标签的'for'属性与input元素的'id'属性匹配。

解决方案2 - 将标签与输入匹配:

对于适用于watir-classic(以及watir-webdriver)的解决方案,您可以:

  1. 按文字获取标签元素
  2. 获取标签元素的for属性
  3. 通过其ID获取关联的复选框,该ID与属性
  4. 的标签元素匹配

    以下内容适用于您的页面以清除复选框:

    label = browser.label(:text => 'Becomes Asset')
    browser.checkbox(:id => label.for).set
    

答案 1 :(得分:0)

要选择基于tabindex的复选框,使用:css:xpath定位器应该可以解决问题:

b.checkbox(:xpath => "//input[@tabindex='8']").set
b.checkbox(:css => 'input[tabindex="8"]').set