首先交代本文測試腳本所用的自動化測試框架爲Uiautomator2
一、連接設備
def __init__(self):
self.d = u2.connect("192.168.2.30")
這裏用要連接的手機的IP
二、判斷屏幕是否休眠,如果休眠要喚醒
if self.d(resourceId="com.android.systemui:id/notification_stack_scroller").exists: # 獲取屏幕鎖屏的狀態屬性
print("處於鎖屏狀態")
self.d.screen_on() # 把屏幕喚醒
sleep(1)
self.d.swipe(500, 1600, 500, 200, 0.5) # 滑動,for 0.5s(default)
sleep(1)
else:
print("當前非鎖屏狀態") # 當前非鎖屏狀態
以上代碼是vivo手機鎖屏狀態的判斷,具體手機型號請自己確定判斷方法和解鎖方式
三、安裝apk
os.popen('adb install ' + apkDir)
apkDir爲apk的路徑,可爲運行py文件時從外部傳入,
python3 xxx.py apkDir
四、運行apk
經過前三步之後apk就安裝上並自動打開了,然後就可以控制App運行了
主要方法有:
1.click(),比如這樣,比較簡單
self.d(resourceId="com.android.packageinstaller:id/ok_button").click()
2.App的上滑下滑
self.d.swipe(500, 1600, 500, 200, 0.5) # 滑動,for 0.5s(default)
參數分別爲開始點座標和結束點座標和滑動時間
execute(scrollable=True).scroll.toEnd() # 向下滑動到最下面
3.返回
execute.press("back")
同理,傳"home"爲點擊home鍵
4.輸入
execute(text="請輸入答案…").send_keys('自動化測試')
找到需要輸入內容的EditText元素,send_keys
5.獲取腳本運行異常log
print('腳本異常了')
test_status = 5
traceback.print_exc(file=open('/Users/xxx/Documents/logs/py_log.log', 'w'))
傳入log輸出的路徑即可,當然要先引入traceback
import traceback
6.獲取App運行log
import subprocess
# w寫模式 每次寫入新內容,原來的內容會被覆蓋
# a追加模式 不清除原來內容,直接原來的基礎上添加新數據
file = open('/Users/xxx/Documents/logs/alg_adb_log.log', 'w')
ps = subprocess.Popen('adb logcat | grep -i com.xxx.xxx', stderr=subprocess.PIPE,
stdout=file, shell=True)
傳入輸出路徑和包名,即可獲取App相關logcat
如果要獲取crash日誌,需要遍歷logcat,找出Runtime異常
with open('/Users/xxx/Documents/logs/alg_adb_log.log', 'r', encoding='utf-8', errors='ignore') as f:
for line in f.readlines():
if 'AndroidRuntime' in line:
xxx
break