我正在自动化一次测试用例和步骤:
这里主要是填写表格后请求报告,请求25到30分钟后可在同一页面下载报告。
那么有没有更好的方法等待30分钟,直到我的报告可供下载?
提交请求后,我想把逻辑放在:
do{
//click somewhere on page constantly where nothing happens but just to be active
}while(reportelement.size!=1);
一旦我获得报告大小> 0,我将点击下载链接。
我知道selenium提供了明确的等待,但有点混淆了如何在这里实现。
我不是在寻找整个场景代码,只是一个好的逻辑可以帮助我自动化这些等待的东西。
答案 0 :(得分:2)
如果您无法拆分测试,我建议您保持简单,如下所示
int timeTaken = 0;
int TIMEOUT = 30 * 60;
do {
Thread.Sleep(1000);
timeTaken = timeTaken + 1;
reportelement = driver.findElements(...);
} while (timeTaken < TIMEOUT && reportelement.size != 1)
FluentWait
最好不要在元素可用时浪费时间并避免硬编码等待。因为在这里我们总是期待30分钟的延迟,所以浪费额外的时间以确定元素无关紧要。但是用例的代码非常简单。
由于您正在执行findElements
,因此您无需在页面上执行任何其他操作,连接仍将在驱动程序中处于活动状态
答案 1 :(得分:0)
使用FluentWait
方法执行此操作的最简洁方法可能是自定义Sleeper。这可以在支票之间做你喜欢的事。
Sleeper
是WebDriverWait
的完整构造函数的参数之一,例如:
Sleeper sleeper = duration -> {
// Click somewhere
Sleeper.SYSTEM_SLEEPER.sleep(duration);
};
long longTimeout = 1800_000;
FluentWait<WebDriver> wait = new WebDriverWait(driver,
new SystemClock(), sleeper, longTimeout,
WebDriverWait.DEFAULT_SLEEP_TIMEOUT)
.ignoring(StaleElementReferenceException.class);
By by = By.id(id); // (As appropriate)
wait.until(ExpectedConditions.numberOfElementsToBe(by, 1));
- 其他构造函数参数只有正常的默认值。可能更长的sleepTimeOut
在这里也有意义。