首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用Espresso规则时,不能在Activity的finish()方法中做UI工作吗?

当使用Espresso规则时,不能在Activity的finish()方法中做UI工作。Espresso是一个用于Android应用程序UI测试的开源框架,它提供了一组API和工具,用于编写可靠、稳定和可维护的UI测试。在Espresso中,测试用例是在主线程上执行的,而UI工作通常是在主线程上进行的。

在Activity的finish()方法中进行UI工作可能会导致Espresso测试失败或产生不可预测的结果。这是因为当调用finish()方法时,Activity将被销毁,而UI工作可能无法完成或引发异常。Espresso测试框架无法处理这种情况,因此建议避免在finish()方法中进行UI工作。

如果需要在Activity即将被销毁时执行UI工作,可以考虑使用其他生命周期方法,如onPause()或onStop()。这些方法在Activity即将进入后台或不可见状态时调用,可以安全地进行UI工作。

总结:

  • 当使用Espresso规则时,不建议在Activity的finish()方法中进行UI工作。
  • Espresso测试框架无法处理在finish()方法中进行的UI工作,可能导致测试失败或产生不可预测的结果。
  • 可以考虑使用其他生命周期方法,如onPause()或onStop(),来执行UI工作。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发者UI自动化测试上手指南

其实从下面的图就能解释一切,程序员这个职业存在意义不就是最大化利用机器,通过自动化来完成工作? ? 作为软件开发者需求很明显,需要对自己开发功能进行验证,总是需要反复调试后才能提测。...比如说,作为用户并不关心某个网络请求返回值具体数据是否正确,我关心能在UI上看到希望看到结果。 基于此,各个测试用例一个通用思路就是:找到某个元素,一些操作,检查结果。...一些Espresso主要方法 UI自动化具体实例 这里建议参照官方文档给出步骤进行实践,示例给出自己在实践demo配置自动化测试基本步骤。...如果允许测试需要较大消耗,可以使用@LargeTest注解 设置ActivityTestRule用来指明被测试Activity使用@Rule注解。...运行测试用例时会自动启动到对应Activity,并且通过ActivityTestRule示例获取到被测试Activitycontext。

82520

腾讯TMQ在线沙龙回顾|UI自动化阶思考与实践

分享主题 1.UI自动化会存在哪些问题 2.从设计、环境、细节三个角度分析和解决问题 3.总结UI自动化使用姿势 问答环节 1、可以多个UI自动化框架组合使用,能举一个实际例子,最好是结合实际问题...H5页面更新较多的话,这部分建议不考虑自动化,UI自动化主要针对功能稳定用例来。 5、请问下对应用悬浮窗和toast有什么好抓取和验证方式? 答:Espresso可以抓取到toast。...12、我们项目的 发现webviewwebElementclick生效。只好获取绝对坐标,然后点击屏幕绝对左边。使用appium。有其他解决建议? 答:有以下两种值得一试方案。‍...如果通过查表表应该有哪些信息,我之前做法是通过activity+页面标题,但发现很多页面标题以及activity都一样?...答:建议使用appium性能相关测试,框架本身问题无法避免,只能换一种框架。性能测试的话,我建议用uiautomator和espresso来驱动会更好。

1.5K90

Espresso浅析和使用

Google希望,Android开发者利用Espresso写完测试用例后,能一边看着测试用例自动执行,一边享受一杯香醇Espresso(浓咖啡)。...2.0这个视频中提到了2个写测试用例注意项: 避免Activity层级跳转,测试用例尽量只在单个Activity内完成。...Activity层级跳转越多,越容易出错 强烈推荐,直接获取View对象,调用View方法来模拟用户操作。...应该统一使用Espresso提供方法 测试用例,特别是UI自动化测试用例,应该尽量保持逻辑简单,覆盖关键路径就足矣。因为UI变动是很频繁,越复杂,维护成本就越高,投入产出比就会自然降低了。...原因是,Espresso用例运行过程是只有当UI线程IDLE和UI队列没有需要执行事件Espresso测试代码才会被执行。使用方无需写Sleep逻辑等待UI绘制完成。

2.3K00

Espresso 遇见 Android 单元测试

