Java 如何让Selenium等待页面加载,然后检查URL?

Java 如何让Selenium等待页面加载,然后检查URL?,java,selenium,Java,Selenium,我看到了,它是wait+findElementBy的组合。 但是,我的问题略有不同,因为我需要在页面完全加载后检查URL(而不是元素) 我已经尝试了以下解决方案,但它对我不起作用: public void checkCurrentURL(String expectedURL) { driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // 5 seconds delay to load the page S

我看到了,它是
wait+findElementBy
的组合。 但是,我的问题略有不同,因为我需要在页面完全加载后检查URL(而不是元素)

我已经尝试了以下解决方案,但它对我不起作用:

public void checkCurrentURL(String expectedURL) {
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // 5 seconds delay to load the page
    String realURL = driver.getCurrentUrl();
    System.out.println("------------------------------------URL is: "+realURL);
    Assert.assertTrue(realURL.equals(expectedURL));

}
这是我的selenium版本:

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

org.seleniumhq.selenium


我将selnium更新为
3.14.0
,因为
3.142.6
对我不起作用。

隐式地使用wait
来配置搜索
WebElement
时的最长查找时间,它在这里不相关,并且从现在起将影响
驱动程序
,而不仅仅是在方法范围内

您可以使用
WebDriverWait
并检查
文档。readyState

new WebDriverWait(driver, pageLoadTimeout).until(
    new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver d) {
            return d.executeScript("return document.readyState").equals("complete");
        }   
    }
);
新建WebDriverWait(驱动程序,页面加载超时)。直到(
新的ExpectedCondition(){
@凌驾
公共布尔应用(WebDriver d){
return d.executeScript(“return document.readyState”)。等于(“complete”);
}   
}
);

顺便说一句,3.4.0版已经很旧了(大约有2.5年了)。考虑更新到版本3.142.6(最新的非alpha版本)。

@ SalmanLashkarara,这可能是由于硒版本。我添加了另一个解决方案。@salmanashkarara我删除了第一个
返回值
,请立即检查。
由于旧的Selenium版本,WebDriver类型的executeScript(字符串)未定义。如果不打算升级,则需要使用
JavascriptExecutor
((JavascriptExecutor)驱动程序)我将其更新为
3.14.0
,因为我
3.142.6
不适合我。这是我的POM:
The method until(Function<WebDriver,T>) in the type WebDriverWait is not applicable for the arguments ()
new WebDriverWait(driver, pageLoadTimeout).until(
    new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver d) {
            return d.executeScript("return document.readyState").equals("complete");
        }   
    }
);