使用spock和maven运行Geb测试时出错

时间:2015-05-08 13:12:11

标签: geb

使用maven运行groovy脚本时出现以下错误:

  

注册测试快乐路径(SignUpPageSpec):所需的页面内容   ' usernamefield - SimplePageContent(所有者:JiraSignupPage,args:[],   value:null')不存在。

任何人都可以帮我解决此错误。以下是脚本:

JiraSignUpPage.groovy

package test.groovy.script
  import geb.Page;
    //import main.groovy.script.*;

   class JiraSignupPage extends Page
   {
    static url = "/vcty-jira"
    static at = { title == "System Dashboard - Velocity Jira" }
    static content = {
        usernamefield { $("input#login-form-username") }
        passwordfield { $('input#login-form-password') }
        submitButton(to: JiraSignUpResultPage) { $('button#login-form-submit') }

    }
}

JiraSignUpResultPage.groovy

package test.groovy.script
import geb.Page;

public class JiraSignUpResultPage extends Page
{
    static url = "/jira/secure/Dashboard.jspa"
    static at = { title == "Amit  - Jira Tracker" }

}

SignUpPageSpec.groovy

import spock.lang.Stepwise;
import geb.spock.GebReportingSpec;
import geb.Page;
//import main.groovy.script.*;
import test.groovy.script.*;

@Stepwise
public class SignUpPageSpec extends GebReportingSpec {

    def "Signup Test Happy Path"() {

               given: "I'm at the sign up form"
               to JiraSignupPage

               when: "I signup as a valid user"
               usernamefield = "xyz"
               passwordfield = "xyz"
               submitButton.click()

               then: "I'm at the result page"
               at JiraSignUpResultPage

           }
}

GebConfig.groovy

import org.openqa.selenium.firefox.FirefoxDriver

import geb.waiting.*;

driver = { new FirefoxDriver() }

baseUrl = "http://172.17.48.65:8080/"

reportsDir = new File("target/geb-reports")

reportOnTestFailureOnly = true

waiting {
    timeout = 20
    retryInterval = 0.5
}

我正在运行mvn.test来运行这些测试。它会导致浏览器打开但最终会出错。

2 个答案:

答案 0 :(得分:0)

该错误告诉您,您的usernamefield内容定义返回了一个空导航器 - 在您导航到的页面上找不到ID为login-form-username的输入。

答案 1 :(得分:0)

可能您的页面未完全加载。 尝试将usernamefield.displayed添加到'at'块 或者将“等待”添加到页面元素

 usernamefield(wait: true) { $("input#login-form-username") }