zoukankan      html  css  js  c++  java
  • 基于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抓包工具,可以过滤请求与响应
  • 相关阅读:
    array常用方法总结
    .babelrc参数小解
    async/await方法解析
    html5-entities.js消失问题
    h => h(App)解析
    package.json字段简要解析
    body-parser小解
    mongodb中的__v字段
    module.exports与exports
    freemarker判断对象是否为空
  • 原文地址:https://www.cnblogs.com/linu/p/11334728.html
Copyright © 2011-2022 走看看