我看过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
。
答案 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版本)。