一、知識點分析
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實戰項目!