UI自动化测试学习笔记:Espresso (一) BasicSample

2023-11-02 12:08

本文主要是介绍UI自动化测试学习笔记:Espresso (一) BasicSample,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本Sample演示了键盘输入,然后点击按钮显示在同一个Activity中的TextView以及不同Activity的TextView的UI自动化测试。

界面图

BasicSample

被测试的工程项目

被测试的Sample工程很简单,一个EditView一个TextView,两个Button,键盘输入内容后,点击“CHANGE TEXT”按钮后TextView将 显示输入内容,点击“OPEN ACTIVITY AND CHANGE TEXT”按钮后将打开新的Activity并显示输入内容。

Espresso的工程项目

模拟键盘输入“Espresso”,然后对比输入字符与预期字符是否一致。一致则测试通过,不一致而显示期望值(Expect)和实际值(Got)。
全部测试通过
测试失败

完整的Sample代码

整个测试工程的代码不足100行(包括注释),所以直接贴出代码进行分析

package com.example.android.testing.espresso.BasicSample;import android.app.Activity;
import android.support.test.espresso.action.ViewActions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.test.filters.LargeTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;/*** Basic tests showcasing simple view matchers and actions like {@link ViewMatchers#withId},* {@link ViewActions#click} and {@link ViewActions#typeText}.* <p>* Note that there is no need to tell Espresso that a view is in a different {@link Activity}.*/
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ChangeTextBehaviorTest {public static final String STRING_TO_BE_TYPED = "Espresso";/*** A JUnit {@link Rule @Rule} to launch your activity under test. This is a replacement* for {@link ActivityInstrumentationTestCase2}.* <p>* Rules are interceptors which are executed for each test method and will run before* any of your setup code in the {@link Before @Before} method.* <p>* {@link ActivityTestRule} will create and launch of the activity for you and also expose* the activity under test. To get a reference to the activity you can use* the {@link ActivityTestRule#getActivity()} method.*/@Rulepublic ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);@Testpublic void changeText_sameActivity() {// Type text and then press the button.onView(withId(R.id.editTextUserInput)).perform(typeText(STRING_TO_BE_TYPED + "\n"), closeSoftKeyboard());onView(withId(R.id.changeTextBt)).perform(click());// Check that the text was changed.onView(withId(R.id.textToBeChanged)).check(matches(withText(STRING_TO_BE_TYPED)));}@Testpublic void changeText_newActivity() {// Type text and then press the button.onView(withId(R.id.editTextUserInput)).perform(typeText(STRING_TO_BE_TYPED + "\n"),closeSoftKeyboard());onView(withId(R.id.activityChangeTextBtn)).perform(click());// This view is in a different Activity, no need to tell Espresso.onView(withId(R.id.show_text_view)).check(matches(withText(STRING_TO_BE_TYPED)));}
}

代码分析

1.类注释中说明,没有必要告诉Espresso被测的view是在不同的Activity中,也就是直接使用 onView()即可获取相应的view
2.@Rule 注解是取代了ActivityInstrumentationTestCase2,是一个拦截器(interceptor),会在@Before的代码运行之前运行。
3. onView()可以根据view的id,hint,text等获取相应的view; perform()属于ViewAction,常见的click,doubleClick等; check()属于ViewInteraction,校验交互后的结果。
4.在changeText_newActivity()方法中,即使跳转了Activity,也直接使用 onView()即可获取相应的view。

运行效果

全部测试通过

注意事项

将输入法换成Android自带键盘,如果使用搜狗、百度等其他中文输入法,则需要将输入的字符串加多一个 \n,不然就会测试失败(仅获取了一个大写字母)
测试失败过

这篇关于UI自动化测试学习笔记:Espresso (一) BasicSample的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330477

相关文章

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入