我将uiautomator2的appium java客户端用作android的自动化引擎。该应用程序具有一个scrollview,我需要从中获取TextView的文本。加载屏幕时,其中一些位于视口内,而某些位于视口外。如何以正确的方式获取节点的文本?现在,我有一个特定的测试设备,在该设备上我知道哪个元素可见,哪个元素不可见。因此,对于以后的操作,我实现了向下滚动到的scrollTo方法。
我看到了保持滚动直到元素进入视口的解决方案。我不喜欢它,因为它会妨碍测试的性能。因为测试在下一次滚动之前仍可能会等待一个元素,而时间却被浪费了。
有什么更好的策略来解决这个问题?我们使用的是pagefactory模式,并且主要使用xpath,可访问性标签和id来标识元素。如果有帮助,被测试的应用程序是本地本机应用程序。
答案 0 :(得分: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();
注意:仅当您要查找的元素位于屏幕底部边缘下方时,此方法才有效。