Я пытаюсь избежать исключения 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);
}
}