如何要求Selenium等待页面加载然后检查URL?

时间:2019-12-22 10:57:52

标签: java selenium

我看过this question,它是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));

}

这是我的硒版本:

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

更新: 当我使用以下方法时,感谢@​​Guy:

public void checkCurrentURL(String expectedURL) {

        new WebDriverWait(driver, 2).until(
                new ExpectedCondition<Boolean>() {
                    @Override
                    public Boolean apply(WebDriver d) {
                        return d.executeScript("return document.readyState").equals("complete");
                    }   
                }
            );

        String realURL = driver.getCurrentUrl();
        System.out.println("------------------------------------URL is: "+realURL);
        Assert.assertTrue(realURL.equals(expectedURL));

    }

它抱怨:

The method until(Function<WebDriver,T>) in the type WebDriverWait is not applicable for the arguments ()

这里是the repository

由于3.14.0对我不起作用,我将硒更新为3.142.6

1 个答案:

答案 0 :(得分:1)

implicitlyWait用于配置搜索WebElement时的最大查找时间,此处无关紧要,并且此后将影响driver,不仅在方法范围内。

您可以使用WebDriverWait并检查document.readyState

new WebDriverWait(driver, pageLoadTimeout).until(
    new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver d) {
            return d.executeScript("return document.readyState").equals("complete");
        }   
    }
);

请注意,版本3.4.0相当老(约2.5年)。考虑更新到版本3.142.6(最新的不是alpha版本)。