基於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抓包工具,可以過濾請求與響應

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM