首先交代本文测试脚本所用的自动化测试框架为Uiautomator2
一、连接设备
def __init__(self):
self.d = u2.connect("192.168.2.30")
这里用要连接的手机的IP
二、判断屏幕是否休眠,如果休眠要唤醒
if self.d(resourceId="com.android.systemui:id/notification_stack_scroller").exists: # 获取屏幕锁屏的状态属性
print("处于锁屏状态")
self.d.screen_on() # 把屏幕唤醒
sleep(1)
self.d.swipe(500, 1600, 500, 200, 0.5) # 滑动,for 0.5s(default)
sleep(1)
else:
print("当前非锁屏状态") # 当前非锁屏状态
以上代码是vivo手机锁屏状态的判断,具体手机型号请自己确定判断方法和解锁方式
三、安装apk
os.popen('adb install ' + apkDir)
apkDir为apk的路径,可为运行py文件时从外部传入,
python3 xxx.py apkDir
四、运行apk
经过前三步之后apk就安装上并自动打开了,然后就可以控制App运行了
主要方法有:
1.click(),比如这样,比较简单
self.d(resourceId="com.android.packageinstaller:id/ok_button").click()
2.App的上滑下滑
self.d.swipe(500, 1600, 500, 200, 0.5) # 滑动,for 0.5s(default)
参数分别为开始点坐标和结束点坐标和滑动时间
execute(scrollable=True).scroll.toEnd() # 向下滑动到最下面
3.返回
execute.press("back")
同理,传"home"为点击home键
4.输入
execute(text="请输入答案…").send_keys('自动化测试')
找到需要输入内容的EditText元素,send_keys
5.获取脚本运行异常log
print('脚本异常了')
test_status = 5
traceback.print_exc(file=open('/Users/xxx/Documents/logs/py_log.log', 'w'))
传入log输出的路径即可,当然要先引入traceback
import traceback
6.获取App运行log
import subprocess
# w写模式 每次写入新内容,原来的内容会被覆盖
# a追加模式 不清除原来内容,直接原来的基础上添加新数据
file = open('/Users/xxx/Documents/logs/alg_adb_log.log', 'w')
ps = subprocess.Popen('adb logcat | grep -i com.xxx.xxx', stderr=subprocess.PIPE,
stdout=file, shell=True)
传入输出路径和包名,即可获取App相关logcat
如果要获取crash日志,需要遍历logcat,找出Runtime异常
with open('/Users/xxx/Documents/logs/alg_adb_log.log', 'r', encoding='utf-8', errors='ignore') as f:
for line in f.readlines():
if 'AndroidRuntime' in line:
xxx
break