一、知识点分析
1.AirtestIDE:
是一个配套推出的跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写脚。
2.pycharm:
PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
3.逍遥模拟器(非必须):
Android手机模拟器,其他模拟器也可以,例:网易Mumu、夜神、逍遥、iTools、天天、海马玩、BlueStacks等。
模拟器连接端口汇总
二、环境及安装包
1.操作系统
Windows 10 家庭中文版
2.软件包
AirtestIDE:AirtestIDE-win-1.2.13.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
Pycharm社区版:pycharm-community-2020.1.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
逍遥模手游拟器:XYAZ-Setup-7.6.5-haa539ed70.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
Python-3.7.2环境:python-3.7.2-amd64.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
三、软件安装步骤(环境准备)
1、解压 AirtestIDE-win-1.2.13.zip创建AirtestIDE快捷方式(过程简单不在赘述)
2、双击 pycharm-community-2020.1.exe默认下一步安装即可(过程简单不在赘述)
3、双击 XYAZ-Setup-7.6.5-haa539ed70.exe默认下一步安装即可(过程简单不在赘述)
4、双击 python-3.7.2-amd64.exe默认下一步安装即可(过程简单不在赘述)
1)、配置python环境变量:
查看python安装路径

复制python绝对路径
win+R-->输入 sysdm.cpl回车-->点击“高级”-->点击“环境变量”-->双击"Path"
点击 “新建”粘贴刚才复制的python路径后依次点击确定即可
2)、利用pycharm安装所需模块
打开 pycharm利用pip3安装poco模块:
新建python虚拟环境后随意创建个py文件,点击下方Terminal终端输入:pip3 install pocoui
如图:(因为我已经安装,正常安装需要几分钟时间,看网速快慢)
(注意:进行上边步骤 前需要提前配置pycharm的python,也就是告诉pycharm你安装的python在哪里,自行百度配置这里不在赘述。)
3)、逍遥模拟器设置
去 应用商城下载某信,然后 打开开发者模式:
点击“设置”
点击 最下发“关于平板 电脑”
双击“版本号”(会有提示:告诉你双击几次后打开开发者模式)
返回上一级最底部会出现“开发者选项”点击进入,开启
USB调试
四、代码分析
1.引入poco模块
# -*- encoding=utf8 -*- __author__ = "Mr.WangXinkun" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
2.模仿手指点击打开“某信”
poco(text='某信').click()
3.获取某信群消息列表
item_elements = poco(name='com.tencent.mm:id/f67').offspring('com.tencent.mm:id/fzg')
4.获取某信群消息列表名称
names = list(map(lambda x: x.get_text(), item_elements))
5.指定群名称(人名称亦同)
target = '阿坤红包测试' index = names.index(target)
6.点击进入群聊
item_elements[index].click()
7.获取群内每条消息元素
msg_list_elements_pre = poco("com.tencent.mm:id/awv").children()
8.从最近的一个红包开始抢,所有需要反转群聊消息
msg_list_elements = [] for item in msg_list_elements_pre: msg_list_elements.insert(0, item)
9.筛选红包和已失效红包
for msg_element in msg_list_elements: # 2.1 某信红包标识元素 red_key_element = msg_element.offspring('com.tencent.mm:id/u5') # 2.2 是否已经领取元素 has_click_element = msg_element.offspring('com.tencent.mm:id/tt') # 2.3 红包【包含:收到的红包和自己发出去的红包】 if red_key_element: print('发现一个红包') if has_click_element.exists() and ( has_click_element.get_text() == '已领取' or has_click_element.get_text() == '已被领完'): print('已经领取过了,略过~') continue else: print('马上抢红包') else: print('红包元素不存在') continue
10.抢红包
msg_element.click() click_element = poco("com.tencent.mm:id/f4f") if click_element.exists(): click_element.click() #返回 keyevent('BACK')
11.持续输出
while True: #写成一个方法持续抢红包 get_red_package() print('休眠1秒钟,继续刷新页面,开始抢红包。') sleep(1)
五、代码整合实践
代码整合:
# -*- encoding=utf8 -*- __author__ = "Mr.WangXinkun" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) #打开某信 poco(text='某信').click() # 消息列表 item_elements = poco(name='com.tencent.mm:id/f67').offspring('com.tencent.mm:id/fzg') # 获取所有消息列表的名称 names = list(map(lambda x: x.get_text(), item_elements)) # 群名称 target = '阿坤红包测试' index = names.index(target) # 点击进入群聊 item_elements[index].click() def get_red_package(): # 1.获取消息列表元素 msg_list_elements_pre = poco("com.tencent.mm:id/awv").children() msg_list_elements = [] for item in msg_list_elements_pre: msg_list_elements.insert(0, item) for msg_element in msg_list_elements: # 2.1 某信红包标识元素 red_key_element = msg_element.offspring('com.tencent.mm:id/u5') # 2.2 是否已经领取元素 has_click_element = msg_element.offspring('com.tencent.mm:id/tt') # 2.3 红包【包含:收到的红包和自己发出去的红包】 if red_key_element: print('发现一个红包') if has_click_element.exists() and ( has_click_element.get_text() == '已领取' or has_click_element.get_text() == '已被领完'): print('已经领取过了,略过~') continue else: print('马上抢红包') else: print('红包元素不存在') continue #抢红包 msg_element.click() click_element = poco("com.tencent.mm:id/f4f") if click_element.exists(): click_element.click() keyevent('BACK') #持续输出 while True: get_red_package() print('休眠1秒钟,继续刷新页面,开始抢红包。') sleep(1)
1.打开AirtestIDE,将上方代码复制黏贴:
2.远程设备链接设置
adb connect 127.0.0.1:21503
3.点击“连接”->点击“刷新ADB”
4.点击connect
5.点击左上方运行代码
6.运行效果如下 :
注意事项:
代码总体架构是直接可以跑的,但是由于每个设备的 某信name元素是不一样,所以需要替换代码中的六个name元素:
1.某信 首页群消息列表ListView元素
com.tencent.mm:id/f67
2.群名称name元素
com.tencent.mm:id/fzg
3.群内消息列表ListView元素
com.tencent.mm:id/awv
4.“某信红包”识别元素
com.tencent.mm:id/u5
5.红包“已领取”识别元素
com.tencent.mm:id/tt
6.红包“开”按钮元素
com.tencent.mm:id/f4f
(注:元素更换方法稍微有基础的小伙伴5分钟就可以完成,也可点赞 +关注+转发+评论 私聊博主教你)
六、总结
由于时间有限,目前实现的是指定固定的群名称进行红包消息筛选抢红包。消息列表页可以通过 swipe 函数向上滑动,获取更多的红包,原理类似。感兴趣的小伙伴可以自行研究一下哈!喜欢的小伙伴可以点点关注,博主会不定期更新一些大家 感兴趣的Python实战项目!