我正在尝试在Selenium中执行某个操作,它会等到状态更改为某个“已完成”状态。
从概念上讲,它可以用伪代码布局:
public boolean waitForActionToComplete(long maxTimeoutInSeconds, int repeatTimeInSeconds, Callable<T> action, Callable<T> condition) {
long startTime = 0;
while (startTime < maxTimeoutInSeconds)
perform <action>; // e.g., click on a "Refresh" button to refresh the results
boolean done = verify <condition>; // e.g., check whether the job status is "Done"
if (done)
return true; // if done, then exit with TRUE
else
Thread.sleep(repeatTimeInSeconds);
end while;
return false; // status still not complete, timeout gracefully
}
使用ExpectedCondition和WebdriverWait / FluentWait可以以一种简单的方式实现此方法。但是,由于框架中的某些约束,我无法完全实现和使用这样的方法。上述方法必须以此方式实现(在具有此方法签名的框架中实现接口):
public void execute(final WebDriver webDriver, String... parameters) {
// implementation here
}
有谁能告诉我如何以上面指定的形式转换方法?
答案 0 :(得分:1)
我正在尝试在Selenium中执行某个操作,它会等到状态更改为某个“已完成”状态。
这可以通过WebDriverWait
与ExpectedConditions.textToBePresentInElementLocated
一起使用而不是创建自己的自定义方法waitForActionToComplete
来实现,如下所示: -
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.textToBePresentInElementLocated(byObject, "Finished"));
希望它有帮助...:)