Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoSuchMethodError:org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)使用selenium-server-standalone-3.12.0_Java_Selenium_Java 8_Guava_Webdriverwait - Fatal编程技术网

java.lang.NoSuchMethodError:org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)使用selenium-server-standalone-3.12.0

java.lang.NoSuchMethodError:org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)使用selenium-server-standalone-3.12.0,java,selenium,java-8,guava,webdriverwait,Java,Selenium,Java 8,Guava,Webdriverwait,我一直在努力与selenium一起解决此问题: java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)Ljava/lang/Object; 这就是我得到这个错误的地方: Wait<WebDriver> wait = new FluentWait<>(getDriverInstance()) .with

我一直在努力与selenium一起解决此问题:

java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
这就是我得到这个错误的地方:

Wait<WebDriver> wait = new FluentWait<>(getDriverInstance())
        .withTimeout(timeout, TimeUnit.SECONDS)
        .pollingEvery(frequency, TimeUnit.SECONDS)
        .ignoring(NoSuchElementException.class);
wait.until(driver -> {
    assert driver != null;
    elt.click();
    return true;
});
但在当地,情况是这样的:

import java.util.function.Function;

public interface Wait<F> {
    <T> T until(Function<? super F, T> var1);
}
import com.google.common.base.Function;

public interface Wait<F> {
    <T> T until(Function<? super F, T> var1);
}
import java.util.function.Function;

public interface Wait<F> {
    <T> T until(Function<? super F, T> var1);
}
我仍然不明白为什么我会得到
,直到(Lcom/google/common/base/Function;)
在使用的
Function
接口来自
java.util.Function
而不是
com.google.common.base

更新2 通过查看intellij如何执行我的jar,我以某种方式解决了这个问题,因此我在类路径中添加了
D:\..\target\test class
,异常由于某种原因消失了,为什么会发生这种情况?如何将
测试类中的文件包含到我的最终jar中

通常我有一个运行测试的bat文件:

@SETLOCAL
@ECHO OFF
@set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_231"
@set PATH=%JAVA_HOME%\bin;D:\drivers;%PATH%


@set CLASSPATH=.;
@set CLASSPATH=%CLASSPATH%D:\sln\lib\*;
@set CLASSPATH=%CLASSPATH%D:\sln\selenium-server-standalone-3.12.0.jar;

echo %CLASSPATH%
"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe" com.sln.Runner %*
我使用的方法如下:

D:\sln\Run.bat -u localhost -f D:\sln\target\sln-1.0-SNAPSHOT-tests.jar -c com.sln.SeleniumTest ...
这不起作用,除非我将其添加到类路径中,否则我将获得
NoSuchMethodError
异常:

@set CLASSPATH=%CLASSPATH%D:\sln\target\test-classes;
此错误消息

java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
…意味着番石榴版本不兼容


根据selenium-java-3.12.0客户端工具包的内容,使用selenium-server-standalone-3.12.0时,支持的版本为:

番石榴-23.6-jre


快照


解决方案 立即的解决办法是:

  • 使用
    Guava-23.6-jre.jar升级番石榴

真正的问题 在您的第一次更新中,您确认了番石榴版本是
23.6-jre
,真正的问题似乎是它的构造函数。Selenium v3.11.0之后的
with timeout
pollingEvery
的参数类型为:

  • pollingEvery(长持续时间,java.util.concurrent.TimeUnit)
  • withTimeout(长持续时间,java.util.concurrent.TimeUnit)
现已弃用,新类型为。因此,您的有效代码块将是:

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofMillis(500))
.ignoring(NoSuchElementException.class);
Wait Wait=new FluentWait(驱动程序)
.withTimeout(持续时间秒(30))
.pollingEvery(持续时间:百万(500))
.忽略(NoSuchElementException.class);
您可以在中找到详细的讨论


额外考虑 另外,

  • 您的JDK版本是1.8_71,它非常古老古老
  • 解决方案:确保JDK升级到当前级别

最佳做法 根据最佳实践,您需要:

  • 将JDK升级到最新级别
  • 将硒升级到当前水平
  • GeckoDriver和Firefox特定:
    • 将GeckoDriver升级至标高
    • 壁虎河位于所需位置
    • GeckoDriver对非root用户具有可执行权限
    • 将Firefox版本升级到Firefox v72.0版本
  • 铬驱动和铬特定:
    • ChromeDriver已更新到当前级别
    • Chrome更新到当前的Chrome 79.0版本。(根据)
  • 通过IDE清理项目工作区,并仅使用所需的依赖项重建项目
  • (仅限Windows OS)在执行测试套件之前和之后,使用该工具清除所有操作系统杂务
  • (仅限LinuxOS)在执行测试套件之前和之后
  • 如果您的基本Web客户端版本太旧,请通过卸载它并安装最新的GA和Web客户端发布版本
  • 重新启动系统
  • 以非root用户身份执行
    测试
  • 始终在
    tearDown(){}
    方法中调用
    driver.quit()
    ,以优雅地关闭和销毁Web驱动程序和Web客户端实例

参考文献 有关详细讨论,请参见:


    • 这是兼容性问题。要解决这个问题,可以使用番石榴21版+硒3.2.0版+JDK 8

      有关更多详细信息,请查看以下链接:


      我希望它能帮助你。

      简单的简短回答:你对过时的番石榴版本有依赖性问题

      ->这样做: 在每个项目中,明确地将番石榴依赖项从请求它的每个依赖项
      中排除(使用依赖关系图查找这些) 或者最好将其排除在父级中(如果有)

      ->然后明确添加guava 23.0(或更新版本)依赖项

      这会解决它的。现在,从某个地方正在提取一个旧的番石榴版本,它没有“直到”方法(或者至少没有这个参数)


      祝你好运!:)

      我认为您应该在
      D:\sln\
      D:\sln\lib\
      下检查是否有其他版本的selenium库。如果有,请将其删除


      从错误消息来看,执行批处理脚本时,它似乎使用了来自不同Selenium jar文件的不同版本的Selenium。可能是旧版本的selenium jar还没有Wait.until方法。

      很遗憾,我无法更改selenium server的版本,我必须使用3.12.0版本,我将尝试提供的其他版本solutions@IchigoKurosaki我不知道您何时将番石榴库添加到项目中(从一开始还是在这个错误之后)。我创建了一个演示项目,用相同版本的SeleniumServerStandalone、guava和java对其进行测试。我没有发现“Webdriver wait”有任何错误,但当我添加了guava 19时,我得到了相同的错误。我想说,如果您从一开始就使用番石榴,那么您可以删除番石榴库并尝试一下。谢谢您的回答,但不幸的是,这对我来说不起作用,我已经将JDK的版本更新为最新版本
      jdk1.8.0ç
      ,并将番石榴更新为<