如何滚动到不在 Appium 视口内的元素?
How to scroll to an element which is not inside the viewport in Appium?
我正在使用 appium java 客户端和 uiautomator2 作为 android 的自动化引擎。该应用程序有一个滚动视图,我需要从中获取文本视图中的文本。加载屏幕时,其中一些在视口内,而其中一些在视口外。如何以正确的方式获取节点的文本?现在,我有一个特定的测试设备,我知道在该设备上哪些元素可见,哪些不可见。所以为了后面,我实现了一个scrollTo方法来向下滚动到。
我看到了保持滚动直到元素出现在视口中的解决方案。我不喜欢它,因为它会影响测试的性能。因为在下一次滚动之前测试可能仍在等待一个元素,而那段时间只是浪费了。
有什么更好的策略来处理这个问题?我们正在使用 pagefactory 模式,主要使用 xpath、可访问性标签和 id 来识别元素。如果有帮助,被测应用程序是一个 React Native 应用程序。
我建议为此使用 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();
注意:只有当您要查找的元素位于屏幕底部边缘时,此方法才有效。
我正在使用 appium java 客户端和 uiautomator2 作为 android 的自动化引擎。该应用程序有一个滚动视图,我需要从中获取文本视图中的文本。加载屏幕时,其中一些在视口内,而其中一些在视口外。如何以正确的方式获取节点的文本?现在,我有一个特定的测试设备,我知道在该设备上哪些元素可见,哪些不可见。所以为了后面,我实现了一个scrollTo方法来向下滚动到。
我看到了保持滚动直到元素出现在视口中的解决方案。我不喜欢它,因为它会影响测试的性能。因为在下一次滚动之前测试可能仍在等待一个元素,而那段时间只是浪费了。
有什么更好的策略来处理这个问题?我们正在使用 pagefactory 模式,主要使用 xpath、可访问性标签和 id 来识别元素。如果有帮助,被测应用程序是一个 React Native 应用程序。
我建议为此使用 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();
注意:只有当您要查找的元素位于屏幕底部边缘时,此方法才有效。