IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> python自动化[android篇] -> 正文阅读

[移动开发]python自动化[android篇]

airtest

airtest IDE

拖拽事件自动生成代码,提供基本事件,较为简单。
在这里插入图片描述

airtest文档

安装

pip install -U airtest

用命令行运行 .air 脚本

详细使用请airtest run --help查看
airtest run xxx.air --device Android:/// --log 日志目录 --outfile xx.html --lang zh

通用api

from airtest.core.api import *

  1.  def init_device(platform='Android', uuid=None, **kwargs):->device
     	cls = import_device_cls(platform)
     	# 此时cls是airtest的android包的android类
        dev = cls(uuid, **kwargs)
        # dev自然是android对象
        G.add_device(dev)
        # 将当前设备对象加入全局变量G以供其他方法调用
        return dev
        
     阅读源码,该模块根据 platform 参数去airtest的对应的包中导入了相应的类。
     
     使用:device = init_device(platform="Android",uuid="SJE5T17B17", cap_method="JAVACAP")
    
  2. def connect_device(uri):->device
    	pass
    	
    此方法提供了uri连接设备的方法,最终还是调用了 init_device 方法
    
    使用:connect_device("Android://127.0.0.1:5037/10.254.60.1:5555")
    
  3. def auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None):
    	pass
    
    自动配置运行环境,如果当前没有连接设备的话,就默认尝试连接Android设备,调用了 connect_device 方法。
    
    使用:auto_setup(__file__, logdir=True, devices=['android://127.0.0.1:5037/9YJNW17629003686'])
    

以上三种连接方式均将device对象放入了全局变量G中。

  1. def device():->device
    	return G.DEVICE
    	
    从全局变量G 中取出一个device对象
    
  2. def set_current(idx):
    	pass
    idx:为索引或序列号
    
    将G的devices_list中取一个device放到 current_device中
    
    使用:set_current(0)
    
  3. def shell(cmd):
    	pass
    	
    在目标设备上运行远程shell指令,返回命令结果
    
  4. def start_app(package, activity=None):
    	pass
    def stop_app(package):
    	pass
    	
    在设备上启动/停止 目标应用
    使用:start_app("com.netease.cloudmusic")/stop_app("com.netease.cloudmusic")
    
  5. def clear_app(package):
    	pass
    清理设备上的目标应用数据
    使用:clear_app(package)
    
  6. def install(filepath, **kwargs):
    	pass
    def uninstall(package):
    	pass
    	
    安装卸载应用
    使用:install(r"D:\demo\test.apk")/uninstall("com.netease.cloudmusic")
    
  7. def snapshot(filename=None, msg='', quality=None, max_size=None):
    	pass
    
    对目标设备进行一次截图,并且保存到文件中。
    参数:	
    filename – 保存截图的文件名,默认保存路径为 ``ST.LOG_DIR``中
    msg – 截图文件的简短描述,将会被显示在报告页面中
    quality – 图片的质量,[1,99]的整数,默认是10
    max_size – 图片的最大尺寸,例如 1200
    
  8. def wake()唤醒并解锁目标设备
    def home()返回HOME界面。
    def touch(v, times=1, **kwargs)在当前设备画面上进行一次点击
    def double_click(v)双击
    def text(text, enter=True, **kwargs)输入文本
    def sleep(secs=1.0)休眠
    def keyevent(keyname, **kwargs)按键
    def exists(v):->bool 是否存在
    def find_all(v)找寻目标坐标
    def assert_exists(v, msg='')断言存在
    def assert_not_exists(v, msg='')断言不存在
    def assert_equal(first, second, msg='')断言相等
    def assert_not_equal(first, second, msg='')断言不相等
    
  9. def swipe(v1, v2=None, vector=None, **kwargs):
    	pass
    	
    在当前设备画面上进行一次滑动操作。
    v1 – 滑动的起点,可以是一个Template图片实例,或是绝对坐标 (x, y)
    v2 – 滑动的终点,可以是一个Template图片实例,或是绝对坐标 (x, y)
    vector – 滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)
    **kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
    
  10. def pinch(in_or_out='in', center=None, percent=0.5):
    	pass
    在设备屏幕上执行一个双指pinch捏合操作
    
    in_or_out – 向内捏合或向外扩大,在[in, “out”] 中枚举一个值
    center – pinch动作的中心位置,默认值为None则为屏幕中心点
    percent – pinch动作的屏幕百分比,默认值为0.5
    
  11. def wait(v, timeout=None, interval=0.5, intervalfunc=None):->坐标
    	pass
    等待当前画面上出现某个匹配的Template图片
    v – 要等待出现的目标Template实例
    timeout – 等待匹配的最大超时时长,默认为None即默认取 ST.FIND_TIMEOUT 的值
    interval – 尝试查找匹配项的时间间隔(以秒为单位)
    intervalfunc – 在首次尝试查找匹配失败后的回调函数
    

安卓api

两个重要子模块
在这里插入图片描述

from airtest.core.android import android
adb = android.ADB()
device = android.Android()

device:

device.get_default_device()
device.serialno
device.uuid
以上均为获取序列号

