关于Geb手册没有执行的第一个例子

时间:2011-10-26 18:21:48

标签: groovy selenium webdriver geb

我有以下设置:

  • 安装了JDK& JRE 6u29
  • 安装selenium standalone 2.8
  • Groovy 1.8.3
  • Geb 0.6.1

只使用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中传递   秒

这个例子有什么问题吗?我做错了吗?看到非常第一个例子甚至不会运行,这是非常令人沮丧的!

4 个答案:

答案 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" }
}