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

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