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

Java NoSuchMethodError:org.openqa.selenium.support.ui.WebDriverWait.until,java,selenium,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");

我正在尝试运行以下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>
代码卡在行中:

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;

Selenium 3.1.0以后的版本需要番石榴21作为等待方法。 尝试将其添加到您的pom中,最好靠近顶部,以防另一个依赖项正在导入旧版本的番石榴:

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

番石榴
番石榴
21

我认为您的问题在于这一行代码

WebElement element=wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dnn_dnnUser_enhancedRegisterLink")));
As Wait.until用于告诉web驱动程序等待某个操作发生,该操作是您案例中ID=“dnn\u dnuser\u enhancedRegisterLink”所定位元素的可见性 但是此方法不返回web元素对象,因此不能使用它定义web元素

相反,你只需要写:

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

它与最新的罐子一起使用:

Appium 1.8.1
Java-client 5.0.4
Selenium-java 3.7.1
可能重复的
Appium 1.8.1
Java-client 5.0.4
Selenium-java 3.7.1