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+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

CPython与PyPy解释器架构的性能测试结果对比

《CPython与PyPy解释器架构的性能测试结果对比》Python解释器的选择对应用程序性能有着决定性影响,CPython以其稳定性和丰富的生态系统著称;而PyPy作为基于JIT(即时编译)技术的替... 目录引言python解释器架构概述CPython架构解析PyPy架构解析架构对比可视化性能基准测试测

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置

C#自动化生成PowerPoint(PPT)演示文稿

《C#自动化生成PowerPoint(PPT)演示文稿》在当今快节奏的商业环境中,演示文稿是信息传递和沟通的关键工具,下面我们就深入探讨如何利用C#和Spire.Presentationfor.NET... 目录环境准备与Spire.Presentation安装核心操作:添加与编辑幻灯片元素添加幻灯片文本操

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方