当整体 运行 class 时,Spock 非初始特征方法失败
Spock non-initial feature methods fail when running class as a whole
我正在同时使用 Geb 和 Spock 来测试前端应用程序。我对这两种工具都不熟悉。我有一个扩展 GebReportingSpec 的 Spock 规范。
然后我有一个 setupSpec 登录到应用程序并导航到特定页面。接下来是在网页上执行操作的各种特征方法(例如单击下拉菜单然后 selecting 一个选项)。
所有的特征方法在它们自己运行时都成功通过。第一个功能方法只是 selects 下拉列表中的一个值,并断言显示正确的字段作为结果(selected 选项控制在页面上显示哪些字段)。第二个特征方法无法 select 来自下拉列表的不同选项,因此该方法的断言失败,因为它找不到字段。更新新字段的事件不会触发该选项 selected。我的规格如下:
class VerifyFields extends GebReportingSpec {
def setupSpec() {
// Log in
via Dashboard
loginForm.login("marco", "abc123")
// Navigate to Page 1
button1.click()
button2.click()
// Click Button 3
button3.click()
}
// This feature method passes successfully
def "Verify Member fields exist"() {
when: "User selects Member option for drop down 1"
at Page1
projSubject.click()
projCoverMbrFields.projSubjectMbrOption.click()
sleep(1500)
then: "All expected member fields are displayed in the left panel"
assert mbrName.present
}
// This feature method fails when run after the first feature method
def "Verify Provider fields exist"() {
when: "User selects Provider option for subject type"
at Page1
projSubject.click()
projCoverProvFields.projSubjectProvOption.click()
sleep(1500)
then: "All expected provider fields are displayed in the left panel"
assert provName.present
}
我已经尝试添加一些东西来让页面专注于如下几行的元素:
driver.findElement(By.className("projSubject")).click()
driver.findElement(By.cssSelector(".projSubjectoption[value='Provider']")).click()
并使用以下行将属性更改为 selected="selected":
$("select.projSubject option[value='Provider']").jquery.attr("selected", true)
projCoverProvFields.projSubjectProvOption.jquery.attr('selected', 'selected')
但我无法解决第二个特征方法未能成功触发下拉selection 更新页面字段的问题。
您的错误可能是因为您 运行ning setupSpec() 是 运行 每个规范一次(而不是每个方法一次)。为了维护规范中所有方法的会话和 运行 它们,您需要在 class.
的顶部添加 @Stepwise spock 属性
@Stepwise
class VerifyFields extends GebReportingSpec {
...
}
另一种选择是使用 setup() 而不是 setupSpec(),区别如下:
def setup() {} // run before every feature method
def setupSpec() {} // run before the first feature method
通过使用 setupSpec(),它将 运行 在第一个特征方法之前,这就是两个测试可以单独工作的原因。尝试用 setup() 替换 setupSpec()。
请记住,运行ning setup() 会增加您的总测试执行时间,因为您将为每个方法重复。如果可能的话,我会使用@Stepwise。
我正在同时使用 Geb 和 Spock 来测试前端应用程序。我对这两种工具都不熟悉。我有一个扩展 GebReportingSpec 的 Spock 规范。
然后我有一个 setupSpec 登录到应用程序并导航到特定页面。接下来是在网页上执行操作的各种特征方法(例如单击下拉菜单然后 selecting 一个选项)。
所有的特征方法在它们自己运行时都成功通过。第一个功能方法只是 selects 下拉列表中的一个值,并断言显示正确的字段作为结果(selected 选项控制在页面上显示哪些字段)。第二个特征方法无法 select 来自下拉列表的不同选项,因此该方法的断言失败,因为它找不到字段。更新新字段的事件不会触发该选项 selected。我的规格如下:
class VerifyFields extends GebReportingSpec {
def setupSpec() {
// Log in
via Dashboard
loginForm.login("marco", "abc123")
// Navigate to Page 1
button1.click()
button2.click()
// Click Button 3
button3.click()
}
// This feature method passes successfully
def "Verify Member fields exist"() {
when: "User selects Member option for drop down 1"
at Page1
projSubject.click()
projCoverMbrFields.projSubjectMbrOption.click()
sleep(1500)
then: "All expected member fields are displayed in the left panel"
assert mbrName.present
}
// This feature method fails when run after the first feature method
def "Verify Provider fields exist"() {
when: "User selects Provider option for subject type"
at Page1
projSubject.click()
projCoverProvFields.projSubjectProvOption.click()
sleep(1500)
then: "All expected provider fields are displayed in the left panel"
assert provName.present
}
我已经尝试添加一些东西来让页面专注于如下几行的元素:
driver.findElement(By.className("projSubject")).click()
driver.findElement(By.cssSelector(".projSubjectoption[value='Provider']")).click()
并使用以下行将属性更改为 selected="selected":
$("select.projSubject option[value='Provider']").jquery.attr("selected", true)
projCoverProvFields.projSubjectProvOption.jquery.attr('selected', 'selected')
但我无法解决第二个特征方法未能成功触发下拉selection 更新页面字段的问题。
您的错误可能是因为您 运行ning setupSpec() 是 运行 每个规范一次(而不是每个方法一次)。为了维护规范中所有方法的会话和 运行 它们,您需要在 class.
的顶部添加 @Stepwise spock 属性@Stepwise
class VerifyFields extends GebReportingSpec {
...
}
另一种选择是使用 setup() 而不是 setupSpec(),区别如下:
def setup() {} // run before every feature method
def setupSpec() {} // run before the first feature method
通过使用 setupSpec(),它将 运行 在第一个特征方法之前,这就是两个测试可以单独工作的原因。尝试用 setup() 替换 setupSpec()。
请记住,运行ning setup() 会增加您的总测试执行时间,因为您将为每个方法重复。如果可能的话,我会使用@Stepwise。