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