0

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

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

有什么更好的策略来处理这个问题?我们正在使用 pagefactory 模式,并且主要使用 xpath、可访问性标签和 id 来识别元素。如果有帮助,被测应用程序是一个反应原生应用程序。

4

1 回答 1

0

我建议为此使用UiScrollable

如果您使用页面对象模式和@AndroidFindBy注释,您可以简单地输入:

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

这里需要定义两个定位器:

  • 一个用于将被刷卡的元素,我们称之为刷卡基地-className(\"android.widget.ScrollView\")在上面的例子中
  • 第二个定位器用于屏幕外的元素 -resourceId(\"id_of_element_to_scroll_to\")

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

或者,您可以使用:

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

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

于 2020-05-19T08:08:19.747 回答