2013-03-27 182 views
1

所以我寫了我的第一個Geb腳本,它擴展了GebReportingSpec。我已經指定了一個def cleanup,其中我做了一個driver.quit()。現在瀏覽器關閉了,但我得到一個錯誤,導致屏幕截圖實用程序無法運行,因爲我猜它在瀏覽器關閉後運行。我試圖把睡眠看到如果是這樣的問題,不過這沒有采取任何行動geb spock並關閉瀏覽器窗口


JUnit 4 Runner, Tests: 1, Failures: 1, Time: 25944Test Failure: Validate that the default time zone for store is set to America/New_York(groovy.manager.ReferenceStoreDefaultTimeZoneTests)org.openqa.selenium.remote.SessionNotFoundException: The FirefoxDriver cannot be used after quit() was called.Build info: version: '2.31.0', revision: '1bd294d185a80fa4206dfeab80ba773c04ac33c0', time: '2013-02-27 13:51:26'System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.3', java. 
version: '1.6.0_43' 
Driver info: driver.version: RemoteWebDriver 
     at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute 
(FirefoxDriver.java:352) 
     at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.ja 
va:527) 
     at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.ja 
va:569) 
     at org.openqa.selenium.remote.RemoteWebDriver.getPageSource(RemoteWebDri 
ver.java:414) 
     at geb.report.PageSourceReporter.getPageSource(PageSourceReporter.groovy 
:39) 
     at geb.report.PageSourceReporter.writePageSource(PageSourceReporter.groo 
vy:35) 
     at geb.report.PageSourceReporter.writeReport(PageSourceReporter.groovy:2 
7) 
     at geb.report.ScreenshotAndPageSourceReporter.writeReport(ScreenshotAndP 
ageSourceReporter.groovy:31) 
     at geb.Browser.report(Browser.groovy:731) 
     at geb.spock.GebReportingSpec.report(GebReportingSpec.groovy:43) 
     at geb.spock.GebReportingSpec.cleanup(GebReportingSpec.groovy:39) 

的思考?

編輯:

司機是越來越通過GebConfig創建的文件

@Grab(group='org.seleniumhq.selenium', module='selenium-firefox-driver', 
    version='2.31.0') 
@Grab(group='org.seleniumhq.selenium', module='selenium-chrome-driver', 
    version='2.31.0') 
@Grab(group='org.seleniumhq.selenium', module='selenium-htmlunit-driver', 
    version='2.31.0') 
@Grab("org.seleniumhq.selenium:selenium-support:2.28.0") 

import org.openqa.selenium.firefox.FirefoxDriver 
import org.openqa.selenium.chrome.ChromeDriver 
import org.openqa.selenium.htmlunit.HtmlUnitDriver 

reportsDir = "target/geb-reports" 

// default is to use firefox 
driver = { 
    def driver = new FirefoxDriver() 
    driver.manage().window().maximize() 
    return driver 
} 

environments { 
    'chrome' { 
     def chromePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" 
     System.setProperty("webdriver.chrome.driver", chromePath) 

     driver = { 
      def driver = new ChromeDriver() 
      return driver 
     } 
    } 

    'firefox' { 
     driver = { 
      def driver = new FirefoxDriver() 
      driver.manage().window().maximize() 
      return driver 
     } 
    } 

    'htmlunit' { 
     driver = { 
      def driver = new HtmlUnitDriver() 
      driver.javascriptEnabled = true 
      return driver 
     } 
    } 
} 

這裏是腳本正在執行

package groovy.manager 

@Grab('org.spockframework:spock-core:0.7-groovy-2.0') 
@Grab(group='org.gebish', module='geb-core', version='0.9.0-RC-1') 
@Grab(group='org.gebish', module='geb-spock', version='0.9.0-RC-1') 
@Grab(group='org.seleniumhq.selenium', module='selenium-firefox-driver', 
    version='2.31.0') 

import geb.spock.GebReportingSpec 
import org.openqa.selenium.firefox.FirefoxDriver 
import groovy.manager.pages.LoginPage 
import groovy.manager.pages.org.OrganizationHomePage 
import groovy.manager.pages.org.OrganizationProfilePage 

