Geb不使用chrome驱动程序

时间:2013-07-02 10:50:07

标签: selenium groovy geb

@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.33.0"),
  @Grab("org.seleniumhq.selenium:selenium-chrome-driver:2.33.0"),
  @Grab("org.seleniumhq.selenium:selenium-support:2.26.0"),
  @Grab( group='org.spockframework', 
    module='spock-core', 
    version='0.3'
  ),
  @Grab(group='org.gebish', module='geb-implicit-assertions', version='0.9.0')
])
import geb.Browser
import geb.spock.GebReportingSpec
import org.openqa.selenium.chrome.*
import spock.lang.Specification
import geb.navigator.NonEmptyNavigator
import geb.navigator.factory.*
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver\\chromedriver.exe");
def browser = new Browser(driver: new ChromeDriver())    

browser.go "http://www.google.com/"

assert browser.title == "Google"

browser.$("input", name: "q").value("query")   

当我尝试运行上面的代码时,我收到以下错误

WARNING: Sanitizing stacktrace:
java.lang.NoClassDefFoundError: Could not initialize class geb.navigator.NonEmptyNavigator
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:171)
    at geb.navigator.factory.DefaultInnerNavigatorFactory.class$(DefaultInnerNavigatorFactory.groovy)
    at geb.navigator.factory.DefaultInnerNavigatorFactory.$get$$class$geb$navigator$NonEmptyNavigator(DefaultInnerNavigatorFactory.groovy)
    at geb.navigator.factory.DefaultInnerNavigatorFactory.createNavigator(DefaultInnerNavigatorFactory.groovy:40)
    at geb.navigator.factory.InnerNavigatorFactory$createNavigator.call(Unknown Source)
    at geb.navigator.factory.AbstractNavigatorFactory.createFromWebElements(AbstractNavigatorFactory.groovy:44)
    at geb.navigator.factory.NavigatorFactory$createFromWebElements.callCurrent(Unknown Source)
    at geb.navigator.factory.BrowserBackedNavigatorFactory.getBase(BrowserBackedNavigatorFactory.groovy:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1671)
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3408)
    at geb.navigator.factory.AbstractNavigatorFactory.getProperty(AbstractNavigatorFactory.groovy)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
    at geb.content.NavigableSupport.getNavigator(NavigableSupport.groovy:39)
    at geb.content.NavigableSupport.$(NavigableSupport.groovy:96)
    at geb.content.NavigableSupport$$.call(Unknown Source)
    at geb.Page.$(Page.groovy)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1085)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:848)
    at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:831)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:164)
    at geb.Browser.methodMissing(Browser.groovy:193)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:837)  

关于如何解决它的任何想法???

2 个答案:

答案 0 :(得分:0)

要使用Geb / Chrome,您必须在Mac上配置它,从http://chromedriver.storage.googleapis.com/index.html下载Chrome网络驱动程序并将chromedriver移至usr / bin文件夹。重新启动终端并使用Chrome驱动程序运行Geb测试,它应该可以正常运行。

答案 1 :(得分:-2)

如上所述here,以下内容可能是您的例外原因。

  1. Class Classpath中没有类。
  2. 您可能正在使用jar命令运行程序,并且未在清单文件的ClassPath属性中定义类。
  3. 任何启动脚本都会覆盖Classpath环境变量。
  4. 因为NoClassDefFoundError是java.lang.LinkageError的子类,所以如果其中一个依赖项(如本机库)可能不可用,它也会出现。
  5. 检查日志文件中的java.lang.ExceptionInInitializerError。由于静态初始化失败而导致的NoClassDefFoundError非常普遍。
  6. 如果您在J2EE环境中工作,而多个类加载器中的Class的可见性也会导致java.lang.NoClassDefFoundError,请参阅示例和场景部分以进行详细讨论。