Espresso单元测试等待界面上某个元素显示出来/某个操作完成

在使用 Espresso 进行单元测试的时候,我们需要等待被测试界面上某个元素显示出来,这个时候需要进行等待,等待的时间需要我们自行控制。

参考代码如下:

使用方式如下:

不过,更推荐使用 IdlingResource 实现上述的功能,IdlingResource适用范围更广,不仅可以实现 UI 的等待,也可以实现网络,异步调用返回,比如:Handler.postDelayed 等情况。

例子如下:

使用方式如下:

测试用例使用:

在使用 IdlingResource 进行单元测试的时候,需要注意:IdlingResource 只有被调用

的时候,才能实现等待异步资源调用完成。EspressoAPI 内部会自动调用。但是我们自己写测试用例的时候,很多时候需要手工调用这个 API 实现同步等待。如果使用 IdlingResource  的时候,结果与预期存在差异,可以尝试手工增加一下这个 API 的调用。

比如类似如下的场景:

官方提供了一个例子: IdlingResourceSample:与后台作业同步

如果存在访问问题,可以 点击此处下载一份代码的镜像。

另外,针对 Robolectric 进行 UI 测试的情况,如果需要等待 Handler.postDelayed 的事件完成,可以通过

来实现等待异步事件执行完成。

有时候,我们只是想简单的等待几秒时间,这几秒时间我们希望不影响被测试线程的执行。比如启动一个 Activity 然后等待页面初始化完成,网上看到的一种写法如下:

上述的等待方法在大部分情况下是可以正常运行的。

但是,也经常报错如下:

上述报错的原因是:由于 Activity 的启动是异步的,ViewMatchers 在尝试获取根 View 的时候,默认是获取当前顶部的 Activity ,此时可能会出现获取的 Activity 不正确,是一个即将切换到后台的 Activity 的问题,一旦这个问题发生,会出现上述的报错,导致测试失败。更详细解释,可以参考 Multi-window sample for Espresso

其实上述的代码可以用下面的代码替换:

类似的常用的等待函数:

另外目前遇到的问题还有,在 Android Studio Electric El|2022.1.1 Patch2 上点击 Debug 可以正常运行测试用例,但是点击 Run 就会测试失败,报错如下:

貌似重启手机、重启Android Studio Electric El|2022.1.1 Patch2 、项目重新构建一次、用老版本的 Android Studio 4.1.3 打开一下项目然后关闭能解决,具体是哪个操作解决的暂时不清楚。

参考链接


发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注