Activity& Espresso Activity是承载UI控件Android基本组件,Espresso则是可操作ActivityGoogle原生UI自动化框架。...1、将UI控件放入Activity(xml配置); 2、添加一个输入框(也可用Spinner)和按钮用来提交命令,不同命令控制UI控件调用不同函数,Activity制作完成; 3、使用Espresso...因为Android更改UI能在UI线程中进行,所以改变控件属性代码只能写在Activity代码,而不是Espresso测试代码。...Activity解析到输入为getViewDate命令,执行show.setText(mTimePicker.getViewDate()),将获取UI控件当前时间显示在了id为showTextView...总结 综上,不同角色处理不同事务。 Activity显示UI控件、解析命令与调用UI控件函数。

2.5K10

Android 单元测试和 UI 测试初步实践

通常大型项目都是通过黑盒测试等方式来提供质量相关保障,但同时笔者认为也需要 Android 端单元测试以及能自动在 Android 平台上运行 UI 测试,这几种测试有以下几个优势: 更早发现代码存在...所谓 mock 就是创建一个类虚假对象,在测试环境,用来替换掉真实对象,以达到验证对象方法调用情况,或是指定这个对象某些方法返回特定值等; @Before 注解方法会在执行测试用例之前执行...,所以在代码前两行笔者通过 Mockito when() 方法,在程序调用 DataManager#getNews() 方法返回一个空 NewsResultBean 实例。...通常来说,大多数 APP 在设计业务功能过程,会有很多异步任务,例如使用 Rxjava 发起网络请求等,但是 Espresso 并不知道你异步任务什么时候结束,如果单纯使用 Thread.sleep...,主要依靠 match() 方法返回对应匹配类,Espresso 也自带很多已封装好 View Matchers 供使用 以链式代码形式编写验证测试结果代码,例如 onView(withId(R.id.toolbar

2K10

Android利用Espresso进行UI自动化测试方法详解

为什么需要UI自动化测试? 我有一个观点,对于重复工作,那么程序都是可以代替,我想这是作为一个程序员一个基本素养(能偷懒绝不干活)。...UI自动化测试就是为了应付一些重复工作,比如说测试某个功能,那么从应用点击,再经过一系列点击页面才能到达这个页面,然后进行测试,那么我们是不是可以写段代码让app自动跑起来,自动来到那个界面进行测试呢...用来指明被测试Activity使用@Rule注解 测试方法必须以 test 开头,并且使用@Test注解(否则会报找不到方法异常) @Rule @Rule public ActivityTestRule...ViewMachers 查找View 使用onView方法找到view:其中参数可以是withId(通过资源id查找),withText(通过显示内容查找)有多个约束条件,可以使用allOf 如allOf...如果要测试AdapterView ,比如 ListView 或GridView等,使用上面的onView()方法是无效,因为AdapterView布局item是动态呈现,没法直接指定,所以要测试

2.3K10

浅谈 Android 自定义锁屏页发车姿势

Android系统实现自定义锁屏页思路很简单,即在App启动开启一个service,在Service时刻监听系统SCREEN_OFF广播,屏幕熄灭,Service监听到广播,开启一个锁屏页Activity...使用该标志位,也需要在AndroidManifest声明taskAffinity,即新task名称,否则锁屏Activity实质上还是在建立在原来Apptask栈。   ...上述方法已经推荐使用,可以使用更好方法来替代。我们在自定义锁屏ActivityonCreate()方法里设定以下标志位就能完全实现相同功能: ?   ...值得注意是,目前setTranslationX方法能在Android 3.0以上版本使用,如果采用动画兼容库nineoldandroidViewHelper类提供setTranslation方法...我们在这几个方法相应处理即可,在onAuthenticationSucceeded()方法调用finish(),就能够在指纹识别成功后关闭Activity

3.8K91

【Jetpack】DataBinding 架构组件 ( 数据绑定技术简介 | Android DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 )

Model 与 用户界面 View 进行绑定 ; 用户界面 修改 数据 , 会自动更新到 数据模型 ; 数据模型 数据 改变 , 用户界面 数据会自动更新 ; 数据绑定 可以 使代码...布局文件 UI 组件 与 数据模型 Model 进行绑定 ; 用户 通过 UI 组件 修改数据 , 会将数据自动更新到 数据模型 ; 数据模型 数据 改变 , 会自动更新到 UI...组件 ; 使用 DataBinding 可以在 Android 布局文件 , 承担部分 Activity 组件工作 , 减少传统方式用法 耦合度 ; 如 : 想要将 数据设置到 TextView...:espresso-core:3.4.0' } 在 build.gradle 构建脚本 , 设置 dataBinding { enabled = true } 后 , 第一间点击右上角 Sync..., 为组件设置 tools:text 属性 , 该属性只能在 Design 视图中查看 , 方便开发调试 , 不会显示在最终应用 ; 在布局文件 , 使用 @{student.变量名} 获取该数据类型对象成员

