如何在Appium中滚动到一个不在视口内的元素?

问题描述 投票:0回答:1

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

我已经看到了保持滚动直到元素进入视口的解决方案。我不喜欢这种方法,因为它会影响测试的性能,因为测试可能在滚动之前仍然在等待一个元素,而这些时间只是被浪费了。

有什么更好的策略来处理这个问题?我们使用的是pagefactory模式,主要使用xpath、accessibility label和id来识别元素。如果有帮助的话,测试中的应用是一个react native应用。

appium appium-android
1个回答
1
投票

我建议使用 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()click(),uiautomator会自动刷到它。

或者,你也可以使用。

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

注意: 只有当你要找的元素在屏幕底部边缘下时,这种方法才有效。

© www.soinside.com 2019 - 2024. All rights reserved.