class ReferenceStoreDefaultTimeZoneSpec extends GebReportingSpec { 

    def "Validate that the default time zone is set to America/New_York"() { 
     given: "You have the admin username and password" 
      def username = "admin" 
      def password = "test" 

     when: "Navigate to Manager" 
      to LoginPage 

     and: "Log intoManager" 
      usernameInput().value username 
      passwordInput().value password 
      submitBtn().click() 

     then: 
      assert at (OrganizationHomePage) 

     and: 
      assert ({$("a[value='America/New York']")}) 

     when: "Navigate to the organization profile" 
      timeZoneLink().click() 

     then: 
      assert at (OrganizationProfilePage) 

     and: "Verify America New York is selected" 
      assert ($("span", text: contains("America/New York"))) 
    } 
} 
+0

你是如何運行的測試類? – erdi 2013-03-28 10:31:05

+0

從xterm2開始,運行groovy groovy/manager/ReferenceStoreDefaultTimeZoneSpec.groovy – jrock2004 2013-03-28 16:10:08

回答

0

你是如何配置的驅動程序?您只需要quit the driver if you are explicitly creating it。否則,司機會自行關機。

+0

我添加了我的GebConfig,這是驅動程序創建處理的地方。 – jrock2004 2013-03-27 14:20:25

+0

然後你應該讓Geb處理驅動程序的關閉,不需要你調用quit。 – Scott 2013-03-27 14:39:09

+0

當我通過命令行運行腳本時,測試會完成,它位於那裏,瀏覽器保持打開狀態。命令提示符位於此「JUnit 4 Runner,測試:1,失敗:0,時間:27463」 – jrock2004 2013-03-27 15:22:35

0

如果我在命令行上使用groovy命令運行一個非常簡單的geb測試規範,我可以重現您的問題。我不知道它是否與使用@Grab註釋或常規JUnit轉輪的工作方式有關,但某些地方不對,瀏覽器確實沒有關閉。

我參加了同一個班級,並使用Gradle構建來運行它,並且運行結束並且瀏覽器關閉。

如果你還沒有安裝Gradle,最簡單的方法是使用gvm

然後刪除以下爲build.gradle文件:

apply plugin: 'groovy'      

repositories {        
    mavenCentral()        
}            

dependencies {        
    groovy 'org.codehaus.groovy:groovy-all:2.1.2' 
    testCompile 'org.spockframework:spock-core:0.7-groovy-2.0' 
    testCompile 'org.gebish:geb-spock:0.9.0-RC-1' 
    testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:2.31.0' 
} 

最後複製兩個你GebConfig.groovy和你的規範類爲src/test/groovy和運行gradle test。您的測試將被執行,然後瀏覽器將被關閉。

+0

這可能會脫離主題,但我做了你所問的,我得到以下錯誤:「轉換過程中的一般錯誤:衝突模塊版本。模塊[groovy-所有加載在版本2.1.1中,你正試圖加載版本2.0.5「。我已經清理了整個項目,而且我並沒有試圖加載2.0.5。思考? – jrock2004 2013-03-29 14:27:30

+0

groovy-all:2.0.5是Spock的依賴關係(運行Gradle依賴查看依賴關係樹),但它應該沒問題,因爲Gradle應該採用最新版本的groovy-all - 這是默認的Gradle行爲。你在使用Gradle的舊版本嗎?它對我來說是1.5的最新版本。另外,請記住從測試類中刪除所有@Grab註釋,我忘了在一開始就這樣做,但從你的錯誤中得到了完全不同的錯誤。如果一切都失敗,請嘗試將build.gradle中的groovy依賴項更改爲2.0.5。 – erdi 2013-03-29 21:06:00

0

這是我用

dependencies { 
def gebVersion = "0.9.3" 
def seleniumVersion = "2.42.2" 
// If using Spock, need to depend on geb-spock 
testCompile "org.gebish:geb-spock:$gebVersion" 
testCompile("org.spockframework:spock-core:0.7-groovy-2.0") { 
    exclude group: "org.codehaus.groovy" 
} 
testCompile "org.codehaus.groovy:groovy-all:2.3.4" 

testCompile "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion" 
testRuntime "org.seleniumhq.selenium:selenium-support:$seleniumVersion" 

}