一.简介

我们都知道在做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. The first week match's mistake-2

    旋转排列 (https://www.luogu.com.cn/problem/B3688) 解读一下题目: 要求从给定的数组拿出最后一个数字后 看看变化后的数组的最后一个数字是否是要求的数字 想到用栈 ...

  2. 两种路由模式的区别(hash模式,history模式)

    1. hash 带#号的,history不带#号2.hash模式用的hashChange监听路径的变化3.history用的是HTML5相关的API语法 使用pushState => 添加一条历 ...

  3. 封装统一请求状态返回Result

    1.测试数据 public class Test { public static void main(String[] args){ System.out.println("Response ...

  4. 浏览器发送POST请求、DELETE请求

    1.浏览器发送POST请求 方法一: var xml = new XMLHttpRequest(); var url = "http://127.0.0.1:8800/admin/user& ...

  5. asyncio的基本使用框架,python高效处理数据,asyncio.gather(),asyncio. create_task(),asyncio.run(main())

    asyncio 是 Python 3.4 引入的标准库,是一个基于事件循环的异步 I/O 并发库.它提供了一种协作式的多任务处理方式,使得我们能够在一个线程中并发处理多个 I/O 操作.它通过将 I/ ...

  6. java线程的创建

    文章目录 前言 进程 线程 使用线程 继承Thread 线程随机性 .start()的顺序不代表.run()的顺序 实现Runnable 实例共享造成的非线程安全问题 线程常用方法: 判断线程是否为停 ...

  7. 文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题

    四.函数 $\lceil \lg n \rceil !$ 多项式有界吗?函数 $\lceil \lg \lg n \rceil !$ 多项式有界吗? 文心一言: chatgpt: 对于第一个问题,函数 ...

  8. 2022-11-27:超过经理收入的员工。编写一个SQL查询来查找收入比经理高的员工。以下数据的结果输出是Joe,因为Joe是唯一挣得比经理多的雇员。 DROP TABLE IF EXISTS `em

    2022-11-27:超过经理收入的员工.编写一个SQL查询来查找收入比经理高的员工.以下数据的结果输出是Joe,因为Joe是唯一挣得比经理多的雇员. DROP TABLE IF EXISTS `em ...

  9. 2021-03-05:go中,io密集型的应用,比如有很多文件io,磁盘io,网络io,调大GOMAXPROCS,会不会对性能有帮助?为什么?

    2021-03-05:go中,io密集型的应用,比如有很多文件io,磁盘io,网络io,调大GOMAXPROCS,会不会对性能有帮助?为什么? 福哥答案2021-03-05: 这是面试中被问到的.实力 ...

  10. Tensorflow 2下载网址

    Tensorflow2: 官网:https://tensorflow.google.cn/ 一个核心开源库,可以帮助您开发和训练机器学习模型.您可以通过直接在浏览器中运行 Colab 笔记本来快速上手 ...