访问表中的表(Watir / PageObject)

时间:2013-06-14 20:24:38

标签: ruby gwt watir-webdriver pageobjects page-object-gem

我正在运行Watir-webdriver与Cheezy的PageObject进行黄瓜测试。我是ruby,测试,pageobjects和watir的新手。

我正在尝试访问一个表。具体来说,我正在尝试单击第7列中的图像。

这是我的代码:

tables.downcase!
tables.gsub!(/\s+/, '_')
tables_elements = self.send("#{tables}s_elements")
the_table = tables_elements[table_number]
the_table[row_number][column_number].click

运行此代码后,很明显它认为表(列,行,所有内容)是一个单元格。看完html之后,看来还有另一张表。该表是某种gwt表。这意味着我拥有的ID不是我想要的表,而是包含我想要的表的表。反正有没有得到我想要的东西?例如:

the_table[0].element[row_number][column_number]

或者我是否必须直接操纵html?因为,遗憾的是,似乎没有太多的操作,并且我无法通过原始的Java代码看到设置一个类(每个页面上的这些表的多个)。如果你能想到另一种点击图像的方式,我会很高兴听到它

提前谢谢

1 个答案:

答案 0 :(得分:2)

从表中访问表格:

您可以通过链接元素来获取表格中的表格。假设您希望表中的第一个表具有id,您可以执行以下操作:

your_table_element.table_element

例如,假设页面html是:

<table id="known_id">
    <tr>
        <td>
            <table>
                <tr>
                    <td>A0</td>
                    <td>B0</td>
                </tr>
            </table>
        </td>
    </tr>
</table>

您可以使用对已知表的引用来创建页面对象:

class MyPage
    include PageObject

    table(:your_table, :id => 'known_id')
end

然后,下面将为您提供子表的第一行的第二个单元格:

puts page.your_table_element.table_element[0][1].text
#=> "B0"

请注意,您可以将其他定位器传递给table_element方法。例如,如果子表实际上是第二个而不是第一个表,则可以执行以下操作:

puts page.your_table_element.table_element(:index => 1)[0][1].text
#=> "B0"

直接访问子表:

或者,假设您始终需要子表,则可以更改页面对象以进行访问。这是通过将一个块传递给访问器方法来完成的:

class MyPage
    include PageObject

    table(:actual_table){ table_element(:id => 'known_id').table_element }
end

这意味着您无需调用额外的table_element方法:

puts page.actual_table_element[0][1].text
#=> "B0"