Selenium条件等待与中间动作

时间:2016-07-20 18:21:59

标签: java selenium selenium-webdriver ui-automation

我正在尝试在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
}

有谁能告诉我如何以上面指定的形式转换方法?

1 个答案:

答案 0 :(得分:1)

我正在尝试在Selenium中执行某个操作,它会等到状态更改为某个“已完成”状态。

这可以通过WebDriverWaitExpectedConditions.textToBePresentInElementLocated一起使用而不是创建自己的自定义方法waitForActionToComplete来实现,如下所示: -

WebDriverWait wait = new WebDriverWait(driver, 30);
 wait.until(ExpectedConditions.textToBePresentInElementLocated(byObject, "Finished"));

希望它有帮助...:)