目录
Airtest与Poco
Airtest是基于Python的跨平台UI自动化测试框架,基于图像识别原理,适用于PC应用和移动端app。
Poco是基于UI控件搜索的自动化测试框架,除了对Android、IOS外,也支持微信小程序、微信小游戏和H5应用。
两者对比:AirTest简单直接,兼容各种环境,无需嵌入代码;Poco控件识别更准确,界面迭代影响小
airtest IDE界面
安装见:Poco框架(跨平台自动化测试框架)_觅远的博客-CSDN博客
poco窗口
通过选择连接的设备查看图层页面结构及元素属性 ,首次连接会给设备安装服务程序PocoService
设备窗口连接设备
注意:设备连接需要让环境中的adb版本一致,否则连接报错
airtest窗口
支持通过界面截图定位操作元素,支持录制脚本,首次使用在移动设备上安装Yosemite
airtest常用方法
连接设备
# 方法一:
from airtest.core.api import *
from airtest.core.android import Android
dev = Android() # 指定连接的手机设备,指定参数为设备序列号,为空时默认连接获取到的第一台设备
# from airtest.core.win import Windows # 连接windowns设备
# win = Windows()
# 方法二:
from airtest.core.api import *
from airtest.core.android.recorder import *
from airtest.core.android.adb import *
auto_setup(__file__, logdir=True, devices=["android://127.0.0.1:5037/470091b1"]) # 470091b1为设备序列号
adb = ADB(serialno="470091b1")
安卓命令等操作
print(dev.get_default_device()) # 设备序列号
print(dev.list_app()) # 获取所有安装包,third_only=True第三方安装包,默认为False
print(dev.get_current_resolution()) # 设备屏幕分辨率大小
print(dev.get_display_info()) # 显示信息,同dev.display_info
print(dev.path_app('com.huawei.music')) # 获取安装包所在位置,参数为包名
print(dev.check_app('com.huawei.music')) # 检查包是否在设备上已安装
dev.install_app(r'D:\zhuomian\下载\手机apk\高德地图.apk') # 安装应用
dev.uninstall_app('com.lititi.apk') # 卸载安装包
dev.start_app('com.huawei.music') # 启动应用
dev.stop_app('com.huawei.music') # 关闭停止应用
dev.clear_app('com.huawei.music') # 清除应用数据
print(dev.shell('pm list permissions')) # 执行shell命令
安卓按键操作
# keyevent按键,HOME键,POWER电源键
dev.keyevent("HOME")
# wake唤醒设备
dev.wake()
# 解锁设备
dev.unlock()
# home键
dev.home() # 同dev.keyevent("HOME")
# text输入文本:第一个参数文本输入;第二个参数enter是否按下`Enter`键;第三个参数search是否要按下输入法键盘中的search键
dev.text('输入内容')
# touch点击:touch在设备上执行点击操作,pos点击的坐标点,duration点击持续时间,持续时间大点可以模拟长按
dev.touch(pos=(800, 900), duration=2)
# 双击double_click
dev.double_click(pos=(800, 900))
# 滑动:p1开始位置;p2结束位置;fingers滑动的手指数量,1或者2,默认为1,可以模拟双指
dev.swipe(p1=(500,1200),p2=(200,500),duration=1,steps=2,fingers=2)
# swipe_along执行一段连续的滑动操作,仅适用于minitouch和maxtouch(可模拟九宫格解锁,参数:1、要移动的每个点的坐标集合,2、整个过程的持续时间,3、每两个点之间的移动步数)
dev.swipe_along(([800, 800], [700, 700], [600, 600], [500, 500], [400, 400]), duration=2, steps=1)
# two_finger_swipe执行两个手指一起滑动的操作(模拟双指操作,除模拟缩放还可实现旋转),仅适用于minitouch和maxtouch, 参数:tuple_from_xy、tuple_to_xy开始和结束的坐标;offset第二根手指偏移量(默认(0, 50))
dev.two_finger_swipe(tuple_from_xy=(500,1200),tuple_to_xy=(200,500),duration=3,steps=3,offset=(0,100))
# 截屏
dev.snapshot('jt.png')
# pinch模拟双指操作:参数-->in_or_out:in向内,out向外;percent:双指夹点距离;center:双指中心点;steps:移动的步数(双指操作的次数)
dev.pinch(center=None, in_or_out='out', percent=0.6, duration=3, steps=10)
设备状态获取
# 检查屏幕是否打开,返回布尔值
print(dev.is_screenon())
# 检查设备是否锁定,返回布尔值
print(dev.is_locked())
# 软键盘是否开启,返回布尔值
print(dev.is_keyboard_shown())
录屏
# 安卓录屏连接方法1:
from airtest.core.api import *
from airtest.core.android.recorder import *
from airtest.core.android.adb import *
auto_setup(__file__, logdir=True, devices=["android://127.0.0.1:5037/470091b1"])
adb = ADB(serialno="470091b1")
recorder = Recorder(adb) # 实例化录制对象
recorder.start_recording(
max_time=10) # max_time参数用来设置最长的录屏时间,可以根据自己的实际需求修改这个录屏时长。如果脚本的运行时长小于max_time值,则录屏时长以脚本实际运行时长为准,如果脚本运行时长大于max_time值,录屏时长则以max_time的时长为准。
for _ in range(10):
time.sleep(.5)
dev.text('测试录屏') # 文本输入
recorder.stop_recording('test.mp4')
# 安卓录屏连接方法2:
from airtest.core.android import Android
dev = Android() # 指定连接的手机设备,指定参数为设备序列号,为空时默认连接获取到的第一台设备
dev.start_recording(max_time=10)
for _ in range(10):
time.sleep(.5)
dev.text('ceshi',enter=False)
dev.stop_recording('ceshi.mp4')
# windowns录屏
import time
from airtest.core.win import Windows
win = Windows()
win.start_recording(output='win.mp4')
for _ in range(10):
time.sleep(.5)
win.text('录屏测试')
win.stop_recording()
windows设备常用操作
# 截屏
win.snapshot('win.png')
# 执行一个按键响应
win.keyevent('{RWIN}')
# 输入文本
win.text('输入内容')
# 模拟发送键盘扫描码,而不是上述发送虚拟键码的keyevent()方法。
win.key_press('RWINDOWS') # 按下键
win.key_press('R')
win.key_release('RWINDOWS') # 释放键
win.key_release('R')
# 鼠标点击
win.touch((270,1060))
# 鼠标双击
win.double_click((200,760))
# 执行拖动操作(鼠标按下并且释放)
win.swipe((260, 300), (500, 800), duration=.3, steps=1)
# 模拟鼠标移动按下和释放,可达到swipe的效果
win.mouse_move((500, 800)) # 移动鼠标
win.mouse_down(button='left') # 按下鼠标
win.mouse_move((260, 300)) # 移动鼠标
win.mouse_up(button='left') # 释放鼠标
# 模拟打开命令窗口并执行命令
import time
from airtest.core.win import Windows
win = Windows()
win.key_press('RWINDOWS') # 按下键
win.key_press('R')
win.key_release('RWINDOWS') # 释放键
win.key_release('R')
time.sleep(1)
win.text('cmd')
win.keyevent('{ENTER}')
time.sleep(1)
win.text('dir')
win.keyevent('{ENTER}')
time.sleep(2)
win.text('cls')
win.keyevent('{ENTER}')
生成airtest报告
from airtest.report.report import simple_report
auto_setup(__file__, logdir=True)
# 参数:filepath指定脚本文件路径, logpath=True指定log内容路径, logfile=None指定log.txt文件路径, output=HTML_FILE指定HTML报告的生成路径,必须以 .html 结尾
for _ in range(10):
time.sleep(.5)
dev.text('测试脚本报告')
simple_report(__file__, logpath=True, output='airtestlog.html')