開始今天的主題 - 獲取toast提示
在日常使用App過程中,經(jīng)常會看到App界面有一些彈窗提示(如下圖所示)這些提示元素出現(xiàn)后等待3秒左右就會自動消失,這個和我日常生活中看到的煙花和曇花是多么的相似,那么我們該如何獲取這些元素文字內(nèi)容呢?
Toast簡介
Android中的Toast是一種簡易的消息提示框。 當(dāng)視圖顯示給用戶,在應(yīng)用程序中顯示為浮動。和Dialog不一樣的是,它永遠(yuǎn)不會獲得焦點(diǎn),無法被點(diǎn)擊。
Toast類的思想就是盡可能不引人注意,同時(shí)還向用戶顯示信息,希望他們看到。而且Toast顯示的時(shí)間有限,一般3秒左右就消失了。因此使用傳統(tǒng)的元素定位工具,我們是無法定位到Toast元素的(傳說中低調(diào)奢華有內(nèi)涵)。
Appium Toast內(nèi)容獲取
Add ability to verify TOAST messages (these can't be interacted with, only text retrieval allowed)
1.Appium 1.6.3開始支持識別Toast內(nèi)容,主要是基于UiAutomator2,因此需要在Capablity配置如下參數(shù):
'automationName':'uiautomator2' 或者: desired_caps['automationName']='uiautomator2'
2.安裝appium-uiautomator2-driver: 安裝命令如下:
cnpm install appium-uiautomator2-driver
安裝成功后可以在 C:\Users\Administrator\node_modules看到對應(yīng)的文件:
_appium-uiautomator2-driver@1.12.0@appium-uiautomator2-driver _appium-uiautomator2-server@1.10.0@appium-uiautomator2-server
測試環(huán)境
1.我的系統(tǒng)環(huán)境是Windows 10版本 64位系統(tǒng)
2.jdk版本:"1.8.0_181"
3.appium版本:1.4.16
經(jīng)查詢appium1.6.3以上才能識別toast,之前安裝appium版本是1.4.X,于是重整了測試環(huán)境
官方文檔是這么說的
Firstly you should install appium server.?Appium getting started. The version 1.6.3 or greater is recommended.
Since version 5.x there many features based on Java 8. So we recommend to install JDK SE 8 and provide that source compatibility.
也就是更新appium 到1.6.3以上,java-client版本最好是5.x,jdk要用1.8、selenium要用3.x,其他版本不一定兼容,要自己親測是否可用
想識別toast,官網(wǎng)是這么說,因此為了不必要的麻煩折騰環(huán)境最好還是卸載低版本的appium,然后安裝版本高于1.6.3的appium。
appium有兩種安裝方式,看你的需要選擇方法一或方法二
? ? ? ? 方法一:
? ? ? 使用下載地址:https://bitbucket.org/appium/appium.app/downloads/,可以下載exe應(yīng)用,桌面程序,更適合新手,界面設(shè)置,更容易上手,但是目前appium已經(jīng)更新1.6.3+,以上下載地址還沒更新最新的上去。如果不使用UIAUTOMATOR2等appium提供的新功能,不需要下載比較新的ppium,
? ? ? ? 方法二:
? ? ? 已安裝了node.js,可以使用npm命令安裝appium,打開cmd,輸入npm install -g appium,回車,即可開始安裝目前最新的版本,速度會比較慢,畢竟是國外的,如果不安裝最新的使用命令:npm install -g appium@xxx,xxx是版本號,如下載appium1.6.3,命令為npm install -g appium@1.7.0,我是一開始使用方法一,之后發(fā)現(xiàn)幾個功能appium要更新到1.6.3以上才支持,所以我目前版本更新到了1.6.3+以上。
?
4.selenium:3.141.0
安裝selenium:
輸入指令pip install selenium
驗(yàn)證安裝成功:pip show selenium
5.測試設(shè)備:Android 5.1.1 (不能低于5.0版本)
6.Python:3.7.2
命令:python -V? ,回車即可。
7.測試App:考研幫Android app V3.1.0
8.測試場景
進(jìn)入登錄界面輸入錯誤的用戶名或者密碼,獲取Toast內(nèi)容:
“用戶名或密碼錯誤,你還可以嘗試4次”
“驗(yàn)證失敗次數(shù)過多,請15分鐘后再試”
代碼實(shí)現(xiàn)
步驟一:初始化
在capability配置內(nèi)部增加:desired_caps[‘uiautomationName’]=’ uiautomator2’
步驟二:定位toast元素
(1)定義toast文本內(nèi)容
(2)定義路徑
(3)組合文本內(nèi)容和路徑進(jìn)行定位:用format()連接路徑和文本內(nèi)容
參考代碼
1 # coding=utf-8
2 # 1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
3
4 # 2.注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。
5 '''
6 Created on 2019-7-31
7 @author:瀟瀟說測試
8 Project:學(xué)習(xí)和使用appium自動化測試-toast提示
9 '''
10 # 3.導(dǎo)入模塊
11 from appium import webdriver
12 from selenium.common.exceptions import NoSuchElementException
13 from selenium.webdriver.support.ui import WebDriverWait
14 from selenium.webdriver.support import expected_conditions as EC
15
16 desired_caps = {'platformName': 'Android',
17 'platforVersion': '5.1.1',
18 'automationName': 'Uiautomator2',
19 'deviceName': '127.0.0.1:62001',
20 'app': r'C:\Users\DELL\Downloads\kaoyanbang.apk',
21 'appPackage': 'com.tal.kaoyan',
22 'appActivity': 'com.tal.kaoyan.ui.activity.SplashActivity',
23 'noReset': 'True'}
24
25 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
26 driver.implicitly_wait(9)
27 try:
28 driver.find_element_by_id("android:id/button2").click()
29 except NoSuchElementException:
30 print(1)
31 try:
32 driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
33 except NoSuchElementException:
34 print(2)
35 driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').clear()
36 driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').send_keys('bjhongge')
37
38 driver.find_element_by_id('com.tal.kaoyan:id/login_password_edittext').send_keys('1213213')
39 driver.find_element_by_id('com.tal.kaoyan:id/login_login_btn').click()
40
41 error_message = "用戶名或密碼錯誤,你還可以嘗試3次"
42 limit_message = "驗(yàn)證失敗次數(shù)過多,請15分鐘后再試"
43
44 message = '//*[@text=\'{}\']'.format(error_message)
45 #message='//*[@text=\'{}\']'.format(limit_message)
46
47 toast_element = WebDriverWait(driver, 15).until(lambda x:x.find_element_by_xpath(message))
48 print(toast_element.text)
說明:
連接不同的類型的變量或內(nèi)容format()
顯示等待:webdriver(driver,5)
driver是webdriver的驅(qū)動程序,5是超時(shí)時(shí)間,以秒為單位
WebDriverWait()一般由 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的說明。
until(method, message=’’)
調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),直到返回值不為 False。
until_not(method, message=’’)
調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),直到返回值為 False。
?
動態(tài)函數(shù):lambda x:x+5??
?????? X是函數(shù)的參數(shù),冒號后面是函數(shù)的返回值
封裝toast判斷
1.單獨(dú)寫一個函數(shù)來封裝判斷是否存在toast消息,存在返回True,不存在返回False
1 def is_toast_exist(driver,text,timeout=30,poll_frequency=0.5):
2
3 '''is toast exist, return True or False
4
5 :Agrs:
6
7 - driver - 傳driver
8
9 - text - 頁面上看到的文本內(nèi)容
10
11 - timeout - 最大超時(shí)時(shí)間,默認(rèn)30s
12
13 - poll_frequency - 間隔查詢時(shí)間,默認(rèn)0.5s查詢一次
14
15 :Usage:
16
17 is_toast_exist(driver, "看到的內(nèi)容")
18
19 '''
20
21 try:
22
23 toast_loc = ("xpath", ".//*[contains(@text,'%s')]"%text)
24
25 WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(toast_loc))
26
27 return True
28
29 except:
30
31 return False
封裝后參考代碼
1 # coding=utf-8
2 # 1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
3
4 # 2.注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。
5 '''
6 Created on 2019-7-31
7 @author: 瀟瀟說測試
8 Project:學(xué)習(xí)和使用appium自動化測試-toast提示
9 '''
10 # 3.導(dǎo)入模塊
11 from appium import webdriver
12 from selenium.common.exceptions import NoSuchElementException
13 from selenium.webdriver.support.ui import WebDriverWait
14 from selenium.webdriver.support import expected_conditions as EC
15
16 desired_caps = {'platformName': 'Android',
17 'platforVersion': '5.1.1',
18 'automationName': 'Uiautomator2',
19 'deviceName': '127.0.0.1:62001',
20 'app': r'C:\Users\DELL\Downloads\kaoyanbang.apk',
21 'appPackage': 'com.tal.kaoyan',
22 'appActivity': 'com.tal.kaoyan.ui.activity.SplashActivity',
23 'noReset': 'True'}
24
25 def is_toast_exist(driver,text,timeout=30,poll_frequency=0.5):
26
27 '''is toast exist, return True or False
28
29 :Agrs:
30
31 - driver - 傳driver
32
33 - text - 頁面上看到的文本內(nèi)容
34
35 - timeout - 最大超時(shí)時(shí)間,默認(rèn)30s
36
37 - poll_frequency - 間隔查詢時(shí)間,默認(rèn)0.5s查詢一次
38
39 :Usage:
40
41 is_toast_exist(driver, "看到的內(nèi)容")
42
43 '''
44
45 try:
46
47 toast_loc = ("xpath", ".//*[contains(@text,'%s')]"%text)
48
49 WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(toast_loc))
50
51 return True
52
53 except:
54
55 return False
56 if __name__ == "__main__":
57
58 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
59 driver.implicitly_wait(9)
60 try:
61 driver.find_element_by_id("android:id/button2").click()
62 except NoSuchElementException:
63 print(1)
64 try:
65 driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
66 except NoSuchElementException:
67 print(2)
68 driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').clear()
69 driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').send_keys('bjhongge')
70
71 driver.find_element_by_id('com.tal.kaoyan:id/login_password_edittext').send_keys('1213213')
72 driver.find_element_by_id('com.tal.kaoyan:id/login_login_btn').click()
73
74 error_message = "用戶名或密碼錯誤,你還可以嘗試3次"
75 limit_message = "驗(yàn)證失敗次數(shù)過多,請15分鐘后再試"
76
77 print is_toast_exist(driver, error_message)
?小結(jié)
1.注意:Toast內(nèi)容為中文時(shí),頂部必須注釋# coding=utf-8 否則會因?yàn)榫幗獯a導(dǎo)致文字識別失敗。
2. 用npm安裝appium-uiautomator2-driver ,會出現(xiàn)錯誤,卡頓之后安裝不成功。
解決辦法
(1)首先執(zhí)行這個命令:npm install?-g cnpm?--registry=https://registry.npm.taobao.org
?????? 安裝cnpm(完成后如下圖)
?(2)然后通過這個命令: cnpm install appium-uiautomator2-driver?? 安裝uiautomator2的配置文件,如圖
3.cnpm與npm的區(qū)別:
(1)npm介紹
說明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安裝、卸載、管理依賴等)?
(2)使用npm安裝插件:命令提示符執(zhí)行npm install [-g] [–save-dev]?
:node插件名稱。?
例:npm install gulp-less –save-dev?
-g:全局安裝。?
將會安裝在C:\Users\Administrator\AppData\Roaming\npm,并且寫入系統(tǒng)環(huán)境變量; 非全局安裝:將會安裝在當(dāng)前定位目錄; 全局安裝可以通過命令行在任何地方調(diào)用它,本地安裝將安裝在定位目錄的node_modules文件夾下,通過require()調(diào)用;
–save:將保存配置信息至package.json(package.json是nodejs項(xiàng)目配置文件);
-dev:保存至package.json的devDependencies節(jié)點(diǎn),不指定-dev將保存至dependencies節(jié)點(diǎn);
為什么要保存至package.json?因?yàn)閚ode插件包相對來說非常龐大,所以不加入版本管理,將配置信息寫入package.json并將其加入版本管理,其他開發(fā)者對應(yīng)下載即可(命令提示符執(zhí)行npm install,則會根據(jù)package.json下載所有需要的包)。?
(3)使用npm卸載插件:npm uninstall [-g] [–save-dev]?
PS:不要直接刪除本地插件包?
(4)使用npm更新插件:npm update [-g] [–save-dev]?
(5)更新全部插件:npm update [–save-dev]?
(6)查看npm幫助:npm help?
(7)查看當(dāng)前目錄已安裝插件:npm list
PS:npm安裝插件過程:從http://registry.npmjs.org下載對應(yīng)的插件包(該網(wǎng)站服務(wù)器位于國外,所以經(jīng)常下載緩慢或出現(xiàn)異常),
解決辦法:
選裝cnpm
說明:因?yàn)閚pm安裝插件是從國外服務(wù)器下載,受網(wǎng)絡(luò)影響大,可能出現(xiàn)異常,如果npm的服務(wù)器在中國就好了,所以我們樂于分享的淘寶團(tuán)隊(duì)干了這事。來自官網(wǎng):“這是一個完整 npmjs.org 鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務(wù)同步。”?
官方網(wǎng)址:http://npm.taobao.org?
安裝:命令提示符執(zhí)行npm install cnpm -g –registry=https://registry.npm.taobao.org?
注意:安裝完后最好查看其版本號cnpm -v或關(guān)閉命令提示符重新打開,安裝完直接使用有可能會出現(xiàn)錯誤?
注:cnpm跟npm用法完全一致,只是在執(zhí)行命令時(shí)將npm改為cnpm。
4.好了,至此,有關(guān)toast的提示,就給小伙伴們和童鞋們方向到這里,謝謝你耐心的閱讀!
????????????? 【下面是我整理的2023年最全的軟件測試工程師學(xué)習(xí)知識架構(gòu)體系圖】
一、Python編程入門到精通
二、接口自動化項(xiàng)目實(shí)戰(zhàn)
三、Web自動化項(xiàng)目實(shí)戰(zhàn)
四、App自動化項(xiàng)目實(shí)戰(zhàn)
五、一線大廠簡歷
六、測試開發(fā)DevOps體系
七、常用自動化測試工具
八、JMeter性能測試
九、總結(jié)(尾部小驚喜)
生命不息,奮斗不止。每一份努力都不會被辜負(fù),只要堅(jiān)持不懈,終究會有回報(bào)。珍惜時(shí)間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!
生命短暫,時(shí)間寶貴,我們無法預(yù)知未來會發(fā)生什么,但我們可以掌握當(dāng)下。珍惜每一天,努力奮斗,讓自己變得更加強(qiáng)大和優(yōu)秀。堅(jiān)定信念,執(zhí)著追求,成功終將屬于你!文章來源:http://www.zghlxwxcb.cn/news/detail-612678.html
只有不斷地挑戰(zhàn)自己,才能不斷地超越自己。堅(jiān)持追求夢想,勇敢前行,你就會發(fā)現(xiàn)奮斗的過程是如此美好而值得。相信自己,你一定可以做到!文章來源地址http://www.zghlxwxcb.cn/news/detail-612678.html
到了這里,關(guān)于Appium+python自動化(二十六)- Toast提示(超詳解)簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!