我有以下设置:
只使用GroovyConsole我尝试执行Geb手册中给出的第一个示例:
import geb.Browser
Browser.drive {
go "http://google.com/ncr"
// make sure we actually got to the page
assert title == "Google"
// enter wikipedia into the search field
$("input", name: "q").value("wikipedia")
// wait for the change to results page to happen
// (google updates the page dynamically without a new request)
waitFor { title.endsWith("Google Search") }
// is the first link to wikipedia?
def firstLink = $("li.g", 0).find("a.l")
assert firstLink.text() == "Wikipedia"
// click the link
firstLink.click()
// wait for Google's javascript to redirect to Wikipedia
waitFor { title == "Wikipedia" }
}
但是我收到以下错误:
警告:清理堆栈跟踪:
geb.waiting.WaitTimeoutException:条件未在5.0中传递 秒
这个例子有什么问题吗?我做错了吗?看到非常第一个例子甚至不会运行,这是非常令人沮丧的!
答案 0 :(得分:3)
脚本正在wikipedia
进入搜索框,但它没有按Google Search
按钮开始搜索。
如果你添加:
// hit the "Google Search" button
$("input", name: "btnG").click()
之后
// enter wikipedia into the search field
$("input", name: "q").value("wikipedia")
你会得到更远的距离。
答案 1 :(得分:2)
该示例利用Google中的自动加载功能,在搜索时键入搜索结果,因此您无需单击搜索按钮。运行测试时,您应该看到显示的是搜索结果,而维基百科链接是第一个。
您获得的WaitTimeoutException很可能是因为浏览器在到达Wikipedia页面后关闭得太快。要解决这个问题,只需更新waitFor调用,使其在关闭浏览器之前等待更长时间,即
waitFor(10) (at WikipediaPage)
或者,如果在调试模式下运行gradle,则进程会慢得多,因此允许测试在浏览器终止之前检查标题
gradlew firefoxTest --debug --stacktrace
答案 2 :(得分:2)
我遇到了同样的问题。
第一个WaitFor问题:
J. Levine的回答可以解决第一次等待。添加:
$(“input”,name:“btnG”)。click()
后:
$(“input”,name:“q”)。value(“wikipedia”)。
第二个WaitFor问题:
维基百科从谷歌打开的页面标题与维基百科主页不同。在主页上,主页上显示<title>Wikipedia<title>
(谷歌打开即为<title>Wikipedia, the free encyclopedia<title>.
所以改变:
waitFor {title ==“Wikipedia”}}
致:
waitFor {title ==“维基百科,免费百科全书”} }
这应该可以解决第二个等待问题
答案 3 :(得分:1)
以上都不适合我。经过一些调试后,我得到了这样的代码:
Browser.drive {
go "http://google.com"
// make sure we actually got to the page
assert title == "Google"
// enter wikipedia into the search field
$("input", name: "q").value("wikipedia")
// wait for the change to results page to happen
// (google updates the page dynamically without a new request)
waitFor { title.endsWith("Google Search") }
// is the first link to wikipedia?
def firstLink = $("li.g", 0).find("a")
assert firstLink.text() == "Wikipedia, the free encyclopedia"
// click the link
firstLink.click()
// wait for Google's javascript to redirect to Wikipedia
waitFor { title == "Wikipedia, the free encyclopedia" }
}