業務需求:需要測試手機滑動解鎖失敗時事件的次數及等待的時間,本來想利用Python+Appium實現,但是Appium運行時自動給我解鎖了....
部分解釋摘抄自:https://testerhome.com/topics/11357
python-uiautomator2是一個自動化測試開源工具,僅支持Android平臺的原生應用測試
python-uiautomator2封裝了谷歌自帶的uiautomator2測試框架,提供便利的python接口。他允許測試人員直接在PC上編寫Python的測試代碼,操作手機應用,完成自動化,大大提高了自動化代碼編寫的效率
以下圖片使用Windows畫圖軟件
如圖所示,python-uiautomator2主要分為兩個部分,python客戶端,移動設備
- python端: 運行腳本,并向移動設備發送HTTP請求
- 移動設備:移動設備上運行了封裝了uiautomator2的HTTP服務,解析收到的請求,并轉化成uiautomator2的代碼。
整個過程
-
在移動設備上安裝
atx-agent
(守護進程), 隨后atx-agent
啟動uiautomator2服務(默認7912端口)進行監聽 - 在PC上編寫測試腳本并執行(相當于發送HTTP請求到移動設備的server端)
- 移動設備通過WIFI或USB接收到PC上發來的HTTP請求,執行制定的操作
安裝工具
- Python2或者Python3均可。(也可以嘗試使用Android上Python客戶端:QPython)
- 移動設備
環境搭建
安裝adb
如命令行可以執行adb devices
,則跳過此步驟
從谷歌官網下載Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解壓,并加包含adb.exe
的目錄加入到系統的PATH中。
安裝python-uiautomator2
pip install --pre -U uiautomator2
設備安裝atx-agent
首先設備連接到PC,并能夠adb devices
發現該設備。
# 從github下載atx-agent文件,并推送到手機。在手機上安裝包名為`com.github.uiautomator`的apk $ python -m uiautomator2 init success
最后提示success,代表atx-agent初始化成功。
應用及操作
調用uiautomator2的過程
- 配置手機設備參數,設置具體操作的是哪一臺手機
- 抓取手機上應用的控件,制定對應的控件來進行操作
- 對抓取到的控件進行操作,比如點擊、填寫參數等。
配置手機設備參數
python-uiautomator2連接手機的方式有兩種,一種是通過WIFI,另外一種是通過USB。兩種方法各有優缺點。
WIFI最便利的地方要數可以不用連接數據線,USB則可以用在PC和手機網絡不在一個網段用不了的情況。
1,使用WIFI連接
手機獲取到手機的IP,并確保電腦可以PING通手機。手機的IP可以在設置-WIFI設置里面獲取到。
比如手機的IP是192.168.0.100
,連接設備的代碼為
import uiautomator2 as u2 d = u2.connect("192.168.0.100")
2.使用USB連接
手機的序列號可以通過adb devices
獲取到,假設序列號是123456f
,連接代碼為
import uiautomator2 as u2 d = u2.connect_usb("123456f")
抓取手機上應用的控件
我這里使用的weditor,
1.終端中輸入 pip install weditor安裝weditor
2.終端中輸入python -m weditor啟動weditor
下圖為網頁的截圖
然后再選取元素定位就可以完成本次需求
代碼如下:
#_*_ coding:utf-8_*_ import uiautomator2 as u2 import re import time STOP_COUNT=150 d = u2.connect() #輸入滑動解鎖碼 def do_password(count): #通過weditor獲取到的圖案位置 d.swipe_points([(0.304, 0.431), (0.507, 0.435), (0.5, 0.636)], 0.1) #檢驗是否輸入正確 def do_check(): #檢查輸入密碼是否達到現在 if d(resourceId="android:id/message").exists: message = d(resourceId="android:id/message").get_text() #取得輸密碼的次數 times = re.findall("d+", message)[0] #需要等待的時間 timeout = re.findall("d+", message)[1] print("暫時不能輸入密碼,這是第$s次輸入,需要等待%s才可以再次輸入" % (times, timeout)) return True, times, timeout else: print("可以輸入") return False, 0, 0 count = 0 while True: ret, times, timeout = do_check() if ret: d.screenshot(times + "times_" + timeout + "s.jpg") if int(times) >= STOP_COUNT: break time.sleep(int(timeout)) d(resourceId="android:id/button3").click() count = count + 1 do_password(count)
效果圖:
到此這篇關于Python+uiautomator2實現手機鎖屏解鎖功能的文章就介紹到這了,更多相關python uiautomator2手機鎖屏解鎖內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_35661796/article/details/84075824