前言
APP的自动化测试,前提从ADB连接设备,启动APK应用开始。Win 11自带的WSA的APP的测试,要完全自动化,需要解决几个问题。
1、 启动WSA
此项有两步:
i 启动WSA服务
Python程序来启动服务,可以直接调用命令行工具,只要执行 net start wsaservice 成功就行,可以用:
import os
os.system('net start wsaservice')
ii 开启设备连接IP及端口
当WSA服务启动后,直接用adb connect来连接还不行,因为设备的IP及端口并没有出来,如果是UI操作,可以手动点击运行 Windows Subsystem for andoird Settings,打开开发者模式来启用IP及端口,但Python代码来实现,则需要迂回实现。
问题:WSA Settings不同于一般的Windows 应用,不能在命令行直接输入命令来启动?
解决方案: 通过协议来实现(来自网友的文章创意:在任意浏览器输入 wsa://com.android.settings,并点击打开弹出的控件),此处本人经过实验,可以通过 运行 (Win + R)来实现。
要在Python程序中实现 Win + R 的效果,那我们需要调用第三方库来控制键盘,以达到快捷键的效果。
首先,安装第三方库 pynput:
pip install pynput
注:如果遇到Read time out,可以更改源,或者加时间
pip install pynput -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=600
完成后,即可用pynput的Controller,Key来实现Win + R打开 运行 窗口,以开启WSA的开发者模式,打开ADB连接的IP及端口,再使用adb connect IP:端口 来连接设备。
2、 安装及启动APP
ADB连接设备后,即可用ADB命令来安装APK,并启动APP(需知道启动页面)。
小知识:
1、 查看已安装的应用
adb shell pm list packages
2、 查看应用的默认启动页面
adb shell dumpsys package
3、 启动APP
adb shell am start
最后代码如下:
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: testCallWSA.py
Author : 曾良均
QQ: 277099728
Date: 2/27/2023 10:45 AM
Description :
-------------------------------------------------
Change Activity:
-------------------------------------------------
"""
__author__ = 'ljzeng'
import os
from pynput.keyboard import Key, Controller
import time
kb = Controller()
with kb.pressed(Key.cmd_l):
kb.press('r')
kb.release('r')
os.system('net start wsaservice')
time.sleep(3)
# 控制键盘 按压释放、键入字符串、按下组合键
with kb.pressed(Key.cmd_l): # Key.cmd_l 即为Win键
kb.press('r')
kb.release('r')
kb.type('wsa://com.android.settings') # 输入命令
kb.press(Key.enter)
kb.release(Key.enter)
time.sleep(5)
# 连接设备
os.system('adb connect 127.0.0.1:58526')
time.sleep(2)
os.system('adb devices')
time.sleep(3)
# 安装APK
os.system('adb install -r APK文件')
time.sleep(5)
# 启动APP
os.system('adb shell am start APP的启动页')
# 准备工作完成