2017-09-21 36 views
0

我正在使用Geb和Spock一起测试前端应用程序。我对这两种工具都很陌生。我有一个扩展GebReportingSpec的Spock规范。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') 

但没有什么我可以解决其中第二特征的方法未能成功触发下拉选择更新页面上的字段的问题。

回答

1

您的错误可能是因为您正在运行setupSpec(),每个规范运行一次(而不是每个方法一次)。为了维护规范中所有方法的会话并运行它们,您需要将@Stepwise spock属性添加到类的顶部。

@Stepwise 
class VerifyFields extends GebReportingSpec { 
    ... 
} 

另一种选择,是使用设置(),而不是setupSpec(),这里的区别:

def setup() {}   // run before every feature method 
def setupSpec() {}  // run before the first feature method 

通过使用setupSpec(),它会在第一特征方法之前运行,这就是为什么两个测试都可以单独工作。尝试用setup()替换setupSpec()。请记住,运行setup()会增加您的总测试执行时间,因为您将针对每种方法重复执行。如果可能的话,我会使用@Stepwise。

+0

将@Stepwise spock属性添加到我的类的顶部解决了问题!非常感谢,我花了数小时试图解决这个问题! –

+0

没问题 - 很高兴帮助:) – Rushby

相关问题