我正在运行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代码看到设置一个类(每个页面上的这些表的多个)。如果你能想到另一种点击图像的方式,我会很高兴听到它
提前谢谢
答案 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"