Java 无法使用selenium webdriver版本3.0.0.beta3单击链接
我已经编写了下面的Junit代码,用于单击下面的quikr网站上的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
登录链接
代码运行正常,没有任何错误,但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");
}
}