1.3K20

浅谈Android自定义锁屏页发车姿势

Android系统实现自定义锁屏页思路很简单,即在App启动开启一个service,在Service时刻监听系统SCREEN_OFF广播,屏幕熄灭,Service监听到广播,开启一个锁屏页Activity...使用该标志位,也需要在AndroidManifest声明taskAffinity,即新task名称,否则锁屏Activity实质上还是在建立在原来Apptask栈。...上述方法已经推荐使用,可以使用更好方法来替代。...值得注意是,目前setTranslationX方法能在Android 3.0以上版本使用,如果采用动画兼容库nineoldandroidViewHelper类提供setTranslation方法...我们在这几个方法相应处理即可,在onAuthenticationSucceeded()方法调用finish(),就能够在指纹识别成功后关闭Activity

2.2K80

Android基础 | 关于Activity你应该明白一切

这个方法调用时机是在 onStop 之前,它和onPause 没有既定时序关系,有可能在onPause之前调用,也有可能在 onPause之后调用。...Actiivty 被重新创建后,系统会调用 onRestoreInstanceState, 并且吧 Activity 销毁 onSaveInstanceState 方法保存 Bundle 对象作为参数同时传递给...onSaveInstanceState与ViewModel 在上面我们知道,Activity因为异常情况发生重建,系统会主动调用 onSaveInstanceState 方法来进行保存,但需要注意是...ViewModel 可以代理复杂数据加载,也可以作为临时存储位置,但是不能在手动 finish 进程存留,它意义更多是实现 系统状态更改时,实现数据保留,而不是ui状态保留。...category是一个字符串,系统也为我们预制了一席,对于在 已经定义匹配规则,在Intent 存在categoty必须全部符合已经定义了规则,当然也可以填,如果Intent没有包含,系统会为我们默认带上

66720

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

注意,很多 UI 数据会自动地被保存和恢复: “该方法默认实现保存了关于 activity 视图层次状态临时信息,例如 EditText 控件文本或者 ListView 控件滚动条位置。”...ViewModel 只能在配置更改相关销毁情况下保留,而不能在被终止进程存留。...每一种都会存储 activity使用不同数据: 本地持久化是用于存储打开或关闭 activity 所有你不想丢失数据。 举例: 包含了音频文件和元数据所有音乐对象集合。... activity 被创建时候 — 可能出现三种不同方式: Activity 是第一次被创建:在这种情况下,onSaveInstanceState()方法 bundle 里是没有数据,ViewModel...ViewModel 不是 onSaveInstanceState() 替代品,因为他们在与配置更改相关销毁保存数据,而不能在系统杀死应用进程保存。

3.7K30

Android编程权威指南笔记3:Android Fragment讲解与Android Studio依赖关系,如何添加依赖关系

fragement视图包含了用户可以交互可视化UI元素。 片段是一个应用程序用户界面或行为,可以放在一个Activity。...中使用并且处理自己输入事件以及生命周期方法等。...这个步骤在以后代码,你也可以看到,或者你打过,我这里也打过。 创建一个动态UI:FragmentManager提供了对Activity运行时Fragment添加、删除、替换操作。...多个Fragment之间通信:两个单独Fragment之间是不应该进行通信。应该使用他们所存在Activity作为沟通纽带。 Fragment类可以用很多方法来实现各种各样结果。...虽然Fragment定义了自己生命周期,但是该生命周期取决于其活动:如果活动停止,则不能启动其中碎片; 活动被破坏,所有碎片将被破坏。

1.8K30

【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

答:,放弃是不可能,丢了Android,你会心疼?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦,有人说,喜欢一个人是幸福。...AndroidManifest.xml文件下manifest为根标签,属性xmlns:android和package为指定了Android命名空间,表示各种标准属性能在xml文件中使用和package...答:用户界面用户看程序视图界面,简称UI,用视图表示,在Android为View,是负责提供组件绘制和事件处理,是所有UI组件基类~ 嗯,先来了解一下Activity,生命周期,创建,配置,启动...处于onStop()方法,如果内存低,会被process is killed,然后进行onCreate(),另一种activity再次返回前台时调用onRestart()方法进入onCreate...; 三:关闭finish()方法可关闭当前activity

