我正在自动进行重定向并导致页面更改的情况(这意味着用户将从一个页面导航到另一页面),尽管重定向发生在同一屏幕上,但不会打开其他窗口。我要执行一些操作,一旦用户将重定向到下一个屏幕。没有等待,就不可能在这种情况下工作。有两种方法:
我尝试使用java while循环,并使其等待直到URL更改为止
while(getDriver()。getCurrentUrl()。contains(“ URL的分数”)){ }
这个正在为我工作。
我只是想知道#2是否会被认为是正确的方法,还是我应该继续研究#1?
我们的应用程序使用AJAX,我们的框架基于BDD + Selenium
答案 0 :(得分:1)
如果您知道下一页的URL是什么,或者其中一部分不同于首页,那么最好的选择是使用FluentWait而不是循环。例如:
FluentWait<WebDriver> webDriverWait = new WebDriverWait(driver, 60).pollingEvery(Duration.ofSeconds(2));
webDriverWait.until(ExpectedConditions.urlContains("Fraction of new URL"));
或者如果您的新URL是完全随机的,则可以使用:
webDriverWait.until(ExpectedConditions.not(ExpectedConditions.urlContains("Fragment of URL")));
但是,这可能不太可靠,因为它可能会在某个中间点对其进行验证,并且实际上并不能验证您是否已到达正确的页面,只是您已经离开了最后一页。
这将创建一个等待时间,该等待时间最长为60秒,但每2秒检查一次情况。您可以将最大时间调整为响应时间所需的任何时间,但轮询可确保仅花费其所需的时间,同时还可确保在发生真正错误时有一条失败的路径,这与while循环相反如果新页面未加载,则将无限期运行
答案 1 :(得分:0)
如果您等到重定向页面中的某些元素可单击或存在,或者该怎么办?
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(4))
.pollingEvery(Duration.ofMillis(500));
以及您需要等待的地方:
wait.until(ExpectedConditions.elementToBeClickable(WebElement));
有许多不同的等待:.toBeClickabe(WebElement), .visibilityOfAllElements(List<WebElement>), .presenceOfAllElementsLocatedBy(By.Xpath("xpath selector"))
等等。