【Appium】:自動化測試中,python腳本獲取手機短信驗證碼的問題


讀取手機驗證碼,這里利用appium的text識別,讀取最新的短信信息,我這個測試機是紅米的note7

1,首先獲取當前短信app的Activity等信息:

adb -s 89afc4e9 shell dumpsys window | findstr mCurrentFocus

2,識別短信apk的信息如下:

mCurrentFocus=Window{2291615 u0 com.android.mms/com.android.mms.ui.MmsTabActivity}

3,在python腳本中,啟動app:

    def get_driver(self):
        '''獲取driver'''
        self.desired_caps = {}
        self.desired_caps['platformName'] = 'Android'  # 平台
        self.desired_caps['platformVersion'] = '9.0'  # 系統版本
        self.desired_caps['appPackage'] = 'com.android.mms'  # APK包名
        self.desired_caps['appActivity'] = '.ui.MmsTabActivity'  # 被測程序啟動時的Activity
        self.desired_caps['unicodeKeyboard'] = 'true'  # 是否支持unicode的鍵盤。如果需要輸入中文,要設置為“true”
        self.desired_caps['resetKeyboard'] = 'true'  # 是否在測試結束后將鍵盤重軒為系統默認的輸入法。
        #self.desired_caps['60'] # Appium服務器待appium客戶端發送新消息的時間。默認為60秒
        self.desired_caps['deviceName'] = '89afc4e9'  # 手機ID
        self.desired_caps['noReset'] = True  # true:不重新安裝APP,false:重新安裝app
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.desired_caps)
        return self.driver

4,識別最新短信內容:

 

 5,輸出text內容,通過睜着表達式,提取出數字驗證碼:

    pattern = re.compile(r'(?<=您的驗證碼為:)\d+\.?\d*')
    code = re.findall(pattern, ele.text)

6,此時輸出的內容格式是list的,需要轉成string型的:

    string_code = "".join(code)

7,然后通過write函數,將內容寫到本地文檔:

    def write(self, path, text):
        f = open(path, mode='w', encoding='utf-8')
        f.write(text)
        f.close()

綜合一下,腳本如下:

# coding:utf-8
from appium import webdriver
import re
import time

class driver_configure():
    def get_driver(self):
        '''獲取driver'''
        self.desired_caps = {}
        self.desired_caps['platformName'] = 'Android'  # 平台
        self.desired_caps['platformVersion'] = '9.0'  # 系統版本
        self.desired_caps['appPackage'] = 'com.android.mms'  # APK包名
        self.desired_caps['appActivity'] = '.ui.MmsTabActivity'  # 被測程序啟動時的Activity
        self.desired_caps['unicodeKeyboard'] = 'true'  # 是否支持unicode的鍵盤。如果需要輸入中文,要設置為“true”
        self.desired_caps['resetKeyboard'] = 'true'  # 是否在測試結束后將鍵盤重軒為系統默認的輸入法。
        #self.desired_caps['60'] # Appium服務器待appium客戶端發送新消息的時間。默認為60秒
        self.desired_caps['deviceName'] = '89afc4e9'  # 手機ID
        self.desired_caps['noReset'] = True  # true:不重新安裝APP,false:重新安裝app
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.desired_caps)
        return self.driver

    def write(self, path, text):
        f = open(path, mode='w', encoding='utf-8')
        f.write(text)
        f.close()

if __name__ == '__main__':
    dc = driver_configure()
    dr = dc.get_driver()
    ele = dr.find_element_by_id("com.android.mms:id/subject")
    print(ele.text)
    pattern = re.compile(r'(?<=您的驗證碼為:)\d+\.?\d*')
    code = re.findall(pattern, ele.text)
    print(code)
    string_code = "".join(code)
    dc.write('D:/smslog.txt', string_code)
    time.sleep(3000)
    print("quit")
    dr.quit()

 


免責聲明!

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



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