【问题标题】:Accessing a table within a table (Watir/PageObject)访问表中的表 (Watir/PageObject)
【发布时间】:2013-06-14 20:24:37
【问题描述】:

我正在运行带有 Cheezy 的 PageObject 的 Watir-webdriver 用于 Cucumber 测试。我是 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 代码设置一个类(每个页面上的多个这些表)。如果您能想到其他点击图片的方式,我会很高兴听到它

提前谢谢你

【问题讨论】:

  • 如果您共享页面的 html(或至少是表格),这将有助于确保答案解决了正确的问题。

标签: ruby gwt watir-webdriver pageobjects page-object-gem


【解决方案1】:

从表中访问表:

您可以通过链接元素来获取表格中的表格。假设您希望表中的第一个表具有 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"

【讨论】:

  • 抱歉这么久没有回复;这是一个工作问题,所以我这个周末没有参加。如果可行,我会将您设置为答案,但截至目前,我认为没有理由不这样做。我没有意识到你可以用 pageobject => table(:actual_table){ table_element(:id => 'known_id').table_element } 做到这一点,这真的很漂亮。顺便说一句,非常感谢。
  • 我正在尝试做一些非常相似的事情,并且在语法上遇到了困难。 select_list(:payer){ element(:id =&gt; "#{VIEW_ID}-Insurance").select_list_element(:id =&gt; "#{VIEW_ID}-PayerList") } 我正在尝试从字段集中获取一个 select_list。我收到错误消息:(eval):1: syntax error, unexpected '(', expecting $end {:id=&gt;"dartPayer-Insurance"}(identifier) ^ (SyntaxError)
  • 我无法用那行代码重现该异常。也许开始一个新问题,您可以在其中添加相关的 html 和重现问题的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
相关资源
最近更新 更多