在GEB + Spock + Groovy中出错

时间:2013-06-24 13:44:07

标签: groovy spock geb

我是GEB + Spock的新手,并尝试在我们的项目中使用它。我安装了以下内容:

GEB- geb-core-0.7.0.jar
SPOCK- Spock core-0.7 - groovy 2.0
GROOVY- Groovy1.8.9

下面是我的代码,其中包含方法。

package projectGEB

import javax.lang.model.element.VariableElement; 
import org.codehaus.groovy.ast.Variable;
import geb.*
import groovy.model.ValueHolder;
import spock.lang.*
import geb.spock.*

class GoogleSearchModule extends Module {
class Google extends Page {
    static url = "http://www.google.co.in/"
    static at = { title == "Google" }
     static content = {
        searchField { $("input[name=q]") }
        searchButton{ $("input[value=Google Search]") }
    }

    }

}

以下是调用方法* /

package projectGEB

import spock.lang.Specification
import geb.*
import grails.plugin.geb.*
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.ie.InternetExplorerDriver


class DemoClass extends Specification {

def "HelloProgram"(){
    expect:
    Browser.drive(new Browser(driver: new FirefoxDriver())) {

        to Google
        println "Hello"
    }.quit()
}
}

我收到了下划线的$ sign。这是一个错误吗?我如何解决它?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你是否在一个模块中嵌套页面?通常页面可以包含模块,但我不认为相反的设计是可能的。

在这种情况下,您应该删除包装页面的模块,并按原样使用该页面。

当您拥有在许多页面中重复使用的内容时,模块很方便,以下是一个如何使用模块的简单示例:

class MessagesModule extends Module {

  static content = {
    errorMessage { i -> $(".errors").find("li")[i] }
    flashMessage { $(".message") }
  }

}

然后可以在页面对象中轻松使用此模块,如下所示:

class GroupsPage extends Page {

  static url = "group"

  static at = {
    $("h1").text() == "Groups"
    $("h2").text() == "Select a group"
  }

  static content = {
    groupEmail { $("input[name=email]") }
    createGroup { $("#createGroup") }
    searchGroup { $("#searchGroup") }
    messages { module MessagesModule }
  }

}

然后,您可以使用spock和geb编写一个简单的测试:

 def "search non-existing group"() {

   given: "I am on the groups page"
    to GroupsPage

   when: "I look for a non existing group"
    page.groupEmail = "non-existing@group.com"
    page.searchGroup.click()

   then: "I remain on that page, there is an info message"
    at GroupsPage
    page.messages.flashMessage.text() == "No group found"
}