NoSuchMethodError:org.openqa.selenium.support.ui.WebDriverWait.until

时间:2017-05-19 18:13:08

标签: java selenium

我正在尝试运行以下selenium代码:

        WebDriver driver;
        System.setProperty("webdriver.chrome.driver", "C:\\Driver\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("http://www.behsad.com/nportal/Default.aspx?tabid=55");

        driver.findElement(By.id("dnn_dnnUser_enhancedRegisterLink")).click();

        WebDriverWait wait=new WebDriverWait(driver, 30);
        WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(
                                        By.id("dnn_dnnUser_enhancedRegisterLink")));
        element.click();

这是我的pom.xml:

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-picocontainer</artifactId>
    <version>1.2.5</version>
</dependency>

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.4.0</version>
</dependency>

最后有代码导入:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

代码卡在行中:

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(
                                            By.id("dnn_dnnUser_enhancedRegisterLink")));

并抱怨:

java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.WebDriverWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;

3 个答案:

答案 0 :(得分:0)

Selenium 3.1.0以后需要使用guava 21作为wait.until方法。 尝试将此添加到您的pom,最好是在顶部附近,以防另一个依赖项导入和旧版本的guava:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

答案 1 :(得分:0)

我认为你的问题出在这行代码中

WebElement element=wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dnn_dnnUser_enhancedRegisterLink")));

由于Wait.until用于告诉您的Web驱动程序等待某个操作发生,这是您的案例中ID =“dnn_dnnUser_enhancedRegisterLink”所在元素的可见性 但是此方法不返回Web元素对象,因此您无法使用它来定义Web元素

相反,你只需要写:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dnn_dnnUser_enhancedRegisterLink")));

答案 2 :(得分:0)

它适用于最新的jar:

Appium 1.8.1
Java-client 5.0.4
Selenium-java 3.7.1