Appium:如何向左滑动列表视图项目

时间:2019-01-22 16:16:38

标签: java appium ui-automation

我有一个Android应用,其中我的活动包含列表视图。我正在使用自动化测试用例进行滑动以删除列表视图项。我已经编写了以下代码来获取列表视图:

    List<WebElement> list = driver.findElements(By.id("com.xyz.email:id/conversation_list_view"));        
    list.get(0).click();

该代码应单击第一个列表视图项,但无法按预期工作。

我写了另一个代码以滑动删除列表视图项:

MobileElement emailCell = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.ListView/android.widget.FrameLayout/android.view.View");
    androidPhone.swipeOnElement("left", emailCell);

我准备好一个名为“ swipeOnElement”的函数,该函数从右向左滑动项目。

    Dimension size = driver.manage().window().getSize();

    double endX = 0;
    double endY = 0;

    int elementX = element.getCenter().x;
    int elementY = element.getCenter().y;
    int finalX;
    int finalY;

    switch (direction) {
        case "left":
            endX = size.width;
            break;

        case "right":
            endX = 0;
            break;

        case "up":
            endY = 0;
            break;

        case "down":
            endY = size.height;
            break;
    }
    if (direction == "left" | direction == "right") {
        finalX = (int) endX;
        finalY = elementY;
    } else {
        finalX = elementX;
        finalY = (int) endY;
    }
    System.out.println("startY=" + elementY);
    System.out.println("startX=" + elementX);
    System.out.println("endY=" + finalY);
    System.out.println("endX=" + finalX);

    new TouchAction(driver)
            .press(element)
            .waitAction(300)
            .moveTo(finalX, finalY)
            .release()
            .perform();
    delay(1000);

此功能很好。运行良好。但是,当我在列表视图项上尝试它时,它无法按预期工作。我不知道为什么会这样。请帮忙!!!

2 个答案:

答案 0 :(得分:0)

在这里我找到了解决方法:

有一个名为TouchAction的类,您必须在其中以功能链的形式提供参数和函数。

new TouchAction(driver)
            .press(mobileElement)
            .waitAction(300)
            .moveTo(0,100)
            .release()
            .perform();

此处驱动程序是AppiumDriver的对象,而mobileElement是MobileElement的对象。 moveTo函数正是整个刷卡动作的基础。它需要滑动的开始位置和结束位置。

答案 1 :(得分:-1)

尝试

swipeLeft(MobileElement mobileElement) {
        LOGGER.info("Swiping Left ...");
        Dimension size = getWindowSize();
        int x1 = (int) (size.width * 0.01);
         new TouchAction(driver).press(mobileElement).waitAction(Duration.ofSeconds(1)).moveTo(x1,0).release().perform();
    }