如何使用 pageobject gem 动态访问/定义 table 行?
How to dynamically access/ define a table row with pageobject gem?
我有一个table这样的
<iframe title="ManageLegs">
<table title="Leg Details">
<tr>
<th />
<th class="headerRow"><div>Dep Date</div></th>
<th class="headerRow"><div>ETD</div></th>
</tr>
<tr>
<td>1</td>
<td>2015-02-01</td>
<td>0900</td>
</tr>
<tr>
<td>2</td>
<td>2015-02-15</td>
<td>1100</td>
</tr>
</table>
</iframe>
每行的第一个单元格中都有其编号。
问题是,行数各不相同,在为该站点定义 PageObject 时,我不知道会有多少行。
目前我在 PageObject 上使用这段代码来访问 table 个单元格
in_iframe(:title => 'ManageLegs') do |frame|
table(:leg_details, title: 'Leg Details', :frame => frame)
# 1st leg
text_field(:departure_date1) { leg_details_element['1']['Dep Date'].text_field_element }
# 2nd leg
text_field(:departure_date2) { leg_details_element['2']['Dep Date'].text_field_element }
# 3rd leg ...
# ...
end
但这根本不是干的。
关于如何简化这个有什么建议吗?
提前致谢,
克里斯蒂安
只要在你的页面写一个方法:
in_iframe(:title => 'ManageLegs') do |frame|
table(:leg_details, title: 'Leg Details', :frame => frame)
end
def departure_date(number)
leg_details_element[number]['Dep Date'].text_field_element
end
就个人而言,我喜欢将行定义为小部件。这为页面提供了描述性 API。
The Leg class 代表一行:
class Leg < PageObject::Elements::TableRow
def index
cell_element(index: 0).text
end
def dep_date
cell_element(index: 1).text
end
def etd
cell_element(index: 2).text
end
end
PageObject.register_widget :leg, Leg, :tr
页面对象:
class MyPage
include PageObject
in_iframe(:title => 'ManageLegs') do |frame|
legs(:leg) do
table_element(:title => 'Leg Details', :frame => frame)
.leg_elements(:tag_name => 'tr')[1..-1]
end
end
end
用法示例:
page = MyPage.new(browser)
page.leg_elements.each do |leg|
p leg.index
p leg.dep_date
p leg.etd
end
#=> "1"
#=> "2015-02-01"
#=> "0900"
#=> "2"
#=> "2015-02-15"
#=> "1100"
我有一个table这样的
<iframe title="ManageLegs">
<table title="Leg Details">
<tr>
<th />
<th class="headerRow"><div>Dep Date</div></th>
<th class="headerRow"><div>ETD</div></th>
</tr>
<tr>
<td>1</td>
<td>2015-02-01</td>
<td>0900</td>
</tr>
<tr>
<td>2</td>
<td>2015-02-15</td>
<td>1100</td>
</tr>
</table>
</iframe>
每行的第一个单元格中都有其编号。 问题是,行数各不相同,在为该站点定义 PageObject 时,我不知道会有多少行。
目前我在 PageObject 上使用这段代码来访问 table 个单元格
in_iframe(:title => 'ManageLegs') do |frame|
table(:leg_details, title: 'Leg Details', :frame => frame)
# 1st leg
text_field(:departure_date1) { leg_details_element['1']['Dep Date'].text_field_element }
# 2nd leg
text_field(:departure_date2) { leg_details_element['2']['Dep Date'].text_field_element }
# 3rd leg ...
# ...
end
但这根本不是干的。 关于如何简化这个有什么建议吗?
提前致谢, 克里斯蒂安
只要在你的页面写一个方法:
in_iframe(:title => 'ManageLegs') do |frame|
table(:leg_details, title: 'Leg Details', :frame => frame)
end
def departure_date(number)
leg_details_element[number]['Dep Date'].text_field_element
end
就个人而言,我喜欢将行定义为小部件。这为页面提供了描述性 API。
The Leg class 代表一行:
class Leg < PageObject::Elements::TableRow
def index
cell_element(index: 0).text
end
def dep_date
cell_element(index: 1).text
end
def etd
cell_element(index: 2).text
end
end
PageObject.register_widget :leg, Leg, :tr
页面对象:
class MyPage
include PageObject
in_iframe(:title => 'ManageLegs') do |frame|
legs(:leg) do
table_element(:title => 'Leg Details', :frame => frame)
.leg_elements(:tag_name => 'tr')[1..-1]
end
end
end
用法示例:
page = MyPage.new(browser)
page.leg_elements.each do |leg|
p leg.index
p leg.dep_date
p leg.etd
end
#=> "1"
#=> "2015-02-01"
#=> "0900"
#=> "2"
#=> "2015-02-15"
#=> "1100"