【问题标题】:Using Spock Data Tables to Test Geb Page Objects使用 Spock 数据表测试 Geb 页面对象
【发布时间】:2018-04-08 05:25:10
【问题描述】:

全面披露:我对 Geb 和 Spock 都很陌生。

作为我正在开发的测试套件的一部分,我们必须在多个页面元素上运行相同的测试。我希望能够使用 Spock 数据表来抽象这种行为。但是,当我这样做时,Geb 抱怨它无法识别页面属性。

这是我正在谈论的一个简单示例:

when:
textBox = value
submit()

then:"value is updated"
at SuccessPage
textBox == value

where:
textBox | value
box1    | val1
box2    | val2
box3    | val3

在本例中,框 1-3 定义在 Pagecontent 对象中。

这些测试在我独立进行时有效,但在我使用数据表时无效。为什么没有正确替换 Geb 元素?

【问题讨论】:

  • 添加@Stepwise 没有解决任何问题?此外,该问题的基础也非常不同。在这种情况下,需要混合 setup() 和 setupSpec() 方法。就我而言,这是一张数据表,未能如预期的那样替换值。
  • 请阅读接受的答案,@Stepwise 不是它只是隐藏问题的解决方案。
  • 好吧,我纠正了,答案确实埋在那里。话虽如此,解决这个问题的方法已经足够不同,以至于我认为将其称为重复是不公平的。另一种方法是“逐步执行此操作”,我的问题是“为什么数据表会执行此操作”。我无法从这个问题中推断出我的答案,而且我猜大多数人也不会。
  • 我看到这个问题被否决了很多。它有什么问题? @erdi 很清楚地给了我一个成功的答案,我可以在我的工作中使用它。有人可以就如何使这个问题更好地给我反馈吗?

标签: groovy spock geb


【解决方案1】:

数据表在指定的测试上下文之外执行。必须以这种方式执行它们才能知道如何基于它们实际构建测试的多次迭代。在这种情况下,box1 不指向页面属性,因为您的浏览器尚未指向 SuccessPage

要绕过它,您需要使用内容名称(将是 String 的实例)并在您处于正确上下文时将它们解析为页面的属性:

when:
page."$textBox" = value
submit()

then:"value is updated"
at SuccessPage
page."$textBox" == value

where:
textBox | value
'box1'  | val1
'box2'  | val2
'box3'  | val3

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 2018-12-19
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多