Spring-STS selenium 使用NoClassDefFoundError

Spring-STS selenium usage NoClassDefFoundError

您好,我在使用 selenium-standalone-server 时遇到问题。更多关于我的理解是问题所在。我很困惑为什么我需要在我的项目(构建路径)中引用它。请参阅下面的来源

BrowserService.java

public void start() throws MalformedURLException{
    System.out.println("Staring browser...");
    System.out.println("Execute RemoteDriver: "+config.isRemote());
    if (config.isRemote()){
        System.out.println("Starting as RemoteWebDriver execution...");
        WebDriver driver = new RemoteWebDriver(new URL("http://192.168.0.102:5555/wd/hub"),
                DesiredCapabilities.chrome());
        driver.get("http://www.google.com");
    }else{
        System.out.println("Starting as WebDriver execution...");
    }
}

控制台日志

java.lang.NoClassDefFoundError: com/google/common/base/Function
    at com.at.regression.service.BrowserService.start(BrowserService.java:33) ~[classes/:na]
    at com.at.regression.RegressionToolApplication.run(RegressionToolApplication.java:26) [classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:776) ~[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:760) ~[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:747) ~[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at com.at.regression.RegressionToolApplication.main(RegressionToolApplication.java:20) [classes/:na]
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
    at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_111]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_111]
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_111]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_111]
    ... 7 common frames omitted

每当我尝试引用 selenium-server-standalone-2.53.0.jar 时,上述错误将不会发生。那是为什么呢?这个 jar 文件不是用来启动远程驱动程序的吗?像这样

java -jar selenium-server-standalone-2.53.0.jar -role hub

java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://192.168.0.102:4444/grid/register/ -Dwebdriver.chrome.driver=./chromedriver.exe

更新

将我的标签从 selenium 特定更改为 spring、springtoolsuite 特定。 selenium 方面已经排除了这不是 selenium 的问题。详情见答案

为了大家的利益。我找到了这个问题的原因。

在他们 github Selenium 3.4.0 RemoteWebDriver NoClassDefFoundError 中的硒专家的帮助下。如您所见,有人指出我的类路径有问题。无论我如何调查它,我似乎都找不到导致类路径错误的部分帽子。所以我所做的就是改变 IDE。

当我遇到错误时,我正在使用 STS(Spring 工具套件)。这是我遇到类路径错误的地方。现在,我决定更改为 Eclipse 4.6.3(neon),错误已修复。我只需要在我的 Maven 上包含 selenium-server 3.4.0 依赖项。直到有人有时间去进一步调查 STS 问题。现在就够了。

至于类路径错误的原因,目前我不知道为什么会这样,我能想到的是 IDE 本身一定有问题。自从 Eclipse 为我工作以来,我没有更进一步。

至于 selenium-standalone-server-.jar,我仍然认为这不应该在您的项目中引用,因为它用于启动一些远程驱动程序。 selenium-server 已经可以容纳那些 类 需要的

希望对您有所帮助

更新

因为我正计划按照@Kris 在下面的评论中的建议将其发布在 Git 上,当时我遇到了修复(某种程度上)。当我收集要发布到 Git 的数据时,我对 .m2/repository 文件夹进行了清理,我删除了所有内容并让项目重新构建。错误从未发生。现在,这可能是一个 Maven 问题,所以为了大家的利益只是在这里更新它