每当我在项目中尝试使用wait.until(ExpectedConditions)
时,都会遇到以下错误:
java.lang.NoSuchMethodError:org.openqa.selenium.support.ui.FluentWait.until(Lcom / google / common / base / Function;)Ljava / lang / Object;
我发现有问题的示例代码:
public static void clickSearch(WebDriver driver,By by, int timeout){
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(driver, 2);
WebElement webElement = wait.until(ExpectedConditions.elementToBeClickable(by));
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
webElement.click();
}
AND
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(waitSeconds, TimeUnit.SECONDS).pollingEvery(5, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class);
wait.until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
}
});
我有以下库:
activation.jar
byte-buddy-1.8.3.jar
cglib-nodep-3.2.4.jar
commons-codec-1.10.jar
commons-collections4-4.1.jar
commons-exec-1.3.jar
commons-io-2.5-javadoc.jar
commons-io-2.5.jar
commons-lang3-3.5.jar
commons-logging-1.2.jar
dom4j-1.6.1.jar
dsn.jar
gson-2.8.5.jar
hamcrest-core-1.3.jar
hamcrest-library-1.3.jar
http-client-6.6.0.5.jar
httpclient-4.5.5.jar
httpcore-4.4.9.jar
httpmime-4.5.5.jar
imap.jar
jackson-annotations-2.9.1.jar
jackson-core-2.9.1.jar
jackson-databind-2.9.1.jar
java-client-3.3.0.jar
jaxen-1.1.6.jar
jcl-over-slf4j-1.7.21.jar
jcommander-1.72.jar
jna-4.4.0.jar
json-20151123.jar
jsr305-3.0.2.jar
junit-4.12.jar
jxl-2.6.12.jar
mail.jar
mailapi.jar
netty-3.5.7.Final.jar
ojdbc6.jar
okio-1.15.0.jar
pm-webdriver-6.6.0.5-javadoc.jar
pm-webdriver-6.6.0.5.jar
poi-3.17.jar
poi-examples-3.16.jar
poi-excelant-3.17.jar
poi-ooxml-3.17.jar
poi-ooxml-schemas-3.17.jar
poi-scratchpad-3.17.jar
selenium-3.13\selenium-api-3.13.0.jar
selenium-3.13\selenium-java-3.13.0.jar
selenium-3.13\selenium-remote-driver-3.13.0.jar
selenium-3.13\selenium-server-standalone-3.13.0.jar
selenium-3.13\selenium-support-3.13.0.jar
slf4j-api-1.7.25.jar
smtp.jar
testng-6.14.2.jar
xml-apis-2.9.1.jar
xmlbeans-2.6.0.jar
guava-26.0-jre.jar
我们在我们的项目中不使用Gradle / Maven。我们将这些库的物理副本存储在某个位置,并使用它们通过ANT脚本构建可执行jar。然后我们从命令行执行由ANT脚本创建的jar:
java.exe -cp <ProjectJarName>;<Location of jar libraries> <Main class name with whole package>.
For eg : java.exe project.jar;C:\Libraries\*.jar java.main.Main
当我搜索问题时,看到的常见答案是添加了我尝试过的最新的番石榴罐,但并没有解决问题。同样在github的selenium论坛中,我看到人们通过更改pom.xml来解决问题,因为我不依赖于maven,因此可以更改我认为不必执行的顺序。
答案 0 :(得分:0)
您正在传递扩展了com.google.common.base.Function
的{{3}}。
此接口现在是旧式。使用java.util.function.Function (或适当的原始特化,例如ToIntFunction) 相反,只要有可能。否则,至少要减少显式 通过使用lambda表达式或方法对此类型进行依赖 引用而不是类,从而使代码更易于迁移 未来。
要在以下情况下使用现有功能(例如,命名功能) 其他类型的功能是预期的,请使用方法参考 功能::申请。未来版本的com.google.common.base.Function 将进行扩展java.util.function.Function,进行转换 仅在一个方向上需要的代码。当时这个界面 将被正式劝阻。
这表明您的JRE版本或库版本不匹配。您收到的错误消息说,当com.google.common.base.Function
的Javadoc说它的参数应该是until
时,您正在传递java.util.function.Function
。