【问题标题】:UiScrollable scrollIntoView stops just before scrolling into viewUiScrollable scrollIntoView 在滚动到视图之前停止
【发布时间】:2020-01-21 14:39:50
【问题描述】:

我为安卓测试创建了以下UiScrollable 包装:

protected fun UiScrollable.ensureScrolledIntoView(elementToScrollTo: UiObject) {
    val elementPresent = scrollIntoView(elementToScrollTo)
    if (!elementPresent) {
        Assert.fail("Expected element ${elementToScrollTo.selector} not found in scroll view")
    }
}

我相信包装器本身不是问题,但有时scrollIntoView 无法进行最后一次需要的滚动滑动。最好是举例说明:

给出错误:

java.lang.AssertionError: 预期元素 UiSelector[CLASS=android.widget.LinearLayout,DESCRIPTION=May, 孩子=UiSelector[TEXT=7, RESOURCE_ID=com.maypackage.android:id/calendar_day_text_view]] 不是 在滚动视图中找到

显然,它的任务是滚动到 5 月 7 日。

当我搜索将通过向上滚动找到的日期时,有时会发生同样的情况:该方法仅返回一个短滚动并且未找到该元素。

有人遇到过这样的问题吗?如何克服?

【问题讨论】:

    标签: android scroll automated-tests android-uiautomator


    【解决方案1】:

    编辑

    经过更多实验后,我发现问题在于屏幕上的元素消耗了某些滚动尝试。这在浮动按钮的情况下最容易体验,但问题的情况显示了更模糊的相同示例。在大多数情况下,UiScrollable 上的 setSwipeDeadZonePercentage 对我有用。此方法告诉可滚动对象存在不应进行滑动尝试的特定区域。这解决了溢出按钮的问题。对于比较模糊的情况,我使用下面的方法,仍然不能保证一直有效,但在我的情况下是稳定的。

    老,原来的答案:

    最终,经过多次试验,我发现框架错误更为通用,并且不需要在元素出现在视图中之前触发停止。坦率地说,我认为问题在于scrollForward 方法的不稳定行为,该方法在scrollIntoView 方法内部使用。最终我重写了我的方法如下:

    protected fun UiScrollable.ensureScrolledIntoView(elementToScrollTo: UiObject) {
        // this method used to use scrollIntoView, but it proved unstable
        if (elementToScrollTo.exists()) return
        while (scrollBackward()) {
            // no body needed
        }
    
        // very complex construct, because scroll forward seems to return false on first call
        var consecutiveFailingScrolls = 0
        while (consecutiveFailingScrolls < 2) {
            if (elementToScrollTo.exists()) return
            if (!scrollForward()) {
                consecutiveFailingScrolls++
            } else {
                consecutiveFailingScrolls = 0
            }
        }
        Assert.fail("Expected element ${elementToScrollTo.selector} not found in scroll view")
    }
    

    这基本上是为了解决框架的不稳定性,到目前为止它还没有让我失望。顺便说一句,我怀疑scrollIntoView 的不稳定性只有在我们滚动延迟加载组件(如回收站视图)时才会出现。目前我打算继续使用非延迟加载列表的库方法,看看是否遇到更多错误。

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      相关资源
      最近更新 更多