一.简介

我们都知道在做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自动化(这一篇就够了)的更多相关文章

  1. Android UI开发第二十七篇——实现左右划出菜单

    年前就想写左右滑动菜单,苦于没有时间,一直拖到现在,这篇代码实现参考了网上流行的SlidingMenu,使用的FrameLayout布局,不是扩展的HorizontalScrollView. 程序中自 ...

  2. 【Android测试】UI自动化代码优化之路(临时发布, 随时删除)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...

  3. 【Android测试】UI自动化代码优化之路

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5993622.html 关于UI自动化的抱怨 听过不少人这样 ...

  4. Airtest 网易 UI 自动化工具 Airtest 浅用记录

    一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架同时也支持原生Android App 的基于元素识别的UI自动化测试.本文主要使用目 ...

  5. 网易 UI 自动化工具 Airtest 浅用记录

    一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使 ...

  6. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  7. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  8. 使用uiautomatorviewer和uiautomator来做android的UI测试

    来自:http://university.utest.com    作者:Angelos Nakulas (All Authored Courses)      译者:Elaine00 目录 简介 什 ...

  9. 小心!做 UI 自动化一定要跨过这些坑

    一 .引子 UI自动化,在移动互联网时代的今天,一直都是在各大测试社区最为火爆的一个TOPIC.甚至在测试同行面前一提起自动化,大家就会自然而然的问:“恩,你们是用的什么框架?appium?还是rob ...

  10. 使用appium+python做UI自动化的demo

    使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...

随机推荐

  1. Unable to find real location for: <frozen codecs>

    问题描述 pycharm 在debug时出现了如下bug ----------------------------------------------------------------------- ...

  2. 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

    可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件.工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东 ...

  3. Centos 安装 python3.x 为默认

    CentOS 7 中默认安装了 Python,但是版本是2.x的,由于2020年python2.x将停止更新,因此需要将版本升级至3.x.但由于python2.x是系统集成的,很多命令都是要基于pyt ...

  4. 【C#】图片上传并根据长宽大小进行正方形、长方形及等比缩放。

    #region 正方型裁剪并缩放 /// <summary> /// 正方型裁剪 /// 以图片中心为轴心,截取正方型,然后等比缩放 /// 用于头像处理 /// </summary ...

  5. 2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是

    2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是 ...

  6. 2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?

    2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据.数据库不能停,并且还有增删改操作.请问如何操作?福哥答案2020-01-20: 陌陌答案:用pt_onl ...

  7. 2021-06-20:已知一个消息流会不断地吐出整数 1~N,但不一定按照顺序依次吐出。如果上次打印的序号为i, 那么当i+1出现时,请打印 i+1 及其之后接收过的并且连续的所有数,直到1~N全部接

    2021-06-20:已知一个消息流会不断地吐出整数 1~N,但不一定按照顺序依次吐出.如果上次打印的序号为i, 那么当i+1出现时,请打印 i+1 及其之后接收过的并且连续的所有数,直到1~N全部接 ...

  8. 2021-12-17:长城守卫军问题。 长城上有连成一排的n个烽火台,每个烽火台都有士兵驻守。 第i个烽火台驻守着ai个士兵,相邻峰火台的距离为1。另外,有m位将军, 每位将军可以驻守一个峰火台,每个

    2021-12-17:长城守卫军问题. 长城上有连成一排的n个烽火台,每个烽火台都有士兵驻守. 第i个烽火台驻守着ai个士兵,相邻峰火台的距离为1.另外,有m位将军, 每位将军可以驻守一个峰火台,每个 ...

  9. 2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k

    2021-12-13:字符串解码.给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k ...

  10. 2021-08-10:给定一个正数数组arr,返回arr的子集不能累加出的最小正数。1)正常怎么做? 2)如果arr中肯定有1这个值,怎么做?

    2021-08-10:给定一个正数数组arr,返回arr的子集不能累加出的最小正数.1)正常怎么做? 2)如果arr中肯定有1这个值,怎么做? 福大大 答案2021-08-10: 先排序,然后扩充ra ...