1

我有以下代码:

<table id="table1" class="class1">
    <thead>...<thead>
    <tbody>
        <tr id="1">
            <td class>cell1</td>
            <td class>cell2</td>
            <td class>cell3</td>
            <td class>cell4</td>
        </tr>
        <tr id="2">
            ....
        <\tr>
        ...

我需要检查所有行并检查单元格 3 是否有 "cell3" 作为文本。(对于初学者)然后在我找到它之后,我需要继续检查单元格 3 中不同字符串的行

我试过了:

string="cell3"
rows=browser.table.rows
rows.each {|tr| 
    if tr.td( :index =>2).text ==string
        puts " Found #{string}" 
        string="cellK"
    end
}

我在循环中执行此操作,因为我需要找到几个字符串。

但我得到了休闲错误:

 unable to locate element, using {:index=>2, :tag_name=>"td"}

有什么建议吗?如何获取 td 的文本?为什么我不能按索引找到 td ?

4

1 回答 1

4

我猜问题出在thead. 表头可能是这样的:

<thead>
    <tr id="0">
        <th class>heading1</th>
        <th class>heading2</th>
        <th class>heading3</th>
        <th class>heading4</th>
    </tr>
<thead>

请注意,有一个tr. table.rows因此将包括标题行。另请注意,它正在使用th而不是td单元格。这里很可能 watir 找不到索引为 2 的 td,因为这一行中根本没有 td。

假设这是问题所在,您有几个解决方案。

解决方案 1 - 使用单元格使 th 和 td 等效

在循环内部,使用cell代替td

rows.each {|tr| 
    if tr.cell( :index =>2).text == string    #Note the change here
        puts " Found #{string}" 
        string="cellK"
    end
}

Table#cell匹配tdth单元格。这意味着cell(:index, 2)它将匹配第三个tdth在行中。当 Watir 检查标题行时,它现在会找到一个值。

解决方案 2 - 忽略前导

获取要检查的行时,将行集合限制为仅包含 tbody 中的行:

rows = browser.table.tbody.rows

然后,这将忽略导致问题的标题中的 riws。

于 2012-12-24T18:17:30.277 回答