基于Airtest实现python自动抢红包

一、Airtest的介绍

1)Airtest的简介

    Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。
Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。
Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
    Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,
然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。

2)关于自动化测试,Airtest更多的用作自动化测试

概念:自动化测试,就是把繁杂的人工测试用例利用自动化测试工具编写成代码,让机器代替人工自动跑用例的过程。实际上就是把以人为驱动的测试行为转化为机器执行的一种过程。
意义:节省人力、物力、时间、硬件资源等,提升测试效率,特别对于繁琐重复的测试用例,可以使测试人员更专注于新的测试模块的建立和开发,从而提高测试覆盖率。

3)配置手机连接

[Airtest简介]
    网易出品的一个自动化测试工具
    * 可以基于图像识别来完成自动化测试
    * 可以基于poco控件来完成自动化测试

[安装]
    官网下载:https://airtest.netease.com/changelog.html
    解压即用

[配置手机]
    1. 打开 AirtestIDE
    2. 将手机打开开发者模式
    3. USB链接手机
    4. 在右上角点击connect
    5. 出现界面即可

二、python语言操作手机

1)左下标选择安卓,生成初始化代码

# -*- encoding=utf8 -*-
__author__ = "hp"

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)
View Code

2)打开微信

2.1)第一种方式,通过 应用名字打开

# 打开微信
poco(text='微信').click()  # click 点击事件

 2.2)打开应用app的名称

第一步获取应用app的名称

# 查看当前手机上的app的包,有哪些,找到需要打开的包
dev = device()
print(dev.list_app(third_only=True))    # 获取所以的应用的包名
# com.tencent.mm  为微信的包名

第二步,打开微信。如果知道了包名,第一步可省略,直接使用

# 打开app
start_app('com.tencent.mm')

 3)根据标签选择需要的信息

# 晒选对话框
items_elements = poco(name='com.tencent.mm:id/b9g').offspring(name='com.tencent.mm:id/b9i')  # offspring 为子孙节点

# 选择出所有的名字
for item in items_elements:
    name = item.get_text()
    print(name) 

4)抢红包代码

# -*- encoding=utf8 -*-
__author__ = "hp"

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)

# 打开app
start_app('com.tencent.mm')

# 晒选对话框
items_elements = poco(name='com.tencent.mm:id/b9g').offspring(name='com.tencent.mm:id/b9i')  # offspring 为子孙节点

# 选择出所有的名字
names = []
for item in items_elements:
    name = item.get_text()
    names.append(name)
print(names)    

def get_red_pakets():
    # 实现抢红包,选择历史消息,进行反转poco("com.tencent.mm:id/ae").child("android.widget.RelativeLayout")[5]
    msg_elements_list = poco(name="android.widget.RelativeLayout").children()  # 获取别人发的消息
    # 反转消息
    msg_lists = []
    for item in msg_elements_list:
        msg_lists.insert(0,item)

    for msg in msg_lists:   # 第一次循环出来的就是最后一个元素,也是最新的元素
        # 判断红包是否存在
        red_key_element = msg.offsping(name='com.tencent.mm:id/asn')
        # 已领取元素定位
        not_red_key = msg.offsping(name='com.tencent.mm:id/aso')
        
        if red_key_element: # 说明有红包,别管有没有抢过
            # 判断抢没有抢过
            if not_red_key.exists() and not_red_key.get_text() == '以领取':
                print('已经抢过了')
                continue
            else:
                print('有新红包了')
                msg.click()  # 点红包
                
                # 开红包
                kai_elements = poco(name='com.tencent.mm:id/czt')
                if kai_elements.exists():
                    kai_elements.click()
                
                # 返回对话框
                keyevent('BACK')
        else:
            print('没有红包!')
            continue
    
# 进入对话框
target = 'myfriend'
if target in names:
    index = names.index(target)    # 计算出列表的索引
    items_elements[index].click()  # 进入该对话框
    
    while True:
        get_red_pakets()
        sleep(1)    # 每一秒检查一次
View Code

5)归纳总结

[Airtest简介]
    网易出品的一个自动化测试工具
    * 可以基于图像识别来完成自动化测试
    * 可以基于poco控件来完成自动化测试

[安装]
    官网下载:https://airtest.netease.com/changelog.html
    解压即用

[配置手机]
    1. 打开 AirtestIDE
    2. 将手机打开开发者模式
    3. USB链接手机
    4. 在右上角点击connect
    5. 出现界面即可
    6.自动生成代码 在poco辅助款左下角选择 安卓

[打开微信]
    先找到包名
        device()
        dev.list_app()
    指定包名打开
        start_app(包名)
        
[选择对话框]
    poco来定位元素的位置
    offspring是选择子孙节点,包括儿子,孙子,重孙子
    补充 --> children 是选择子节点,只包括儿子
    get_text() 选择节点上对应的文本

[选择对话列表]
    FILO  --> First In First Out
    LIFO  --> Last In First Out
    Proprietary
    
[总结]
    注意空间元素的选取
    children 和 offspring的使用
    Airtest可以实现手机app的爬虫
        可以直接使用 Airtest运行多个手机 --> 群控
        结合 MitmProxy来实现爬虫,MitmProxy抓包工具,可以过滤请求与响应
原文地址:https://www.cnblogs.com/linu/p/11334728.html