Java 无法使用selenium webdriver版本3.0.0.beta3单击链接

Java 无法使用selenium webdriver版本3.0.0.beta3单击链接,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我已经编写了下面的Junit代码,用于单击下面的quikr网站上的登录链接 代码运行正常,没有任何错误,但webdriver似乎没有单击网站上的登录链接。请建议 我正在使用: OS:Win10 Slenium WebDriver:3.0.0.beta3版 Firefox浏览器版本:49.0.1 import java.util.concurrent.TimeUnit; import org.junit.Test; import org.openqa.selenium.By; import o

我已经编写了下面的Junit代码,用于单击下面的quikr网站上的
登录链接

代码运行正常,没有任何错误,但webdriver似乎没有单击网站上的登录链接。请建议

我正在使用:

OS:Win10

Slenium WebDriver:3.0.0.beta3版

Firefox浏览器版本:49.0.1

import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Quikr {
    @Test
    public void loginTest(){
        System.setProperty("webdriver.gecko.driver","C:\\Eclipse\\Drivers\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.quikr.com/");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         if(!driver.findElements(By.xpath(".//*[@id='responsiveHeader']/div[1]/div[1]/ul/li[4]/a/span[1]")).isEmpty()){
             System.out.println("Link present");
         }else{
             System.out.println("Link not present");
         }
        driver.findElement(By.xpath(".//*[@id='responsiveHeader']/div[1]/div[1]/ul/li[4]/a/span[1]")).click();
    }   
}

这真是个奇怪的问题。此页面中有一些内容在页面完全加载之前不允许单击。。。它会进行一次初始加载,然后触发第二次加载广告。我找不到一种方法来点击该链接而不进行大量等待。也许还有别的方法可以做到这一点,但我想不出怎么做。下面的代码适用于我(但很难看)


使用
Thread.sleep()
不是一种好的做法,在99%的情况下都应该避免
WebDriverWait
是等待元素等的首选方式。

我想您已经得到了答案,但我将添加一个动态等待时间,而不是作为答案给出的硬编码等待时间。在单击所需按钮之前,可以使用此方法

    public static void waitForPageToLoad(long timeOutInSeconds) {
    System.out.println("Waiting for page to load");
    ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver driver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }
    };
    try {
        System.out.println("Waiting for page to load...");
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        wait.until(expectation);
    } catch (Throwable error) {
        System.out.println(
                "Timeout waiting for Page Load Request to complete after " + timeOutInSeconds + " seconds");
    }
}
publicstaticvoid waitForPageToLoad(长时间超时秒){
System.out.println(“等待页面加载”);
ExpectedCondition expectation=新的ExpectedCondition(){
公共布尔应用(WebDriver驱动程序){
return((JavascriptExecutor)driver.executeScript(“return document.readyState”).equals(“complete”);
}
};
试一试{
System.out.println(“等待页面加载…”);
WebDriverWait wait=新的WebDriverWait(驱动程序,timeoutingseconds);
等待,直到(期望);
}捕获(可丢弃错误){
System.out.println(
“在“+TimeOutingSeconds+”秒”之后等待页面加载请求完成的超时”;
}
}

我可以使用您建议的上述代码单击“登录”链接。
    public static void waitForPageToLoad(long timeOutInSeconds) {
    System.out.println("Waiting for page to load");
    ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver driver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }
    };
    try {
        System.out.println("Waiting for page to load...");
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        wait.until(expectation);
    } catch (Throwable error) {
        System.out.println(
                "Timeout waiting for Page Load Request to complete after " + timeOutInSeconds + " seconds");
    }
}