我正在Sauce Connect中運行Geb/Spock測試,並且我寧願每測試都有獨特的RemoteWebDriver實例。這樣,Sauce報告將被測試分開,這使診斷故障變得容易。我不擔心(現在)額外的性能開銷,因爲它通過一個RemoteWebDriver實例運行我們所有的Geb測試根本沒有幫助 - 需要很長時間才能將結果與Sauce屏幕截圖/截屏進行協調,並且當發生超時時(這在Sauce Connect的長時間運行作業中很有可能)通常會有一些測試失敗溢出。在每次Geb Spock測試後退出驅動程序
def cleanup() {
if (System.getProperty('geb.env')?.contains('sauce')) {
setSauceJobStatus()
driver.quit()
}
}
和當然,我創建的設置()方法的新RemoteWebDriver:
我在擴展GebReportingSpec類試過這一點。
使用這種方法,我可以在每次測試中獲得一個獨特的醬汁連接會話,並且所有的結果都在醬料中精美地組織。然而,所有的測試失敗歸因於:
「org.openqa.selenium.remote.SessionNotFoundException:會話ID爲空。調用quit()?後使用WebDriver?
事實證明,在GebReportingSpec清理()方法調用了此方法:
void report(String label = "") {
browser.report(ReporterSupport.toTestReportLabel(_gebReportingSpecTestCounter, _gebReportingPerTestCounter++, _gebReportingSpecTestName.methodName, label))
}
會拋出該堆棧跟蹤:
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:125)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:622)
at org.openqa.selenium.remote.RemoteWebDriver.getPageSource(RemoteWebDriver.java:459)
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:788)
at geb.spock.GebReportingSpec.report(GebReportingSpec.groovy:44)
at geb.spock.GebReportingSpec.cleanup(GebReportingSpec.groovy:39)
它假設webdriver的情況下仍然存在當調用GebReportingSpec cleanup()方法時,可以準備報告信息。
所以,我的方法顯然不是「Geb方式」....我想知道是否有人可以告訴我如何正確地創建一個獨特的驅動程序每個Spock測試?
erdi,謝謝。我幾天前一直在用我自己的解決方案進行滾動(只需在GebReportingSpec中提取代碼並創建我自己修改的「GebReporting」類),但這種方法更直接。 – 2015-04-01 20:34:40
對我來說,這個解決方案只有在我退出驅動程序後調用'CachingDriverFactory.clearCache()'時纔有效,否則隨後的展開特性方法將拋出與上面相同的異常。 – kriegaex 2015-12-22 07:25:45