【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()

 

posted @ 2020-11-02 09:34  fy-  阅读(2820)  评论(0编辑  收藏  举报