Я пытаюсь настроить метод прокрутки вверх или вниз по мобильным веб-страницам / виджетам для поиска целевого элемента.Когда он достигает границы и определяет, что вид не изменился, направление свайпов меняется на противоположное и продолжает поиск цели или, если количество попыток истекло.Поскольку для Android пока нет простого способа определить, достигла ли она границы, я предпринял попытки решить это решение, найдя активные элементы в поле зрения, и после каждого пролистывания проводил сравнение между активными элементами в текущем представлении иэлемент, который был просмотрен ранее с помощью switchTo (). activeElement ().Я сделал сравнения с помощью Element.toString (), toJson (), hashCode () и getLocation ().Конечно, текущая проблема с использованием switchTo (). ActiveElement () заключается в том, что если он не может сфокусироваться на каком-либо элементе View, ему назначается элемент Body веб-страницы / виджета, что делает его сравнение самим собой.
Мне интересно, были ли попытки во время тестирования создать и вставить MobileElement в веб-страницу / виджет или создали какую-то "липкую точку", чтобы указать, изменился ли вид на экране или нет на основеТочка расположения точки.Очевидно, что это не рекомендуемый подход для создания и добавления элемента и присоединения его к самой веб-странице / виджету, но в настоящий момент я не могу придумать альтернатив для сравнения, если activeElement () будетэлемент, который занимает весь экран мобильного устройства.
Я не уверен, пытался ли кто-нибудь сделать это или использовал ли этот предмет другую терминологию, поскольку из моих исследований очень мало или ничего не выходит, но я готов привестидо этого случая, если был поднят раньше.
Текущий используется для моего поискаSwipe:
void swipeUntilFound(By method, int attempts, MobileElement targetElement) {
int limitCount = 0;
double startScrollPoint = 0.8;
double endScrollPoint = 0.25;
MobileElement lastViewPoint = null;
MobileElement currentViewPoint;
int lastViewPointPosition = 0;
while (limitCount < attempts || driver.findElements(method).isEmpty()) {
if(lastViewPoint != null) {
lastViewPointPosition = lastViewPoint.getLocation().getY();
}
swipeVertical(startScrollPoint, endScrollPoint, 3000);
currentViewPoint = (MobileElement) driver.switchTo().activeElement();
try {
System.out.println("last Element in View: " + lastViewPoint.hashCode() + "Location: " + lastViewPoint.getLocation());
System.out.println("Current Element in View: " + currentViewPoint.hashCode() + "Location: " + currentViewPoint.getLocation());
}
catch (NullPointerException e) {
}
if(lastViewPoint == null || lastViewPoint.hashCode() != currentViewPoint.hashCode()) {
System.out.println("Last and Current don't match.");
lastViewPoint = currentViewPoint;
}
else if( lastViewPointPosition == lastViewPoint.getLocation().getY() ||
lastViewPoint.hashCode() == currentViewPoint.hashCode()) {
System.out.println("Last and Current match");
double temp = startScrollPoint;
startScrollPoint = endScrollPoint;
endScrollPoint = temp;
}
limitCount++;
}
if(limitCount == attempts) {
System.out.println("Unable to find Specified Element.");
}else {
targetElement = driver.findElement(method);
System.out.println("Element " + method.toString() + " was found.");
}
}