1.2K20

分层测试

现在为了腾讯视频增值团队分层测试,了解了一些内部和外部自动化框架,他山之石可以攻玉,这里列出来和大家一起学习。 自动化认识 ---- 为什么要建设自动化? 主要当前QA工作存在众多痛点。...因为UI自动化是最接近用户一层,UI自动化测试通过,对于交付给用户使用系统才有信心是完善,这是其他层自动化所难以达到。...由于不支持iOS设备,自动化测试同时覆盖 android与iOS情况,测试会被中断。没有内置记录和回放功能....UI Automation是Apple官方提供UI自动化测试解决方法,但接口不够丰富。...由于不支持iOS设备,自动化测试同时覆盖 android与iOS情况,测试会被中断。没有内置记录和回放功能.

5.7K63

一个实例学习Kotlin 开发 Android App 全过程(内有代码)

图1 列出省级及其所辖城市和县区信息 单击某个城市或县区名称,会在窗口上显示该城市或县区天气情况,如图2所示。 ?...图2 显示天气情况 这款App使用前面章节介绍UI技术、网络技术,并且使用Kotlin语言编写。其中有一些Library使用了Java编写,实际上,这款App是Kotlin和Java结合体。...实际上,Fragment是从Android 3.0开始加入类,相当于一个透明Panel,用于封装逻辑和UI,可以作为一个组件使用。...第4个方法用于分析描述天气信息JSON数据,而且未使用Android SDK标准API进行分析,而是使用了gson开源库对JSON数据进行分析,并返回一个Weather对象,Weather类与其他相关类定义需要符合...以上内容实现了一个Android App,尽管这个App不算大,但完全可以演示使用Kotlin开发Android App完整过程。本章实现App综合使用UIActivity、布局、网络等技术。

4.7K50

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

注意,很多 UI 数据会自动地被保存和恢复: “该方法默认实现保存了关于 activity 视图层次状态临时信息,例如 EditText 控件文本或者 ListView 控件滚动条位置。”...ViewModel 只能在配置更改相关销毁情况下保留,而不能在被终止进程存留。...每一种都会存储 activity使用不同数据: 本地持久化是用于存储打开或关闭 activity 所有你不想丢失数据。 举例: 包含了音频文件和元数据所有音乐对象集合。... activity 被创建时候 — 可能出现三种不同方式: Activity 是第一次被创建:在这种情况下,onSaveInstanceState()方法 bundle 里是没有数据,ViewModel...ViewModel 不是 onSaveInstanceState() 替代品,因为他们在与配置更改相关销毁保存数据,而不能在系统杀死应用进程保存。

95320

Android APP 快速 Pad 化实现

这样既让 Acitvity 拥有多进程特性,又让他们看起来就像是在同一个 Activity 操作。咦,这不是我们方案1?...既然能解决方案1问题,为什么直接全部使用方案1呢?还要把Activity转为Fragment干嘛?...1,实现问题,使用多Task实现方式,在Android需要声明ActivityTaskAffinity,而 TaskAffinity 不能在代码动态声明,而只能写在配置文件,导致不同Tab打开同一个...2,Fragment 模拟 Activity 行为 模拟 Activity finish 方法 BasePadActivity.java public void finish() {...提供一个独特名称,使用 Intent.FLAG_ACTIVITY_NEW_TASK 标志 Activity,并为该 Activity 声明一个独特 TaskAffinity ,该 Activity

2.1K60

Gradle For Android(6)--测试单元

执行这任务时候,会出现java.lang.RuntimeException: Stub!错误。为了修复这个错误,我们需要手动实现每个Android SDK方法,或者使用mocking框架。...这也就意味着它不需要在设备或者虚拟机上使用Android资源了。因此,这样也会对于APP或者LibraryUI组件表现测试会更加快速。...Functional tests 功能测试用来测试App一些组件是否与预期一样进行工作。...例如,你可以创建一个功能性测试:点击一个Button打开一个新Activity。Android提供了一些功能性测试框架,但是最简单还是使用Espresso框架。...而生成这个报告任务名为createDebugCoverageReport。即使它没有在文档记录,并且也没有在task列表,而当你执行gradlew tasks,它就会直接运行

1.7K40
领券