【问题标题】:How to scroll to an element which is not inside the viewport in Appium?如何滚动到不在 Appium 视口内的元素?
【发布时间】:2020-05-19 07:25:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: appium appium-android


    【解决方案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();
    

    注意:此方法仅适用于您要查找的元素位于屏幕底部边缘下方的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2016-12-09
      • 2017-06-19
      • 1970-01-01
      • 2020-02-25
      • 2019-12-25
      • 2020-12-17
      相关资源
      最近更新 更多