如何根据第二列中的值设置第一列中的复选框?

时间:2013-01-10 15:23:06

标签: ruby watir watir-webdriver browser-automation

我正在使用Ruby和Watir自动执行任务。

我想根据第二列中的值是否与我的输入值匹配来设置一个复选框(位于表的第一列)。例如,在以下代码段中,值“brett58”与我的输入值匹配,因此我想设置与之关联的复选框。

<tr class="cuesTableRowOdd">
    <td align="center">
        <input class="content-nogroove" type="checkbox" name="result[1].chked" value="true">
        <input type="hidden" value="7bd67e4d-a59f-0143-3886-22c1d205a5c1" name="result[1].col[0].stringVal">
        <input type="hidden" value="brett58" name="result[1].col[1].stringVal">
    </td>
    <td align="left">
        <a class="cuesTextLink" href="userEdit.do?key=7bd67e4d-a59f-0143-3886-22c1d205a5c1">brett58</a>
    </td>
    <td align="left">brett</td>
    <td align="left">lee</td>
    <td align="left"></td>
</tr>

但我无法做到。在上面的例子中,以下行用于此目的(因为我的输入值与第一行匹配):

browser.table(:class, "cuesTableBg").checkbox(:name, "result[1].chked").click

但它无法使用,因为所需的值可能并不总是在第一行。

循环遍历所有行是一种选择,但效率很低。

2 个答案:

答案 0 :(得分:2)

我愿意:

browser.table(:class, "cuesTableBg").rows.find{ |row| 
  row.cells[1].text == 'brett58'
}.checkbox.set

基本上,这就是说找到第二列中有“brett58”的表的第一行。然后设置该行中的第一个复选框。

答案 1 :(得分:0)

尝试这样的事情:

def set_checkbox(row_text_to_match)
  @browser.table(:class, "cuesTableBg").row(:text, /#{Regexp.escape(row_text_to_match)}/).checkbox(:name, "result[1].chked").set
end