最佳实践 - 通用webdriverWait直到加载弹出窗口,如果出现错误,则测试失败

时间:2017-06-27 19:54:39

标签: java selenium-webdriver error-handling webdriver

我的问题是我有customWaitMethods,例如:

    public void waitForLoading(WebElement loadingElement, WebElement errorElement) {
    long timeOut = Long.parseLong(PropertyReader.getInstance().getProperty("DEFAULT_TIME_OUT"));
    try {
        WebDriverWait wait = new WebDriverWait(DriverFactory.getInstance().getDriver(), timeOut);
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id(loadingElement.toString())));

        if (errorElement.isDisplayed()) {
            throw new TestException();
        }
    } catch (TimeoutException e) {
        System.out.println("Timed out after default time out");
    } catch (TestException e) {
        System.out.println("Unexpected error occurred, environment error");
        e.printStackTrace();
    }
}

我需要一些通用的customWait方法。我做了一个搜索,但需要处理几个案例。出现错误消息 - >测试失败了。等待加载内容,它消失了, - >检查搜索结果。

如果我想连续检查一些error_message元素,我怎么能扩展这段代码呢?在这种情况下我会抛出异常?所以我可以独立处理超时异常,另一个是错误消息msg?

由于IF,这个sript失败了。 ErrorElement没有出现在页面上,---> NoSuchElementException异常

2 个答案:

答案 0 :(得分:1)

您可以根据需要catchExceptioncatch。在您的情况下,您希望TimeoutException catch来处理超时。然后public void waitForLoading() { long timeOut = Long.parseLong(...); try { WebDriverWait wait = new WebDriverWait(...); wait.until(ExpectedConditions.invisibilityOfElementLocated(...)); if (<error-message-appears>) { throw new CustomErrorMessageAppearedException(); } } catch (TimeoutException e) { System.out.println("Timed out after..."); } catch (CustomErrorMessageAppearedException e) { // handle error message } } 处理错误消息的不同类型的异常:

using namespace std

答案 1 :(得分:0)

我看到的最简单的方法是:

public void waitForLoading() {
        long timeOut = Long.parseLong(PropertyReader.getInstance().getProperty("DEFAULT_TIME_OUT"));
        try {
            WebDriverWait wait = new WebDriverWait(DriverFactory.getInstance().getDriver(), timeOut);
            if (!wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("wait_element")));) 
            {
                throw new NoSuchElementException();
            }
        } catch (TimeOutException e) {
            System.out.println("Timed out after " + timeOut + "seconds waiting for loading the results.");
        }
    }