使用 Spock 数据表测试 Geb 页面对象

Using Spock Data Tables to Test Geb Page Objects

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

作为我正在处理的测试套件的一部分,我们必须在多个页面元素上测试 运行 相同的测试。我希望能够使用 Spock 数据-table 抽象出这种行为。然而,当我这样做时,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 对象中定义的。

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

数据表在为其指定的测试上下文之外执行。它们必须以这种方式执行,才能知道如何根据它们实际构建测试的多个迭代。在这种情况下 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