Метод Java Wrapper для ожидания доступа к элементу для приложения, управляемого Apache Cordova Webview
Для мобильного приложения с несколькими веб-представлениями (приложение iOS, созданное с использованием Cordova, PhoneGap, XCode), я создал метод ниже, чтобы проверить, присутствует ли элемент. Просьба предложить, если ниже фрагмент имеет смысл? поскольку традиционные функции-обертки, основанные на традиционных явных ожиданиях, не работают надежно.
public boolean waitForElemToBeAvailable(final By by, final int timeout, int retries) {
WebDriverWait wait = new WebDriverWait(appiumDriver, timeout);
boolean success = false;
final long waitSlice = timeout/retries;
if(retries>0){
List<WebElement> elements = appiumDriver.findElements(by);
if(elements.size()>0){
success = true;
return success;
}else {
appiumDriver.manage().timeouts().implicitlyWait(waitSlice, TimeUnit.SECONDS);
retries--;
}
}
return success;
}
Спасибо
1 ответ
Согласно блоку кода, которым вы поделились, я не вижу никакого добавления значения, чтобы проверить, присутствует ли элемент через implicitlyWait
, Реализация выглядит как чистые накладные расходы. Вместо этого, если вы загляните в Java Docs ExpectedCondition Interface из пакета org.openqa.selenium.support.ui, который моделирует условие, которое может ожидаться для оценки чего-то, что не является нулевым или ложным, также содержит класс ExpectedConditions, который можно вызвать в цикле с помощью класса WebDriverWait и методов обеспечивает более детальный подход, чтобы подтвердить, достигнуто ли определенное условие или нет. Это дает нам гораздо больше гибкости в выборе желаемого поведения WebElement. Некоторые из широко используемых методов:
Наличие элемента:
presenceOfElementLocated(By locator)
Видимость элемента:
visibilityOfElementLocated(By locator)
Интерактивность элемента:
elementToBeClickable(By locator)
Примечание: согласно документации не смешивайте неявные и явные ожидания. Это может привести к непредсказуемому времени ожидания.