如何使用 page-object 获取基于 table 中其他元素的元素列表?
How to get an element list based on other element in a table using page-object?
如何使用 watir 根据 table 中的另一个元素获取元素的文本列表 page-object 我已经使用 xpath 获取它但是有没有更好的方法因为使用 xpath 不是问题,但我需要编写大量 xpath 来获取这些列表,因为元素可能会根据 tables.
发生变化
对于下面的 table,我正在获取如下元素的文本列表:
xpath for fuel: //table[contains(@id,'scheduleData')]/descendant::span[@id='label' and text()='F']/following::span[2]
xpath for inspection: //table[contains(@id,'scheduleData')]/descendant::span[@id='label' and text()='I']/preceding::span[1]
因此,对于每个有数据的燃料和检查点,我需要找到加密位置,并且我需要单独维护燃料和检查位置列表。
这是一个小例子,因为我不能 post 整个 table 因为它很大而且数据很敏感。
table id: 'scheduleDataab12'
-----------------------------------------------------------
Fuel Point | Company | Location | Inspection Point | Time |
-----------------------------------------------------------
F | Google | XMAT | I | 20/12/2018 08:00
... | Apple | MBXZ | ... | 20/12/2018 08:00
K | Amazon | JKLD | O | 20/12/2018 08:00
... | Microsoft | VBAB | ... | 20/12/2018 08:00
我已经post编辑了下面 link
要点 github 页面中的 html 内容
在下面html这是tableclass:ricGrid ricGridLoaded在这个table有两个headers 在 thead 我需要删除第一个 tr 然后将整个 table 转换成散列。
HTML Link:https://gist.github.com/anilreddy/ce55341b2337889f17e498393cff2d81
简单Table
对于简单的table,我认为最可读的方法是使用Watir的Table#hashes
方法来提取文本。
您将为 table:
定义一个访问器
class MyPage
include PageObject
table(:schedule_data, id: /scheduleData/)
end
然后使用#hashes
得到代表每一行的哈希数组:
data = page.table_element.hashes
#=> [{"Fuel Point"=>"F", "Company"=>"Google", "Location"=>"XMAT", "Inspection Point"=>"I", "Time"=>"20/12/2018 08:00"}, {"Fuel Point"=>"...", "Company"=>"Apple", "Location"=>"MBXZ", "Inspection Point"=>"...", "Time"=>"20/12/2018 08:00"}]
data.find { |r| r['Fuel Point'] == 'F' }.fetch('Company')
#=> "Google"
Table 有额外的 Header
对于带有额外 header 行的 table,您需要编写自己的方法。该代码类似于 Table#hashes
,但有一个额外的步骤来忽略第一行。
data = your_table_element.strings
data.shift # ignore first header
header = data.shift
data.map { |d| Hash[header.zip(d)] }
#=> [{"FL"=>"F", "IN"=>"?", "Circ-7"=>"HM563", "City"=>"CHICO", "State"=>"TX", "ETA"=>"", "ETC"=>"05 20:59
如何使用 watir 根据 table 中的另一个元素获取元素的文本列表 page-object 我已经使用 xpath 获取它但是有没有更好的方法因为使用 xpath 不是问题,但我需要编写大量 xpath 来获取这些列表,因为元素可能会根据 tables.
发生变化对于下面的 table,我正在获取如下元素的文本列表:
xpath for fuel: //table[contains(@id,'scheduleData')]/descendant::span[@id='label' and text()='F']/following::span[2]
xpath for inspection: //table[contains(@id,'scheduleData')]/descendant::span[@id='label' and text()='I']/preceding::span[1]
因此,对于每个有数据的燃料和检查点,我需要找到加密位置,并且我需要单独维护燃料和检查位置列表。
这是一个小例子,因为我不能 post 整个 table 因为它很大而且数据很敏感。
table id: 'scheduleDataab12'
-----------------------------------------------------------
Fuel Point | Company | Location | Inspection Point | Time |
-----------------------------------------------------------
F | Google | XMAT | I | 20/12/2018 08:00
... | Apple | MBXZ | ... | 20/12/2018 08:00
K | Amazon | JKLD | O | 20/12/2018 08:00
... | Microsoft | VBAB | ... | 20/12/2018 08:00
我已经post编辑了下面 link
要点 github 页面中的 html 内容在下面html这是tableclass:ricGrid ricGridLoaded在这个table有两个headers 在 thead 我需要删除第一个 tr 然后将整个 table 转换成散列。
HTML Link:https://gist.github.com/anilreddy/ce55341b2337889f17e498393cff2d81
简单Table
对于简单的table,我认为最可读的方法是使用Watir的Table#hashes
方法来提取文本。
您将为 table:
定义一个访问器class MyPage
include PageObject
table(:schedule_data, id: /scheduleData/)
end
然后使用#hashes
得到代表每一行的哈希数组:
data = page.table_element.hashes
#=> [{"Fuel Point"=>"F", "Company"=>"Google", "Location"=>"XMAT", "Inspection Point"=>"I", "Time"=>"20/12/2018 08:00"}, {"Fuel Point"=>"...", "Company"=>"Apple", "Location"=>"MBXZ", "Inspection Point"=>"...", "Time"=>"20/12/2018 08:00"}]
data.find { |r| r['Fuel Point'] == 'F' }.fetch('Company')
#=> "Google"
Table 有额外的 Header
对于带有额外 header 行的 table,您需要编写自己的方法。该代码类似于 Table#hashes
,但有一个额外的步骤来忽略第一行。
data = your_table_element.strings
data.shift # ignore first header
header = data.shift
data.map { |d| Hash[header.zip(d)] }
#=> [{"FL"=>"F", "IN"=>"?", "Circ-7"=>"HM563", "City"=>"CHICO", "State"=>"TX", "ETA"=>"", "ETC"=>"05 20:59