当前位置:   article > 正文

UI自动化uiautomator2_uiautomation2

uiautomation2

一、简介

uiautomator2是一个python库,用于Android的UI自动化测试,其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作

python-uiautomator2主要分为两个部分,python客户端,移动设备:

  • python端: 运行脚本,并向移动设备发送HTTP请求

  • 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

整个过程

  1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
  2. 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
  3. 移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作

二、安装

下载夜神模拟器夜神安卓模拟器-手游模拟器电脑版_夜神模拟器官网

安装后,在【设置——关于——版本号】连续点击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,可以选择实时看

2、登录

用uiautomator2 登录QQ 号,再用qq登录游戏。

查看包名:点击应用中的元素就可以看到了

  1. import uiautomator2 as u2
  2. import json
  3. class HandleWDJ(object):
  4. def __init__(self, serial="127.0.0.1:62001"):
  5. self.d = u2.connect_usb(serial=serial)
  6. # self.handle_WDJ_watcher()
  7. pass
  8. def read_config(self):
  9. with open(r"F:\\wc\\hyp\\config.json") as json_file:
  10. config = json.load(json_file)
  11. globals().update(config)
  12. return config
  13. # 监控器
  14. def handle_WDJ_watcher(self):
  15. self.d.watcher.when(information['shouquan']).click()#去授权
  16. self.d.watcher.when(information['yinsi']).click()#同意服务隐私
  17. self.d.watcher.when(information['yunxu']).click() # 访问照片允许
  18. self.d.watcher.start()
  19. pass
  20. def close_app(self):
  21. # 关闭监控
  22. self.d.watcher.stop()
  23. self.d.app_stop(mess['app_name'])
  24. self.d.app_clear(mess['app_name'])
  25. pass
  26. def handle_WDJ_app(self):
  27. self.d.app_start(package_name=mess['app_name'])
  28. # 进入登录界面
  29. self.d(resourceId=mess['login_button']).click()
  30. # 输入用户名密码
  31. self.d.xpath(mess['user']).set_text(mess['user_value'])
  32. self.d(resourceId=mess['password']).set_text(mess['pw_value'])
  33. self.d(resourceId=mess['button_ok']).click()
  34. self.handle_WDJ_watcher()
  35. pass
  36. pass
  37. if __name__ == '__main__':
  38. wdj = HandleWDJ()
  39. config1 = wdj.read_config()
  40. mess=config1['db_yuansu']
  41. information = config1['db_information']
  42. wdj.handle_WDJ_app()
  43. # wdj.close_app()
  44. pass
  1. {
  2. "db_information":{
  3. "server":"127.0.0.1:62001",
  4. "yinsi": "//*[@resource-id=\"com.tencent.mobileqq:id/dialogRightBtn\"]",
  5. "shouquan": "//*[@resource-id=\"com.tencent.mobileqq:id/dialogRightBtn\"]",
  6. "yunxu": "//*[@resource-id=\"com.android.packageinstaller:id/permission_allow_button\"]"
  7. },
  8. "db_yuansu":{
  9. "app_name":"com.tencent.mobileqq",
  10. "login_button":"com.tencent.mobileqq:id/btn_login",
  11. "user":"//*[@resource-id=\"com.tencent.mobileqq:id/em2\"]",
  12. "password":"com.tencent.mobileqq:id/password",
  13. "button_ok":"com.tencent.mobileqq:id/login",
  14. "user_value": "1955466033",
  15. "pw_value": "1234"
  16. }
  17. }
  1. import uiautomator2 as u2
  2. class HandleWDJ(object):
  3. def __init__(self, serial="127.0.0.1:62001"):
  4. self.d = u2.connect_usb(serial=serial)
  5. pass
  6. def handle_WDJ_app(self):
  7. self.d.app_start(package_name="com.tencent.start") # 打开游戏
  8. # 进入登录界面
  9. self.d(text="我的").click() # 点击我的
  10. self.d(text="点击登录").click() # 点击登录
  11. self.d(resourceId="com.tencent.start:id/check_protocol").click() # 点击同意协议
  12. self.d(resourceId="com.tencent.start:id/btn_login").click() # 选择登陆方式QQ登录
  13. self.d(text="主页").click() # 点击主页
  14. # 滑动判断是否是需要的游戏
  15. game_name="QQ炫舞2"
  16. for i in range(5):
  17. if self.d(text=game_name):
  18. # assert self.d(text=game_name).get_text()==game_name
  19. self.d(text=game_name).click()
  20. break
  21. self.d.swipe(0.5,0.8,0.5,0.3)
  22. self.d(text="启动游戏").click() # 开始游戏
  23. pass
  24. if __name__ == '__main__':
  25. wdj = HandleWDJ()
  26. wdj.handle_WDJ_app()
  27. # wdj.close_app()
  28. pass

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/709112
推荐阅读
  

闽ICP备14008679号