【问题标题】:How to detect swipe completion in Appium如何在 Appium 中检测滑动完成
【发布时间】:2018-07-19 02:52:15
【问题描述】:

Android 有一个swipe container 视图,我用 Appium 滑动它来刷新 ListView。如何使用 Appium 来检测滑动的完成?

编辑

抱歉,我的问题不清楚。我想要一种方法让 Appium 不检测滑动手势何时完成,而是何时完成刷新动画。也许我应该问一个单独的问题。

【问题讨论】:

  • 如果您知道最后的元素名称或文本,则每次擦除后您都可以检查特定的元素名称或文本。我遇到了同样的问题,我已经通过这种方式进行了管理。

标签: appium appium-android


【解决方案1】:

我曾经有过类似的情况。所以我把我所有的屏幕元素都放在了 PageObject 设计模式中。因此,在每次滑动之后,我都会重新初始化屏幕,并通过该逻辑重新初始化其所有元素,并且可以肯定的是,我已经检查了某个元素是否已加载到该屏幕上,因此在伪代码中将如下所示:

public void checkSwipeScreen(){
    swipe(driver, DIRECTION.LEFT, 5);
    Screen screen = new Screen(driver);
    Assert.assertTrue(screen.elementIsLoaded(button), "Screen is not loaded properly");
}

因此,如果在您的新屏幕上加载了所有/一个元素,则滑动是成功的。

使用最后一个参数您可以控制滑动是否更长(持续时间长)。

如果你喜欢,这里是滑动方法:

public static void swipe(MobileDriver driver, DIRECTION direction, long duration) {
    Dimension size = driver.manage().window().getSize();

    int startX = 0;
    int endX = 0;
    int startY = 0;
    int endY = 0;

    switch (direction) {
        case RIGHT:
            startY = (int) (size.height / 2);
            startX = (int) (size.width * 0.90);
            endX = (int) (size.width * 0.05);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(endX, startY)
                    .release()
                    .perform();
            break;

        case LEFT:
            startY = (int) (size.height / 2);
            startX = (int) (size.width * 0.05);
            endX = (int) (size.width * 0.90);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(endX, startY)
                    .release()
                    .perform();

            break;

        case UP:
            endY = (int) (size.height * 0.70);
            startY = (int) (size.height * 0.30);
            startX = (size.width / 2);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(endX, startY)
                    .release()
                    .perform();
            break;


        case DOWN:
            startY = (int) (size.height * 0.70);
            endY = (int) (size.height * 0.30);
            startX = (size.width / 2);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(startX, endY)
                    .release()
                    .perform();

            break;

    }
}

和枚举

public enum DIRECTION {
    DOWN, UP, LEFT, RIGHT;
}

希望这会有所帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2021-02-28
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2015-08-15
    • 2015-05-13
    相关资源
    最近更新 更多