我的情况
我想为 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();
}
}
这是一种动态方法,它将滚动直到元素不可见。