当前位置: 首页 > news >正文

UiAutomator

运行Espresso和UI Automator测试时要使用模拟器。国内手机的ROM大多进行过修改,可能加入很多限制,导致测试无法正常运行。

Espresso只支持一个活动内部交互行为的测试。跨越多个活动、多个应用的场景需要使用UI Automator。使用Espresso和UI Automator的测试代码要保存在src/androidTest/目录下。在使用UI Automator时,首先要建立一个UiDevice对象。UiDevice对象表示一台设备。通过UiDevice你可以按下主页键、返回键,可以打开应用、选择界面上具有某个属性的控件等。

Listing 1: 获取UiDevice对象

val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

Listing 2: 通过UiDevice启动应用

val context = InstrumentationRegistry.getInstrumentation().targetContext
val intent = context.packageManager.getLaunchIntentForPackage(packageName)?.apply {addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}context.startActivity(intent)
device.wait(Until.hasObject(By.pkg(packageName).depth(0)), timeoutMillis)

Listing 3: 通过UiDevice模拟按下主页键、返回键

device.pressHome()
device.pressBack()

Listing 4: 通过UiDevice获取前台应用包名

device.currentPackageName

UiDevice提供了方法findObject(uiSelector: UiSelector):UiObject来获取界面上的某个控件。UiObject表示一个控件。UiSelector是选择控件的类。

Listing 5: 按资源id选择控件

