如何滚动到Appium视口之外的元素?

时间:2020-05-19 07:25:09

标签: appium appium-android

我将uiautomator2的appium java客户端用作android的自动化引擎。该应用程序具有一个scrollview,我需要从中获取TextView的文本。加载屏幕时,其中一些位于视口内,而某些位于视口外。如何以正确的方式获取节点的文本?现在,我有一个特定的测试设备,在该设备上我知道哪个元素可见,哪个元素不可见。因此,对于以后的操作,我实现了向下滚动到的scrollTo方法。

我看到了保持滚动直到元素进入视口的解决方案。我不喜欢它,因为它会妨碍测试的性能。因为测试在下一次滚动之前仍可能会等待一个元素,而时间却被浪费了。

有什么更好的策略来解决这个问题?我们使用的是pagefactory模式,并且主要使用xpath,可访问性标签和id来标识元素。如果有帮助,被测试的应用程序是本地本机应用程序。

1 个答案:

答案 0 :(得分:1)

我建议为此使用UiScrollable

如果使用页面对象模式和@AndroidFindBy批注,则只需输入:

@AndroidFindBy(uiSelector = "UiScrollable(\"className(\"android.widget.ScrollView\")\").scrollIntoView(resourceId(\"id_of_element_to_scroll_to\"))")
private MobileElement buttonOfTheScreen;

在这里您需要定义两个定位符:

  • 将要滑动的元素之一,在上面的示例中,将其称为 swipe base -className(\"android.widget.ScrollView\")
  • 第二个定位符用于屏幕外的元素-resourceId(\"id_of_element_to_scroll_to\")

不需要其他操作。一旦您需要与您的元素互动,例如getText()click(),uiautomator将自动滑动到它。

或者,您可以使用:

String locator = "UiScrollable(\"className(\"android.widget.ScrollView\")\").scrollIntoView(resourceId(\"id_of_element_to_scroll_to\"))";
driver.findElement(MobileBy.AndroidUIAutomator(locator)).click();

注意:仅当您要查找的元素位于屏幕底部边缘下方时,此方法才有效。