Как избежать исключения timeoutException - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь избежать исключения timeoutException в моем коде, как показано ниже, и должен возвращать логическое значение. Ниже приведено решение, которое я мог бы получить на данный момент.

try {
    int totElements = getNumberElements(locator, type).size();
    if (totElements > 0)
        return true;
    return false;
} catch (TimeoutException timeout) {
    System.out.println(timeout.getMessage());
    return false;
}

Есть ли какой-нибудь эффективный способ, который мы могли бы сделать? Я пробовал приведенную ниже часть, но все еще получал timeoutException и что это ошибка, которую я делаю?

public static boolean isElementDisplayed(String locator, LocatorType type) {
    dr.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    WebDriverWait wait = waitForElement();
    boolean isDisplayed = wait.until(elementWait(locator, type)); //this line throws timeoutException
    dr.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    return isDisplayed;
}

ниже - это ожидание, которое я использую,

private static Function<WebDriver, Boolean> elementWait(String loctor, LocatorType type) {
    Function<WebDriver, Boolean> wait = new Function<WebDriver, Boolean>() {
        @Override
        public Boolean apply(WebDriver input) {
            // TODO Auto-generated method stub
            int total = getNumberElements(loctor, type).size();
            System.out.println(total);
            if (total > 0)
                return true;
            return false;
        }
    };
    return wait;
}
public static List<WebElement> getNumberElements(String locator, LocatorType type) {
    List<WebElement> numberOfElements = new ArrayList<>();
    By byElements = getElementUsingBy(locator, type);
    numberOfElements = dr.findElements(byElements);
    return numberOfElements;
}
public static By getElementUsingBy(String loctor, LocatorType type) {
    switch (type) {
        case ID:
            return By.id(loctor);
        case LinkText:
            return By.linkText(loctor);
        case PartialLinkText:
            return By.partialLinkText(loctor);
        case Xpath:
            return By.xpath(loctor);
        default:
            throw new RuntimeException("Invalid Locator Type " + type);
    }
}
...