Проверьте, загружает ли на экране мобильного устройства новый элемент - PullRequest
0 голосов
/ 15 февраля 2019

В нашем мобильном приложении у нас есть несколько экранов, где нам нужно провести пальцем по экрану, чтобы просмотреть элемент, или проведя пальцем по загрузке нового элемента.В нашем коде всякий раз, когда мы проверяем, присутствует ли элемент или нет, мы вызываем метод для проверки текущего набора элементов на экране, затем проводим и снова считываем все элементы на экране после считывания.Теперь сравните последний элемент в двух списках, чтобы проверить, загружен новый элемент или нет.Если новый элемент не загружен, мы заключаем, что искомый элемент не загружается на экран.Ниже приведен код, который я написал для этой цели.Этот код должен идентифицировать, загружает ли смахивание новый элемент или нет.

Проблема в том, что я читаю все элементы и загружаю их в список.Этот шаг становится очень тяжелым и иногда задерживает выполнение кода более 5 минут.

Может кто-нибудь подсказать, могу ли я сделать что-то лучше здесь.

public synchronized boolean isScrollingLoadsNewElement (AppiumDriver<MobileElement> driver)
    {
        boolean isNewElementLoaded = false;
        System.out.println("inside the new method to scroll and check new element");
        //declare a list to accept all the elements on current screen
        //go to the end of the list to read the last element. Store in a variable
    this.driver = driver;

    List<MobileElement> lAllElements = this.driver.findElements(By.xpath(".//*"));

    System.out.println("list of element before swiping has been read");
    MobileElement lastElement = lAllElements.get(lAllElements.size()-1);

    //scroll and then again read the list of all elements.
    //read the last element on the list and then compare the elements on above 2 steps. 
    //if the elements are different than return true else false.
    swipeScreen(driver);
    List<MobileElement> lAllElementsAfterSwipe = this.driver.findElements(By.xpath(".//*"));
    System.out.println("list of element after swiping has been read");
    MobileElement lastElementAfterSwipe = lAllElementsAfterSwipe.get(lAllElementsAfterSwipe.size()-1);

    if (lastElementAfterSwipe.equals(lastElement))
        isNewElementLoaded = false;
    else
        isNewElementLoaded = true;
    return isNewElementLoaded;

}

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вместо того, чтобы сопоставлять последний элемент перед проведением и первый элемент после проведения, вы должны проверить, отображается ли требуемый элемент на странице, проверив размер его списка.

Допустим, на вашей странице есть 4 элемента, и после загрузки отобразится 5-й элемент, в соответствии с вашим подходом вы будете проверять, что 5-й элемент не совпадает с 4-м элементом, и вы пройдете тестслучай, однако это не даст вам уверенности в том, что отображаемый элемент был тем элементом, который вы искали, потому что этот 5-й элемент может быть любым другим элементом, который не должен отображаться на странице, но следуя вашей логике,контрольный пример прошел бы.

Итак, вы должны получить xpath искомого элемента, а затем после каждого пролистывания проверять размер списка элементов, так как размер списка элементов будет больше 0, когда он будет отображаться на странице, иВы должны ограничить свайп пределом, чтобы после этого количества свипов вы возвращали логическое значение как ложное, иначе цикл будет продолжаться в бесконечном состоянии для проверки наличия элемента.

Ваш кодлогика должна быть примерно такой:

List<WebElement> element = driver.findElements(By.xpath("mention the xpath of the element that needs to be found"));
boolean elementLoaded = false;
int swipeCount = 0;
// Taking the swipeCount limit as 5 here
while (!elementLoaded && swipeCount < 5) {
    if (element.size() == 0) {
        // Swipe the screen
        swipe(driver);
        swipeCount++;
    } else {
        elementLoaded = true;
    }
}
return elementLoaded;
0 голосов
/ 16 февраля 2019

Вместо того, чтобы хранить все элементы и сравнивать их со следующим состоянием, просто получите один элемент после следующей прокрутки, убедитесь, что этот элемент не должен отображаться на экране

Примечание: хотя у меня нет большого контекста в вашем приложении

...