在 appium 中使用触摸操作向下滚动移动应用程序时显示异常

Showing exception when scroll down mobile app using touch action in appium

我试图向下滚动移动应用程序以单击 screen.I 下方的按钮 已使用下方触摸操作进行滚动,但它给出了 exception.Is 还有其他方法可用吗?任何人都请帮助我向下滚动移动应用程序。

显示异常

线程中出现异常 "main" org.openqa.selenium.InvalidElementStateException:滑动未成功完成

DesiredCapabilities androidCapabilities = new DesiredCapabilities();
AppiumDriver<MobileElement> appiumDriver;
androidCapabilities.setCapability("automationName",PropertyUtility.getProperty("AndroidAutomationName"));       androidCapabilities.setCapability("platformName",PropertyUtility.getProperty("AndroidPlatformName"));
    androidCapabilities.setCapability("platformVersion", PropertyUtility.getProperty("AndroidPlatformVersion"));
    androidCapabilities.setCapability("deviceName", PropertyUtility.getProperty("AndroidDeviceName"));
    androidCapabilities.setCapability("app",PropertyUtility.getProperty("AndroidAppPath"));
    androidCapabilities.setCapability("noReset", true);
    androidCapabilities.setCapability("newCommandTimeout", "60");
    appiumDriver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), androidCapabilities);

    Dimension dim=appiumDriver.manage().window().getSize();
    System.out.println(dim);
    int x=dim.getWidth()/2;
    int startY=(int) (dim.getHeight()*(.8));
    int endY=(int) (dim.getHeight()*(.2));
TouchAction action=new TouchAction(appiumDriver);
action.press(PointOption.point(x,startY)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))).moveTo(PointOption.point(x, endY)).release().perform();

配置

appium 1.15 java 客户端:7.3.0

您可以执行滚动以查找特定元素,如下所示:

public void scrollToElementByText(String text) {
        try {
            ((AndroidDriver)driver).findElementByAndroidUIAutomator("newUiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"" + text + "\").instance(0))");
        } catch (Exception e) {
            ...
        }
    }

显然,您可以使用任何属性来查找元素(id、可访问性 id 等),然后在该元素上 click()。或者您可以简单地向下滚动并检查要显示的元素,如果没有,请继续向下滚动:

private void swipe(int xStart, int yStart, int xStop, int yStop) {
    try {
        new TouchAction(driver)
                .press(point(xStart, yStart))
                .moveTo(point(xStop, yStop)).release().perform();
    } catch (Exception e) {
       ...
    }
}

public void scrollDown() {
    swipe(5,
            (getWindowSize().getHeight()) - 200,
            5,
            100);
}

public void scrollToElement(MobileElement el) {
    while (true) {
        if (!el.isDisplayed()) {
            //element is not displayed, keep scrolling
            scrollDown();
        } else {
            //element found
            break;
        }
    }
}

但是要小心,因为你可以用最后一个方法得到无限循环(实现你自己的逻辑来打破那个循环)。