device.list_app(third_only=False)获取app列表
device.path_app(package)打印出package的完整路径
device.check_app(package):->bool 检查package在设备中是否存在
device.start_app(package, activity=None)启动应用
device.start_app_timing(package, activity)启动应用,并且返回启动耗费时间
device.stop_app(package)停止应用
device.clear_app(package)清理应用数据
device.install_app(filepath, replace=False, install_options=None)将应用安装到手机上
device.install_multiple_app(filepath:list, replace=False, install_options=None)
device.uninstall_app(package)从设备中卸载应用
device.snapshot(filename=None, ensure_orientation=True, quality=10, max_size=None)截取一张当前手机画面,默认会发送到stdout

device.swipe(p1, p2, duration=0.5, steps=5, fingers=1)在设备上执行滑动操作
p1 – 开始坐标
p2 – 结束坐标
duration – 在屏幕上滑动的时长,默认是0.5
steps – 滑动过程中的步数,默认为5
fingers – 滑动的手指数量,1或者2,默认为1

其他android接口

adb:

start_server()
kill_server()
version()
devices(state=None)

其他adb接口

Keycode表

keycode对应表如下:
0 “KEYCODE_UNKNOWN”
1 “KEYCODE_MENU”
2 “KEYCODE_SOFT_RIGHT”
3 “KEYCODE_HOME”
4 “KEYCODE_BACK”
5 “KEYCODE_CALL”
6 “KEYCODE_ENDCALL”
7 “KEYCODE_0”
8 “KEYCODE_1”
9 “KEYCODE_2”
10 “KEYCODE_3”
11 “KEYCODE_4”
12 “KEYCODE_5”
13 “KEYCODE_6”
14 “KEYCODE_7”
15 “KEYCODE_8”
16 “KEYCODE_9”
17 “KEYCODE_STAR”
18 “KEYCODE_POUND”
19 “KEYCODE_DPAD_UP” 向上
20 “KEYCODE_DPAD_DOWN” 向下
21 “KEYCODE_DPAD_LEFT” 向左
22 “KEYCODE_DPAD_RIGHT” 向右
23 “KEYCODE_DPAD_CENTER”
24 “KEYCODE_VOLUME_UP”
25 “KEYCODE_VOLUME_DOWN”
26 “KEYCODE_POWER”
27 “KEYCODE_CAMERA”
28 “KEYCODE_CLEAR”
29 “KEYCODE_A”
30 “KEYCODE_B”
31 “KEYCODE_C”
32 “KEYCODE_D”
33 “KEYCODE_E”
34 “KEYCODE_F”
35 “KEYCODE_G”
36 “KEYCODE_H”
37 “KEYCODE_I”
38 “KEYCODE_J”
39 “KEYCODE_K”
40 “KEYCODE_L”
41 “KEYCODE_M”
42 “KEYCODE_N”
43 “KEYCODE_O”
44 “KEYCODE_P”
45 “KEYCODE_Q”
46 “KEYCODE_R”
47 “KEYCODE_S”
48 “KEYCODE_T”
49 “KEYCODE_U”
50 “KEYCODE_V”
51 “KEYCODE_W”
52 “KEYCODE_X”
53 “KEYCODE_Y”
54 “KEYCODE_Z”
55 “KEYCODE_COMMA”
56 “KEYCODE_PERIOD”
57 “KEYCODE_ALT_LEFT”
58 “KEYCODE_ALT_RIGHT”
59 “KEYCODE_SHIFT_LEFT”
60 “KEYCODE_SHIFT_RIGHT”
61 “KEYCODE_TAB”
62 “KEYCODE_SPACE”
63 “KEYCODE_SYM”
64 “KEYCODE_EXPLORER”
65 “KEYCODE_ENVELOPE”
66 “KEYCODE_ENTER”
67 “KEYCODE_DEL”
68 “KEYCODE_GRAVE”
69 “KEYCODE_MINUS”
70 “KEYCODE_EQUALS”
71 “KEYCODE_LEFT_BRACKET”
72 “KEYCODE_RIGHT_BRACKET”
73 “KEYCODE_BACKSLASH”
74 “KEYCODE_SEMICOLON”
75 “KEYCODE_APOSTROPHE”
76 “KEYCODE_SLASH”
77 “KEYCODE_AT”
78 “KEYCODE_NUM”
79 “KEYCODE_HEADSETHOOK”
80 “KEYCODE_FOCUS”
81 “KEYCODE_PLUS”
82 “KEYCODE_MENU”
83 “KEYCODE_NOTIFICATION”
84 “KEYCODE_SEARCH”
85 “TAG_LAST_KEYCODE”

moneky压力测试

adb shell monkey [参数]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

导出测试结果

# 将log日志放到项目目录
auto_setup(__file__, logdir=True, devices=['android://127.0.0.1:5037/9YJNW17629003686'])

from airtest.report.report import LogToHtml

h1 = LogToHtml(script_root=__file__, export_dir=r'D:\Pyproject\test', lang='zh')
h1.report(output_file='result.html')
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:44:08  更:2022-03-04 15:45:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:53:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码