2013-03-27 302 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" 

}