adb如何做Android ui自动化(这一篇就够了)
一.简介
我们都知道在做Android ui自动化的时候用的是appium,环境搭建贼难受。如果我们在工作中遇到需要实现简单的自动化功能,可以直接使用adb来完成,无需去搭建繁琐的appium。ADB(Android Debug Bridge)是一个用于在Android设备和计算机之间传输数据、安装应用程序、调试和测试Android应用程序的命令行工具。本章主要介绍做自动化的时候常用指令。
二.常用指令
1.获取设备分辨率
adb shell wm size
2.指定端口
adb -P <port> start-server
3.查询应用列表
adb shell pm list packages # 多个参数表示且的关系(adb shell pm list packages -3 -e)
| 参数 | 显示列表 |
| -f | 显示应用关联的 apk 文件 |
| -d | 只显示 disabled 的应用 |
| -e | 只显示 enabled 的应用 |
| -s | 只显示系统应用 |
| -3 | 只显示第三方应用 |
| -i | 显示应用的 installer |
| -u | 包含已卸载应用 |
| 无参数 | 所有应用 |
模糊过滤
pm list packages -3 |grep bilibili # 模糊过滤(win电脑用find ,查询关键字双引号起来)
4.查看安装包信息
adb shell dumpsys package 包名
5.查看安装路径
adb shell pm path 包名
6.模拟键盘操作
adb shell input keyevent keycode
这里就列几个常见的有意思的keycode码(其它code码可百度搜索)
| 含义 | keycode |
| 24 | 增加音量 |
| 25 | 减少音量 |
| 26 | 电源键 |
| 224 | 点亮屏幕 |
| 223 | 息屏 |
| 64 | 打开浏览器 |
| 4 | 返回键 |
| 208 | 打开日历 |
要是涉及到长按的话,比如长按电源键,可以加个--longpress
adb shell input keyevent --longpress 26
7.滑动
语法:adb shell input swipe <起点x坐标> <起点y坐标> <结束点x坐标> <结束点y坐标> [滑动时间(ms)]
adb shell input swipe 300 1500 300 100 10000 # 从(300,1500)坐标滑动到(300,100)位置,历时10s
8.点击事件
语法:adb shell input tap x y
adb shell input tap 380 1214
获取元素坐标:打开开发者选项>打开指针位置
9.打电话
adb shell am start -a android.intent.action.CALL -d tel:136 # 打电话给136
10.输入内容
输入数字和英文
adb shell input text 123AADcefe
输入中文
1)下载adbkeyboard_2.apk ,下载地址:http://www.xlhs.com/app/27253.html
2)安装到安卓手机上:adb install apk地址
3)系统管理》输入法》勾选ADB keyboard后,选择ADB keyboard为默认输入法
4)执行adb广播输入:我是帅哥
adb shell am broadcast -a ADB_INPUT_TEXT --es msg 我是帅哥
输入特殊字符
adb shell input text " !@#$%^&*()"
用引号引起来,且前面要多出一个空格
11.截屏
adb exec-out screencap -p > sc.png # 截取手机屏保存到电脑上,sc.png
12.录屏
adb shell screenrecord /sdcard/filename.mp4 # 录制视频保存到相册
默认录制时长和最长录制时长为180s,ctrl+c可停止录制
13.wifi控制(可用于断网测试)
adb shell svc wifi enable # 打开wifi
adb shell svc wifi disable # 关闭wifi
三.无线连接设备
测试多台设备时,都用数据线连接实在麻烦,下面是利用wifi连续设备,从此抛弃了有线连接。
1)确保手机与电脑连接同一个局域网
2)打开运行usb调试开关
3)先用数据线使电脑与手机相连:adb devices
4)设置端口:adb tcpip 6666
5)获取手机ip地址后输入:adb connect ip:6666
四.sendevent用法
sendevent可以用来操作复杂的自动化场景,下面以一个简单的长按电源键为例来介绍下sendevent的用法
1.dos窗口输入:adb shell getevent
2.手机操作设备长按电源键,会得到如下四组数据
/dev/input/event0: 0001 0074 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000000
/dev/input/event0: 0000 0000 00000000
每组数据分别对应的是:设备名称 type code value(getevent打印出来的都是16进制的,因此需要转成10进制使用)
import os
import time os.system("adb shell sendevent /dev/input/event0 1 116 1")
os.system("adb shell sendevent /dev/input/event0 0 0 0")
time.sleep(3)
os.system("adb shell sendevent /dev/input/event0 1 116 0")
os.system("adb shell sendevent /dev/input/event0 0 0 0")
五.执行adb命令
1.DOS窗口
这个就不用多介绍了,直播win+r搜索cmd打开即可
2.python os模块
1)直接用os.system()运行adb命令
os.system("adb shell input text 123")
这种写的坏处就是太繁琐,每个命令都要写一个os.system
2)编写bat文件
①首先我们在win电脑创建一个bat.txt文件,编写内容输入:adb shell input text 123
②之后把文件后缀改成bat类型的:bat.bat
③在python中执行bat文件
os.system("C:/Users/user/Desktop/bat.bat")
④bat其它命令
命令行隐藏/打印命令
@echo off # 运行bat文件时,在命令行隐藏指令,on时显示指令
adb shell input text 123
echo helloworld # 打印
@echo on
adb shell input text 456
停止当前命令,按任意键继续
pause # 当前命令停止,按任意键继续运行
等待
timeout /t 10 # 等待10s,按任意键结束等待。等待时长(-1,99999),-1s时无限等待
timeout /t 10 /nobreak # 加上nobreak时,表示只有按ctrl+c才可以提前结束等待
循环
见:https://www.cnblogs.com/lihongtaoya/p/15084378.html
⑤实例
@echo off
timeout /t 5
echo helloworld
adb shell input text helloworld
@echo on
timeout /t 2 /nobreak
adb shell input text 456
pause
以上命令刚开始隐藏命令,等待5s后打印helloworld,并用adb在输入框输入helloworld,然后开始显示命令,等待两分钟后输入456,最后按任意键结束。

