完全披露:我对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在 Page 的 content 对象中定义。
这些测试在我独立完成时起作用,但在我使用数据表时则不行。为什么Geb元素没有被正确替换?
答案 0 :(得分:5)
数据表在指定它们的测试的上下文之外执行。它们必须以这种方式执行,以了解如何基于它们实际构建测试的多个迭代。在该上下文中,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