1

我正在使用 Cheezy 的 PageObject 运行 Watir-webdriver 进行黄瓜测试。我是 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 代码设置一个类(每个页面上的多个这些表)。如果您能想到另一种单击图像的方式,我会很高兴听到

先感谢您

4

1 回答 1

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"
于 2013-06-14T22:11:45.767 回答