首页 > 解决方案 > Espresso doubleClick() 不适用于某些设备

问题描述

我正在使用 Espresso 编写 UI 测试。我需要在双击时测试流程,但在某些设备上没有这样做。

onView(withId(R.id.idOfView))
            .check(matches(someAssertion()))
            .perform(doubleClick())

但这会在我的Nexus 5 - API Level 23模拟器上执行单击(有时是两次单击)。有趣的解决方法

perform(click(), doubleClick())

有用。但我不确定我是否可以相信这一点。有什么我想念的吗?

标签: androidandroid-espressoandroid-instrumentation

解决方案


为了使两次单击被识别为双击,第二次单击的 DOWN 事件必须在[min, max]第一次单击的 UP 事件的毫秒内发生。min并且max可能因不同的设备而异,但我看到的值是40 ms min 和 300 ms max

A导致 a与 a 。doubleClick ViewActionGeneralClickActionDOUBLE Tapper

DOUBLE Tapper将在执行第二次点击之前等待所需的最小延迟。
您的模拟器上可能发生的情况是,在您通过最大允许延迟之前,它的运行速度不够快,无法注入第二次点击事件。

当您这样做时,在和perform(click(), doubleClick())之间可能没有任何额外的等待,因此和 的第一次单击可能最终被识别为在您的慢速模拟器上的双击。这并不能保证它可以在实际设备上运行,或者在运行速度更快的计算机上运行的模拟器上运行。clickdoubleClickclickdoubleClick


推荐阅读