0

我的情况

我想为 Android 应用程序编写 UI 测试,因此我需要滚动一些应用程序的片段。测试是用 Kotlin 编写的,Appium 版本是 v1.15.1 。

我的问题

我使用标准滚动方法(见下文),只要我的起点坐标不落在可点击元素上,它就可以正常工作。在使用Appium Desktop Inspector浏览应用程序时,我也观察到了这种行为。

我目前的做法

PlatformTouchAction(driver as AppiumDriver)
            .press(PointOption.point(100, 500))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
            .moveTo(PointOption.point(100, 100))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
            .release()
            .perform()

如前所述,如果起点 (100,500)不在可点击元素上,则此方法有效。
例如,如果一个按钮恰好位于(100,500),则不会执行滚动/滑动,但实际上仍然会调用滚动侦听器。

4

1 回答 1

0

您可以在元素的资源 ID 的帮助下滚动。这可以通过UiAutomator2asautomation engine.你需要使用自动化名称来UiAutomator2实现。

UiAutomator2如果您使用 appium 作为自动化引擎,请添加所需的功能。

capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");

如果您有元素的资源 id,现在使用以下函数,如果页面上有一个元素,则索引为 0。

public void scrollByID(String Id, int index) {

        try {

             driver.findElement(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().resourceId(\""+Id+"\").instance("+index+"));")); 

        } catch (Exception e) {
           e.printStackTrace();
        }
    }

这是动态方法,它将滚动直到元素不可见。

于 2020-02-06T15:21:08.097 回答