赞
踩
uiautomator2是一个python库,用于Android的UI自动化测试,其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作
python-uiautomator2主要分为两个部分,python客户端,移动设备:
python端: 运行脚本,并向移动设备发送HTTP请求
移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。
整个过程
下载夜神模拟器夜神安卓模拟器-手游模拟器电脑版_夜神模拟器官网
安装后,在【设置——关于——版本号】连续点击5次以上,就可以在【设置】出现【开发者选项】,选择【开启】,打开【USB调试】,cmd输入adb devices。
如果没有出现设备号List of devices attached,就要把夜神模拟器的exe目录下的nox_adb.exe改其他名字如nox_adb_1.exe,复制adb.exe改名为nox_adb.exe到该目录下,重启模拟器,重新打开cmd输入adb devices就可以了。如果还是没有设备号的话,看看执行指令的cmd窗口路径,直接用windos+R输入cmd的默认路径就可以的。
安装qq,可以在应用商城直接下载,也可以用apk
安装uiautomator2
pip install --upgrade --pre uiautomator2
执行下面的命令会自动安装本库所需要的设备端程序:
uiautomator-server,atx-agent,openstf / minicap,openstf / minitouch
init就是所有USB连接电脑的手机上都安装uiautomator2
python -m uiautomator2 init
安装weditor,快速的识别手机上的元素
pip install weditor==0.6.4
python -m weditor
运行后浏览器跳转到http://localhost:17310/
输入设备号,点击connet,可以选择实时看
用uiautomator2 登录QQ 号,再用qq登录游戏。
查看包名:点击应用中的元素就可以看到了
- import uiautomator2 as u2
- import json
-
- class HandleWDJ(object):
- def __init__(self, serial="127.0.0.1:62001"):
- self.d = u2.connect_usb(serial=serial)
- # self.handle_WDJ_watcher()
- pass
-
- def read_config(self):
- with open(r"F:\\wc\\hyp\\config.json") as json_file:
- config = json.load(json_file)
- globals().update(config)
- return config
-
- # 监控器
- def handle_WDJ_watcher(self):
- self.d.watcher.when(information['shouquan']).click()#去授权
- self.d.watcher.when(information['yinsi']).click()#同意服务隐私
- self.d.watcher.when(information['yunxu']).click() # 访问照片允许
- self.d.watcher.start()
- pass
-
- def close_app(self):
- # 关闭监控
- self.d.watcher.stop()
- self.d.app_stop(mess['app_name'])
- self.d.app_clear(mess['app_name'])
- pass
-
- def handle_WDJ_app(self):
- self.d.app_start(package_name=mess['app_name'])
- # 进入登录界面
- self.d(resourceId=mess['login_button']).click()
- # 输入用户名密码
- self.d.xpath(mess['user']).set_text(mess['user_value'])
- self.d(resourceId=mess['password']).set_text(mess['pw_value'])
- self.d(resourceId=mess['button_ok']).click()
- self.handle_WDJ_watcher()
- pass
- pass
-
- if __name__ == '__main__':
- wdj = HandleWDJ()
- config1 = wdj.read_config()
- mess=config1['db_yuansu']
- information = config1['db_information']
- wdj.handle_WDJ_app()
- # wdj.close_app()
- pass
- {
- "db_information":{
- "server":"127.0.0.1:62001",
- "yinsi": "//*[@resource-id=\"com.tencent.mobileqq:id/dialogRightBtn\"]",
- "shouquan": "//*[@resource-id=\"com.tencent.mobileqq:id/dialogRightBtn\"]",
- "yunxu": "//*[@resource-id=\"com.android.packageinstaller:id/permission_allow_button\"]"
- },
- "db_yuansu":{
- "app_name":"com.tencent.mobileqq",
- "login_button":"com.tencent.mobileqq:id/btn_login",
- "user":"//*[@resource-id=\"com.tencent.mobileqq:id/em2\"]",
- "password":"com.tencent.mobileqq:id/password",
- "button_ok":"com.tencent.mobileqq:id/login",
- "user_value": "1955466033",
- "pw_value": "1234"
- }
- }
- import uiautomator2 as u2
-
- class HandleWDJ(object):
- def __init__(self, serial="127.0.0.1:62001"):
- self.d = u2.connect_usb(serial=serial)
- pass
-
- def handle_WDJ_app(self):
- self.d.app_start(package_name="com.tencent.start") # 打开游戏
- # 进入登录界面
- self.d(text="我的").click() # 点击我的
- self.d(text="点击登录").click() # 点击登录
- self.d(resourceId="com.tencent.start:id/check_protocol").click() # 点击同意协议
- self.d(resourceId="com.tencent.start:id/btn_login").click() # 选择登陆方式QQ登录
- self.d(text="主页").click() # 点击主页
- # 滑动判断是否是需要的游戏
- game_name="QQ炫舞2"
- for i in range(5):
- if self.d(text=game_name):
- # assert self.d(text=game_name).get_text()==game_name
- self.d(text=game_name).click()
- break
- self.d.swipe(0.5,0.8,0.5,0.3)
- self.d(text="启动游戏").click() # 开始游戏
- pass
-
- if __name__ == '__main__':
- wdj = HandleWDJ()
- wdj.handle_WDJ_app()
- # wdj.close_app()
- pass
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。