device.findObject(UiSelector().resourceId("com.my.app:id/button_ok")

Listing 6: 按界面文字选择控件

device.findObject(UiSelector().text("click here"))

如果指定属性的控件不存在,findObject仍然会返回一个UiObject对象。此时UiObject.exists()返回false。通过UiObject可以模拟对控件的操作,比如点击click()、输入文字setText("hello, world!")等。在控件显示之前调用findObject将会得到一个exists() == false的UiObject对象。此时调用click()等方法将会引发异常。为避免此情况,可以调用UiDevice::wait或UiObject::waitForExists方法等待控件渲染完毕。

Listing 7: 使用UiDevice.wati等待控件渲染

device.wait(Until.hasObject(By.text(text)), timeoutMillis)
device.wait(Until.hasObject(By.res(packageName, "${packageName}:id/${resourceId}")), timeoutMillis)

对于RecyclerView这类的列表,可以使用UiCollection来选择其中的子元素控件。UiCollection的构造函数有一个UiSelector参数,这个参数用于选择容器(如RecyclerView)控件。通过UiCollection.getChild(UiSelector)可以获取子元素控件进行操作。从上面的介绍可以看出,UiDevice和UiObject是两个核心类,UiDevice可以对设备进行操作,UiObject可以对控件进行操作。

Table 1: UiDevice常用方法
方法说明
findObject(uiSelector):UiObject
freezeRotation()
isScreenOn()
pressBack()
pressHome()
pressMenu()
pressSearch()
setOrientationLandscape()
setOrientationLeft()
setOrientationNatural()
setOrientationPortrait()
setOrientationRight()
sleep()
takeScreenshot(storePath, scale, quality)
unfreezeRotation()
wait(condition, timeout)
wait(condition, timeout)
waitForIdle()
waitForIdle(timeout)
wakeUp()
Table 2: UiObject常用方法
方法说明
clearTextField()清除可编辑文字
click()点击
dragTo(uiObject,steps)拖拽
exists():Boolean判断存在
getChild(uiSelector):UiSelector选择子元素控件
getText()获取text属性
isCheckable():Boolean
isChecked():Boolean
isClickable():Boolean
isEnabled():Boolean
isFocusable():Boolean
isFocused():Boolean
isLongClickable():Boolean
isScrollable():Boolean
isSelected():Boolean
longClick()
performMultiPointerGesture(…)
performTwoPointerGesture(…)
setText(text)
swipeDown(steps)
swipeLeft(steps)
swipeRight(steps)
swipeUp(steps)
waitForExists(timeout)
waitUntilGone(timeout)

相关文章:

UiAutomator

运行Espresso和UI Automator测试时要使用模拟器。国内手机的ROM大多进行过修改,可能加入很多限制,导致测试无法正常运行。 Espresso只支持一个活动内部交互行为的测试。跨越多个活动、多个应用的场景需要使用UI Automator。使用Espresso和UI Automator的…...

stm32标准库开发常用函数的使用和代码说明

文章目录 GPIO(General Purpose Input/Output)NVIC(Nested Vectored Interrupt Controller)DMA(Direct Memory Access)USART(Universal Synchronous/Asynchronous Receiver/Transmitter&#xf…...

有关合泰BA45F5260中断的思考

最近看前辈写的代码,发现这样一段代码: #ifdef SUPPORT_RF_NET_FUNCTION if(UART_INT_is_L()) { TmrInsertTimer(eTmrHdlUartRxDelay,TMR_PERIOD(2000),NULL); break; } #endif 其中UART_INT_is_L&am…...

Numpy-算数函数与数学函数

⛳算数函数 如果参与运算的两个对象都是ndarray,并且形状相同,那么会对位彼此之间进 第 30 页 行( - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和divide()。 &#x1f…...

Nginx在springboot中起到的作用

面试时这样回答: 在Spring Boot项目中使用Nginx可以有以下用途: 1. 反向代理:Nginx可以作为反向代理服务器,将外部请求转发到后端的Spring Boot应用,并可以实现负载均衡、高可用、缓存等功能,提高系统的性…...

12.(开发工具篇vscode+git)vscode 不能识别npm命令

1:vscode 不能识别npm命令 问题描述: 解决方式: (1)右击VSCode图标,选择以管理员身份运行; (2)在终端中执行get-ExecutionPolicy,显示Restricted&#xff…...

如何在MacBook上彻底删除mysql

好久以前安装过,但是现在配置mysql一直出错,索性全部删掉重新配置。 一、停止MySQL服务 首先,请确保 MySQL 服务器已经停止运行,以免影响后续的删除操作。 sudo /usr/local/mysql/support-files/mysql.server stop如果你输入之…...

web攻击面试|网络渗透面试(一)

Web攻击面试大纲 常见Web攻击类型 1.1 SQL注入攻击 1.2 XSS攻击 1.3 CSRF攻击 1.4 命令注入攻击SQL注入攻击 2.1 基本概念 2.2 攻击原理 2.3 防御措施XSS攻击 3.1 基本概念 3.2 攻击原理 3.3 防御措施CSRF攻击 4.1 基本概念 4.2 攻击原理 4.3 防御措施命令注入攻击 5.1 基本概…...

VBA操作WORD(六)另存为不含宏的文档

Sub 另存为不含宏的文档()Application.DisplayAlerts False Application.ScreenUpdating FalseDim oDoc As DocumentSet oDoc Word.ActiveDocumentDim oRng As RangeSet oRng oDoc.ContentDim sPath As String默认存储路径,当前用户桌面,注释掉的是当…...

分享69个Java源码,总有一款适合您

Java源码 分享69个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接: https://pan.baidu.com/s/1ZgbJhMNwIyFyqFzHsDdL5w 提取码&a…...

《cool! autodistill帮你标注数据训练yolov8模型》学习笔记

《cool! autodistill帮你标注数据训练yolov8模型》 Summary Autodistill是一个用于自动标注数据训练边缘模型的工具。 Highlights 💡 Autodistill由Robotflow推出,用于训练建立部署计算机视觉模型。💻 通过使用大模型自动标注和训练小模型…...

Rust vs Go:常用语法对比(十)

题图来自 Rust vs. Golang: Which One is Better?[1] 182. Quine program Output the source of the program. 输出程序的源代码 package mainimport "fmt"func main() { fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)}var s package mainimport "fm…...

SliverPersistentHeader组件 实现Flutter吸顶效果

效果&#xff1a; 20230723-212152-73_Trim 代码&#xff1a; import package:flutter/cupertino.dart; import package:flutter/material.dart;class StickHeaderPage extends StatefulWidget {overrideState<StatefulWidget> createState() {// TODO: implement creat…...

Nginx性能优化配置

一、全局优化 # 工作进程数 worker_processes auto; # 建议 CPU核心数|CPU线程数# 最大支持的连接(open-file)数量&#xff1b;最大值受限于 Linux open files (ulimit -n) # 建议公式&#xff1a;worker_rlimit_nofile > worker_processes * worker_connections…...

杭州多校2023“钉耙编程”中国大学生算法设计超级联赛(4)

1003Simple Set Problem 首先将元素的值 x 以及所属集合的编号 y 作为二元组 (x,y) 存入数组&#xff0c;然后按照 x 升序排列&#xff0c; 之后使用双指针扫描数组&#xff08;尺取法&#xff09;&#xff0c;当区间内出现了所有编号时更新答案的最小值&#xff0c; #includ…...

音视频入门之音频采集、编码、播放

作者&#xff1a;花海blog 今天我们学习音频的采集、编码、生成文件、转码等操作&#xff0c;我们生成三种格式的文件格式&#xff0c;pcm、wav、aac 三种格式&#xff0c;并且我们用 AudioStack 来播放音频&#xff0c;最后我们播放这个音频。 使用 AudioRecord 实现录音生成…...

在 Linux 系统中,如何发起POST/GET请求

在 Linux 系统中&#xff0c;可以使用命令行工具 curl 或者 wget 来发送 POST 请求。这两个工具都是非常常用的命令行工具&#xff0c;可以通过命令行直接发送 HTTP 请求。 1. 使用 curl 发送 POST 请求&#xff1a; curl -X POST -H "Content-Type: application/json&q…...

文心一言大数据模型-文心千帆大模型平台

官网&#xff1a; 文心千帆大模型平台 (baidu.com) 文心千帆大模型 (baidu.com) 模型优势 1、模型效果优&#xff1a;所需标注数据少&#xff0c;在各场景上的效果处于业界领先水平 2、生成能力强&#xff1a;拥有丰富的AI内容生成&#xff08;AIGC&#xff09;能力 3、应用…...

django学习笔记(1)

django创建项目 先创建一个文件夹用来放django的项目&#xff0c;我这里是My_Django_it 之后打开到该文件下&#xff0c;并用下面的指令来创建myDjango1项目 D:\>cd My_Django_itD:\My_Django_it>"D:\zzu_it\Django_learn\Scripts\django-admin.exe" startpr…...

postgresql主从搭建

postgresql主从搭建 主从服务器分别安装好postgresql 主库 创建数据库热备帐号replica&#xff0c;密码123456为例&#xff0c;则执行以下命令 create role replica login replication encrypted password 123456;打开 pg_hba.conf 配置文件&#xff0c;设置 replica 用户白…...

全新K4A4G165WG-BCWE000 4Gb DDR4 SDRAM 内存芯片 三星Samsung 进口芯片IC

K4A4G165WG-BCWE000 是三星半导体&#xff08;Samsung&#xff09;推出的一款4Gb DDR4 SDRAM 内存芯片&#xff0c;采用 96-ball FBGA 封装&#xff0c;组织为 256M 16 结构。它凭借 3200Mbps 的高数据速率、1.2V 低功耗设计以及 -40C 至 95C 的宽温工作能力&#xff0c;广泛应…...

避免这些坑!Unity2D界面转换中常见的动画事件处理问题及解决方案

避免这些坑&#xff01;Unity2D界面转换中常见的动画事件处理问题及解决方案 在Unity2D游戏开发中&#xff0c;界面转换是提升用户体验的关键环节。一个流畅的淡入淡出效果能让场景切换更加自然&#xff0c;但很多开发者在实际操作中常会遇到动画事件不触发、协程执行异常等问题…...

基于CYBER-VISION零号协议构建智能技术文档翻译与摘要系统

基于CYBER-VISION零号协议构建智能技术文档翻译与摘要系统 1. 引言 对于很多开发者来说&#xff0c;阅读英文技术文档是件挺头疼的事。尤其是遇到一些前沿的开源项目&#xff0c;官方文档全是英文&#xff0c;里面还夹杂着大量的专业术语和复杂的配置说明。有时候&#xff0c…...

后端架构师转型AI智能体架构师:3个月实战路径,收藏这份落地指南

如果你本身就是后端/全栈/架构师出身&#xff0c;这意味着你已经有了一套非常扎实的“确定性系统”的构建能力——分布式、高并发、数据库事务、系统稳定性&#xff0c;这些都是你的底牌。 而AI智能体恰恰是“不确定性系统”&#xff08;大模型&#xff09;与“确定性系统”&am…...

VS2022项目复制后报错打不开?别慌,手把手教你用记事本5分钟修复.sln文件

VS2022项目复制后报错打不开&#xff1f;记事本5分钟修复.sln文件全指南 刚复制完的VS2022项目一打开就报错&#xff1f;解决方案资源管理器一片空白&#xff1f;别急着重装或放弃&#xff0c;这很可能只是.sln文件中的路径需要手动更新。作为经历过数十次类似问题的开发者&…...

保姆级教程:在Jeecg-Vue3项目中快速集成SuperQuery高级查询组件(含完整配置代码)

Jeecg-Vue3项目实战&#xff1a;SuperQuery高级查询组件深度集成指南 在后台管理系统开发中&#xff0c;高效的数据筛选功能直接影响用户体验和操作效率。Jeecg-Vue3作为企业级快速开发框架&#xff0c;其内置的SuperQuery组件能够帮助开发者快速构建复杂的多条件查询面板。本文…...

从移位相加到硬件实现:FPGA二进制乘法器的设计精髓

1. 从纸笔计算到硬件逻辑&#xff1a;二进制乘法的本质 记得第一次学二进制乘法时&#xff0c;我拿着铅笔在纸上画了半天移位相加的步骤。比如计算11011011&#xff0c;就像小学生列竖式一样&#xff0c;先写下110111101&#xff0c;然后11011左移一位变成11010&#xff0c;接着…...

便携式动物源性成分检测仪 肉类真假检测仪

整机采用极简一体化便携设计&#xff0c;无冗余复杂配件&#xff0c;整套系统由两大核心部分构成&#xff0c;兼顾设备专业性与便携实用性&#xff0c;开箱即可快速开展检测工作&#xff0c;无需额外搭建复杂检测环境&#xff0c;完美适配现场流动检测需求&#xff1a;核心检测…...

springboot汽车配件商城销售管理系统

目录系统架构设计数据库设计核心功能实现销售管理模块库存预警功能报表统计模块系统测试策略部署方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用SpringBoot作为后端框架&#xff0c;搭配MyBatis或JPA实现…...

MATLAB App Designer实战:如何用按钮优雅终止死循环(附完整代码)

MATLAB App Designer实战&#xff1a;用按钮优雅控制循环的5个关键技巧 在MATLAB App Designer开发中&#xff0c;循环控制是每个开发者都会遇到的经典问题。想象一下这样的场景&#xff1a;你精心设计的界面正在运行一个数据处理循环&#xff0c;突然发现参数设置有误&#xf…...