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

Groovy 使用Spock数据表测试Geb页面对象,groovy,spock,geb,Groovy,Spock,Geb,全面披露:我对Geb和Spock都很陌生 作为我正在开发的测试套件的一部分,我们必须在几个页面元素上测试运行相同的测试。我希望能够使用Spock数据表来抽象这种行为。但是,当我这样做时,Geb抱怨它无法识别page属性 下面是我所说的一个简单的例子: when: textBox = value submit() then:"value is updated" at SuccessPage textBox == value where: textBox | value box1 | va

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

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

下面是我所说的一个简单的例子:

when:
textBox = value
submit()

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

where:
textBox | value
box1    | val1
box2    | val2
box3    | val3
在本例中,框1-3在页面的内容对象中定义


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

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

要解决此问题,您需要使用内容名称(即
字符串的实例),并在正确的上下文中将其解析为页面的属性:

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

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

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

添加@Stepwise的可能副本没有解决任何问题?此外,这个问题的基础也非常不同。在这种情况下,这是一个混合setup()和setupSpec()方法的问题。在我的例子中,这是一个数据表,无法像人们所期望的那样替换值。请阅读接受的答案,
@steppwise
不是解决方案,它只是隐藏了问题。好的,我站出来更正,答案确实隐藏在那里。话虽如此,这个问题的解决方法已经足够不同了,我认为称之为重复是不公平的。另一种方法是“while是逐步执行此操作的”,我的问题是“为什么数据表要执行此操作”。我无法从这个问题推断出我的答案,我猜大多数人也不会。我看到这个问题被否决了很多。怎么了?很明显,@erdi给了我一个成功的答案,我可以在工作中使用这个答案。有人能给我反馈一下如何让这个问题变得更好吗?