我在GroovyConsole.exe
內運行以下腳本(GebReportingSpec
測試用例)。它在GroovyConsole啓動時第一次正常運行。它打開FF,運行場景,然後在退出瀏覽器時關閉FF。隨後從GroovyConsole調用Geb Spock測試失敗,出現UnreachableBrowserException
但是,當我從同一個GroovyConsole再次運行相同的腳本時,我得到一個UnreachableBrowserException
。它首先調用setupSpec()
方法,然後在調用測試用例內go
方法,它調用cleanupSpec()
...
GEB: 0.9.0
硒: 2.26.0
Groovy的: 2.0.5
FF: 14.0.1
JDK: 1.6.0_37 64位
腳本:
@Grapes([
@Grab("org.gebish:geb-core:0.9.0"),
@Grab("org.gebish:geb-spock:0.9.0"),
@Grab("org.seleniumhq.selenium:selenium-firefox-driver:2.26.0"),
//@Grab("org.seleniumhq.selenium:selenium-chrome-driver:2.26.0"),
@Grab("org.seleniumhq.selenium:selenium-support:2.26.0")
])
import geb.Browser
import geb.spock.GebReportingSpec
import org.openqa.selenium.firefox.*
class Google_Search_Test extends GebReportingSpec {
def setupSpec() {
println "Inside setupSpec()..."
browser.config.autoClearCookies = true
}
def cleanupSpec() {
println "Inside cleanupSpec()..."
println "Quitting browser..."
browser.quit()
}
def "google_search_wikipedia"() {
println "Inside google_search_wikipedia..."
when:
println "Going to google.com..."
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")
then:
firstLink.text() == "Wikipedia"
println "Finished test execution..."
}
}
GebConfig.groovy:
import org.openqa.selenium.firefox.*
import java.util.concurrent.*
driver = {
FirefoxProfile firefoxProfile = new FirefoxProfile()
firefoxProfile.setPreference("capability.policy.default.Window.frameElement", "allAccess")
def driver = new FirefoxDriver(firefoxProfile)
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS)
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS)
driver
}
waiting {
// all values are in seconds
timeout = 60
retryInterval = 0.5
}
reportsDir = "SeleniumReports"
成功運行:
Inside setupSpec()...
Inside google_search_wikipedia...
Going to google.com...
Finished test execution...
Inside cleanupSpec()...
Quitting browser...
JUnit 4 Runner, Tests: 1, Failures: 0, Time: 15739
後續運行(例外):
Inside setupSpec()...
Inside google_search_wikipedia...
Going to google.com...
Inside cleanupSpec()...
Quitting browser...
JUnit 4 Runner, Tests: 1, Failures: 2, Time: 687
Test Failure: google_search_wikipedia(Google_Search_Test)
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '2.26.0', revision: '18040', time: '2012-11-02 09:44:45'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_37'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:526)
at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:275)
at geb.Browser.go(Browser.groovy:371)
at geb.Browser.go(Browser.groovy:363)
at geb.spock.GebSpec.methodMissing(GebSpec.groovy:51)
at Google_Search_Test.google_search_wikipedia(Google_Search.groovy:27)
Caused by: org.openqa.selenium.WebDriverException: The FirefoxDriver cannot be used after quit() was called.
Build info: version: '2.26.0', revision: '18040', time: '2012-11-02 09:44:45'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_37'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:351)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:505)
... 5 more
Test Failure: google_search_wikipedia(Google_Search_Test)
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '2.26.0', revision: '18040', time: '2012-11-02 09:44:45'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_37'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:526)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:535)
at org.openqa.selenium.remote.RemoteWebDriver.getPageSource(RemoteWebDriver.java:396)
at geb.report.PageSourceReporter.getPageSource(PageSourceReporter.groovy:42)
at geb.report.PageSourceReporter.writePageSource(PageSourceReporter.groovy:38)
at geb.report.PageSourceReporter.writeReport(PageSourceReporter.groovy:29)
at geb.report.CompositeReporter.writeReport(CompositeReporter.groovy:31)
at geb.Browser.report(Browser.groovy:698)
at geb.spock.GebReportingSpec.report(GebReportingSpec.groovy:43)
at geb.spock.GebReportingSpec.cleanup(GebReportingSpec.groovy:39)
Caused by: org.openqa.selenium.WebDriverException: The FirefoxDriver cannot be used after quit() was called.
Build info: version: '2.26.0', revision: '18040', time: '2012-11-02 09:44:45'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_37'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:351)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:505)
... 9 more
你爲什麼需要'司機''driver.manage()。timeouts()。之後'pageLoadTimeout(60,TimeUnit。SECONDS)'在GebConfig.groovy上? – plsgogame
@amisuno,如果我設置超時後沒有返回驅動程序對象,Geb無法創建驅動程序,並且得到異常'DriverCreationException:callback script ... returned'org.openqa.selenium.firefox.FirefoxDriver $ 1 $ 1 @ 18a3fe6'這不是WebDriver實現 ' – kodeninja