根据邻域中的小区内容获取表格单元格内容

时间:2015-01-19 12:28:43

标签: ruby cucumber page-object-gem

我有一个具有以下结构的表:

<table class="table_class">
    <tr>
        <td>Label A</td>
        <td>Value A</td>
        <td>Label B</td>
        <td><div>Value B<a href="/some/href">Change</a></div></td>
    </tr>
    <tr>
        <td>Label C</td>
        <td><div><a href="/another/href">Value C</a></div></td>
        <td>Label D</td>
        <td><div><span><a href="/more/href"><span><img src="image/source.jpg"<img src="another/image.gif"></span></a><a href="even/more/href">Value D</a></span>&nbsp;<a href="/href">Change</a></div></td>
    </tr>
</table>

我想获取值(&#34;值A&#34;,&#34;值B&#34;,...),但是包含这些值的表格单元格的唯一唯一标识符,是留给他们的表格单元格(&#34;标签A&#34;,&#34;标签B&#34;,......)。

知道如何在PageObject中正确处理这个问题吗?

提前致谢, 基督教

1 个答案:

答案 0 :(得分:2)

您可以使用带有following-sibling轴的XPath来查找相邻单元格的值。

例如,以下页面对象有一个方法可以根据文本找到标签单元格。从那里,导航到下一个td元素,该元素应该是关联的值。

class MyPage
  include PageObject

  def value_of(label)
    # Find the table
    table = table_element(class: 'table_class')

    # Find the cell containing the desired label
    label_cell = cell_element(text: label)

    # Get the next cell, which will be the value
    value_cell = label_cell.cell_element(xpath: './following-sibling::td[1]')
    value_cell.text
  end
end

page = MyPage.new(browser)
p page.value_of('Label A')
#=> "Value A"
p page.value_of('Label B')
#=> "Value BChange"

根据您的目标,您还可以重构此操作以使用访问者方法。这将允许您拥有返回值单元格,文本,检查其存在等的方法:

class MyPage
  include PageObject

  cell(:value_a) { value_of('Label A') }
  cell(:value_b) { value_of('Label B') }

  def value_of(label)
    table = table_element(class: 'table_class')
    label_cell = cell_element(text: label)
    value_cell = label_cell.cell_element(xpath: './following-sibling::td[1]')
    value_cell
  end
end

page = MyPage.new(browser)
p page.value_a
#=> "Value A"
p page.value_a?
#=> true