Javascript Spock非初始特性方法在将类作为一个整体运行时失败
我正在使用Geb和Spock一起测试前端应用程序。这两种工具我都不熟悉。我有一个Spock规范,它扩展了GebReportingSpec 然后我有一个setupSpec,它登录到应用程序并导航到特定页面。接下来是在网页上执行操作的各种功能方法(例如单击下拉菜单,然后选择选项) 所有特征方法在自己运行时都会成功通过。第一个feature方法只是从下拉列表中选择一个值,并断言结果显示正确的字段(所选选项控制页面上显示的字段)。第二个feature方法无法从下拉列表中选择其他选项,因此该方法的断言将失败,因为它找不到字段。在更新新字段的事件未触发时选择该选项。我的规格如下:Javascript Spock非初始特性方法在将类作为一个整体运行时失败,javascript,jquery,spock,geb,Javascript,Jquery,Spock,Geb,我正在使用Geb和Spock一起测试前端应用程序。这两种工具我都不熟悉。我有一个Spock规范,它扩展了GebReportingSpec 然后我有一个setupSpec,它登录到应用程序并导航到特定页面。接下来是在网页上执行操作的各种功能方法(例如单击下拉菜单,然后选择选项) 所有特征方法在自己运行时都会成功通过。第一个feature方法只是从下拉列表中选择一个值,并断言结果显示正确的字段(所选选项控制页面上显示的字段)。第二个feature方法无法从下拉列表中选择其他选项,因此该方法的断言将失
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')
并使用以下行将属性更改为have select=“selected”:
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')
但是,我所做的任何事情都无法解决第二个feature方法无法成功触发下拉选择以更新页面上的字段的问题。您的错误可能是因为您正在运行setupSpec(),它将按规范运行一次(而不是按方法运行一次)。为了维护规范中所有方法的会话并运行它们,您需要在类的顶部添加@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(),它将在第一个feature方法之前运行,这就是为什么两个测试可以单独工作的原因。尝试将setupSpec()替换为setup()
请记住,运行setup()将增加总测试执行时间,因为您将对每个方法进行重复。如果可能的话,我会使用@Stepwise。将@Stepwise spock属性添加到我的类的顶部解决了这个问题!非常感谢你,我花了几个小时试图解决这个问题!没问题-很高兴这有帮助:)