0

サンプルの Google 仕様を実行しています。つまり、次のようになります。

class GoogleHomePageSpec extends GebReportingSpec {

def "first result for wikipedia search should be wikipedia"() {
    given:
    to GoogleHomePage

    expect:
    at GoogleHomePage

    when:
    search.field.value("wikipedia")

    then:
    waitFor { at GoogleResultsPage }

    and:
    firstResultLink.text().startsWith "Wikipedia"

    when:
    firstResultLink.click()

    then:
    waitFor { at WikipediaPage }
}
}

次のようにGebSpec:

reportsDir = "target/geb-reports"

/* webdriver.*.driver system properties are set in the POM */
driver = { 
    new HtmlUnitDriver();
}

および次の関連するpom.xml抜粋:

    <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>0.7-groovy-2.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.39.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.gebish</groupId>
        <artifactId>geb-spock</artifactId>
        <version>0.9.2</version>
        <scope>test</scope>
    </dependency>

CLIまたはから実行すると、次のメッセージで失敗しますIDE

 First result for wikipedia search should be wikipedia(scratch.GoogleHomePageSpec)  Time elapsed: 0.96 sec  <<< ERROR!
 geb.driver.DriverCreationException: failed to create driver from callback    'GebConfig$_run_closure1@20fcbdaf'
    at geb.driver.CallbackDriverFactory.getDriver(CallbackDriverFactory.groovy:35)
    at       geb.driver.CachingDriverFactory.getDriver_closure3(CachingDriverFactory.groovy:80)
    at geb.driver.CachingDriverFactory.getDriver_closure3(CachingDriverFactory.groovy)
    at geb.driver.CachingDriverFactory$SimpleCache.get(CachingDriverFactory.groovy:30)
    at geb.driver.CachingDriverFactory.getDriver(CachingDriverFactory.groovy:79)
    at geb.Configuration.createDriver(Configuration.groovy:354)
    at geb.Configuration.getDriver(Configuration.groovy:343)
    at geb.Browser.getDriver(Browser.groovy:105)
    at geb.Browser.clearCookies(Browser.groovy:483)
    at geb.Browser.clearCookiesQuietly(Browser.groovy:491)
    at geb.spock.GebSpec.resetBrowser(GebSpec.groovy:45)
    at geb.spock.GebSpec.cleanup(GebSpec.groovy:67)
 Caused by: java.lang.NoClassDefFoundError:   org/apache/commons/collections/set/ListOrderedSet
    at com.gargoylesoftware.htmlunit.CookieManager.<init>(CookieManager.java:59)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:131)
    at   org.openqa.selenium.htmlunit.HtmlUnitDriver.newWebClient(HtmlUnitDriver.java:289)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.createWebClient(HtmlUnitDriver.java:263)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:144)
    at GebConfig.run_closure1(GebConfig.groovy:10)
    at GebConfig.run_closure1(GebConfig.groovy)
    at geb.driver.CallbackDriverFactory.getDriver(CallbackDriverFactory.groovy:29)
    at   geb.driver.CachingDriverFactory.getDriver_closure3(CachingDriverFactory.groovy:80)
    at geb.driver.CachingDriverFactory.getDriver_closure3(CachingDriverFactory.groovy)
    at geb.driver.CachingDriverFactory$SimpleCache.get(CachingDriverFactory.groovy:30)
    at geb.driver.CachingDriverFactory.getDriver(CachingDriverFactory.groovy:79)
    at geb.Configuration.createDriver(Configuration.groovy:354)
    at geb.Configuration.getDriver(Configuration.groovy:343)
    at geb.Browser.getDriver(Browser.groovy:105)
    at geb.Browser.clearCookies(Browser.groovy:483)
    at geb.Browser.clearCookiesQuietly(Browser.groovy:491)
    at geb.spock.GebSpec.resetBrowser(GebSpec.groovy:45)
    at geb.spock.GebSpec.cleanup(GebSpec.groovy:67)

確認したところ、commons-collection jar が存在し、「不足している」クラスが含まれています。ChromeDriverFirefoxDriverおよびを使用しても、このエラーはまったく発生しませんInternetExplorerDriver

残念ながら、環境上の理由から使用しなければならないHtmlUnitDriverので、これについては本当に頭を悩ませています.

どんな提案にも感謝します。

編集 1: このテストの一部を私の Mac で正常に実行できましたが、残りはタイムアウトになりました。しかし、上記と同じエラーは表示されません (Windows で観察されました)。

4

1 に答える 1

0

この問題は、maven_repo を再構築することで解決しました。つまり、古いものを邪魔にならないように移動して、次のテスト実行時に maven が強制的に再構築するようにしました。例外は表示されなくなりました。

于 2014-01-20T16:18:37.820 に答える