在可点击元素上启动时,Appium 无法在 Android App 中滚动

Posted

技术标签:

【中文标题】在可点击元素上启动时,Appium 无法在 Android App 中滚动【英文标题】:Appium can't scroll in Android App when starting on clickable element 【发布时间】:2020-05-22 16:30:54 【问题描述】:

我的情况

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

我的问题

我使用标准滚动方法(见下文),只要我的 起点 的坐标不落在可点击元素上,它就可以正常工作。在使用 Appium 桌面 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),则不会执行滚动/滑动,但实际上仍然会调用滚动监听器。

【问题讨论】:

【参考方案1】:

您可以在元素的资源 ID 的帮助下滚动。这可以通过 UiAutomator2 as automation engine. 来实现,您需要在需要的功能中使用自动化名称作为 UiAutomator2

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

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();
        
    

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

【讨论】:

首先非常感谢您的快速回复!!我按照建议做了,它可以工作,但是在找到并单击所需元素之前它会上下滚动几次。无论如何,我宁愿在测试项目(Kotlin)中做更多的逻辑,而不是在服务器端执行如此长的任务(我的意思是我们作为字符串参数传递的长 java 命令)。我想因此我必须导入某种 UIAutomator2 库才能访问 UiSelector 类等......那里有这样的库吗? @ErikSchmidt,这是 UiAutomator2 的原生功能。由于我们没有告诉 uiAutomator2 引擎哪个直接元素可以是(向上和向下),因此它将使其向上和向下滚动以搜索元素。当我使用它时,我可以说它是 Appium 库中最稳定的滚动功能。我们有带有触摸动作类的选项滚动,但是我们必须循环它以进行滚动并使用 if 条件来确定每个滚动元素的可见性,并且由于它增加了复杂性,这不是可行的解决方案。 我认为你是对的。我将使用您的实现,并希望 UIAnimator2 将在当天镜像到 appium java-client 中,这样我就可以直接调用这些函数,而不是发送一个稍后作为一行 java 代码执行的 String。再次感谢您!

以上是关于在可点击元素上启动时,Appium 无法在 Android App 中滚动的主要内容,如果未能解决你的问题,请参考以下文章

使元素出现在顶部,但在可点击的下方[重复]

在可拖动元素上模拟 3 像素拖动

Appium-desktop元素定位

无法通过 Windows 10 上的 Appium 启动计算器显示错误

Appium移动端自动化:Appium-Desktp的使用以及定位元素方式总结

Appium 自动化测试 -- 在Uiautomator中查看webview元素