adb如何做Android ui自动化(这一篇就够了)的更多相关文章
- Android UI开发第二十七篇——实现左右划出菜单
年前就想写左右滑动菜单,苦于没有时间,一直拖到现在,这篇代码实现参考了网上流行的SlidingMenu,使用的FrameLayout布局,不是扩展的HorizontalScrollView. 程序中自 ...
- 【Android测试】UI自动化代码优化之路(临时发布, 随时删除)
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...
- 【Android测试】UI自动化代码优化之路
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...
- Airtest 网易 UI 自动化工具 Airtest 浅用记录
一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架同时也支持原生Android App 的基于元素识别的UI自动化测试.本文主要使用目 ...
- 网易 UI 自动化工具 Airtest 浅用记录
一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使 ...
- Android UI开发第三十篇——使用Fragment构建灵活的桌面
http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- 使用uiautomatorviewer和uiautomator来做android的UI测试
来自:http://university.utest.com 作者:Angelos Nakulas (All Authored Courses) 译者:Elaine00 目录 简介 什 ...
- 小心!做 UI 自动化一定要跨过这些坑
一 .引子 UI自动化,在移动互联网时代的今天,一直都是在各大测试社区最为火爆的一个TOPIC.甚至在测试同行面前一提起自动化,大家就会自然而然的问:“恩,你们是用的什么框架?appium?还是rob ...
- 使用appium+python做UI自动化的demo
使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...
随机推荐
- csv数据集按比例分割训练集、验证集和测试集,即分层抽样的方法
一.一种比较通俗理解的分割方法 1.先读取总的csv文件数据: import pandas as pd data = pd.read_csv('D:\BaiduNetdiskDownload\weib ...
- The first week match's mistake-2
旋转排列 (https://www.luogu.com.cn/problem/B3688) 解读一下题目: 要求从给定的数组拿出最后一个数字后 看看变化后的数组的最后一个数字是否是要求的数字 想到用栈 ...
- 【LeetCode动态规划#10】完全背包问题实战,其三(单词拆分,涉及集合处理字符串)
单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆 ...
- GitLab 配置优化
代码库最近换了,使用了 GitLab.这两天观察了下服务器的使用情况,发现 GitLab 很吃内存.直接占用了 30 多个G的内存. 一.发现问题 使用 top 命令查看内存时,发现前几十个都是同一个 ...
- 如果你项目使用了MyBatis-Plus你一定要用它
还是先举个例子,魂斗罗小游戏应该很多90后都玩过,那个时代没有Iphone,没有各种电子产品(小学初中时代),这种小游戏应该就是很多90后的青春,反正那个时候只要放假就白天黑夜得玩.它就是那种2个好基 ...
- Simulation-计算统计-随机数生成
library('ggplot2') library('dplyr') Lecture 6 Methods for generating random numbers Goal: Use U(0, 1 ...
- 编程开发8大语言详解,为什么Java是我最推荐的?
一. 前言 很多没有接触过编程语言的同学,都会觉得编程开发特别高端和神奇,担心理解不了更担心学不会. 当然,也有人会认为,你既然是做编程的,那么你应该什么都会,什么软件的开发都能完成,这是平哥经常听到 ...
- 理解 React 中的 useEffect、useMemo 与 useCallback
useEffect 先理解 useEffect 有助于学习 useMemo 和 useCallback.因为 useMemo 和 useCallback 的实现实际上都是基于 useEffect 的. ...
- 通过空间占用和执行计划了解SQL Server的行存储索引
1 索引介绍 索引是一种帮助查询语句能够快速定位到数据的一种技术.索引的存储方式有行存储索引.列存储索引和内存优化三种存储方式: 行存储索引,使用B+树结构,行存储指的是数据存储格式为堆.聚集索引和内 ...
- 2021-07-08:股票问题5。给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票)
2021-07-08:股票问题5.给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票) ...