我是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()
}
}
我收到带下划线的$符号。这是错误吗?我该如何修复它?
提前谢谢。
可能是在模块中嵌套了一个页面吗?通常页面可以包含模块,但我认为在设计上不可能出现相反的情况。
在这种情况下,您应该删除包裹页面的模块,并按原样使用页面。
当你有在许多页面中重复使用的内容片段时,模块很方便,这里有一个如何使用模块的简单例子:
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"
}