Appium 在启动可点击元素时无法在 Android 应用程序中滚动



我的情况

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

我的问题

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

我目前的方法

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(处,则不会执行滚动/滑动,但实际上在滚动时仍会调用侦听器。

您可以借助元素的资源 ID 进行滚动。这可以通过UiAutomator2实现,因为automation engine.您需要在 desires 功能中使用自动化名称作为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();
}
}

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

相关内容

最新更新