我是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。这是一个错误吗?我如何解决它?
提前致谢。
答案 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"
}