检查在移动屏幕上滑动是否加载新元素

问题描述 投票:2回答:2

在我们的移动应用程序中,我们有几个屏幕,我们需要在屏幕上滑动以查看元素或滑动加载新元素。在我们的代码中,每当我们检查元素是否存在时,我们调用一种方法来检查屏幕上的当前元素集,然后滑动并在刷完后再次读取屏幕上的所有元素。现在,比较两个列表中的最后一个元素,以检查是否加载了新元素。如果没有加载新元素,那么我们得出结论,我们正在寻找的元素没有加载到屏幕上。下面是我为此目的编写的代码。此代码应标识刷卡是否正在加载新元素。

问题在于我正在阅读所有元素并加载到列表的步骤。此步骤变得非常繁重,有时会使代码执行超过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;

}
java selenium appium appium-ios appium-android
2个回答
1
投票

在刷卡之前匹配最后一个元素而不是在滑动之后匹配第一个元素,您应该通过检查其列表大小来检查页面上是否显示了所需元素。

让我们说你的页面上有4个元素,加载后会显示第5个元素,按照你的方法进行检查,你将检查第5个元素与第4个元素是否相同,你将通过测试用例,但这不会确保显示的元素是您正在寻找的元素,因为第5个元素可以是任何其他元素,不是要在页面上显示,而是按照您的逻辑,测试用例将通过。

因此,你应该得到你正在寻找的元素的xpath,然后在每次滑动之后你应该检查元素列表大小,因为元素列表大小在页面上显示时会大于0,你应该限制滑动到一个限制,以便在该次数的滑动之后,您应该将布尔值返回为false,否则循环将以无限状态继续以检查元素的存在。

你的代码逻辑应该是这样的:

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
投票

而是存储所有元素并比较下一个状态,只需在下一个滚动后获取一个元素,确保该元素不应出现在屏幕中

注意:虽然我的应用程序没有太多上下文

© www.soinside.com 2019 - 2024. All rights reserved.