我正在使用Geb和Spock来测试前端应用程序。我是这两个工具的新手。我有一个扩展GebReportingSpec的Spock规范。
然后我有一个setupSpec,它登录到应用程序并导航到特定页面。接下来是在网页上执行操作的各种功能方法(例如,单击下拉菜单然后选择一个选项)。
所有要素方法在自行运行时成功传递。第一个特征方法只是从下拉列表中选择一个值,并断言正确的字段显示为结果(所选选项控制页面上显示的字段)。第二个特征方法无法从下拉列表中选择不同的选项,因此该方法的断言失败,因为它无法找到字段。更新新字段时不会触发该选项。我的规格如下:
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()
将属性更改为已选择="已选择"以下几行:
$("select.projSubject option[value='Provider']").jquery.attr("selected", true)
projCoverProvFields.projSubjectProvOption.jquery.attr('selected', 'selected')
但我所做的一切都无法解决第二个功能方法无法成功触发下拉选项以更新页面上的字段的问题。
答案 0 :(得分:1)
您的错误可能是因为您正在运行setupSpec(),每个规范运行一次(而不是每个方法运行一次)。为了维护规范中所有方法的会话并按顺序运行它们,你需要在类的顶部添加@Stepwise spock属性。
#load_more
另一个选择是使用setup()而不是setupSpec(),这里有区别:
@Stepwise
class VerifyFields extends GebReportingSpec {
...
}
通过使用setupSpec(),它将在第一个特征方法之前运行,这就是为什么两个测试都可以单独工作的原因。尝试使用setup()替换setupSpec()。
请记住,运行setup()会增加总测试执行时间,因为您将重复每个方法。如果可能的话,我会使用@Stepwise。