頁面的錯誤提示 Toast,比如:網絡加載問題出現的錯誤、使用者名或者密碼輸入錯誤、銀行卡密碼輸入次數提示等錯誤,這些錯誤的内容一般都會以浮動的方式顯示,而且他們顯示的時間非常的有限,可能是幾秒鐘的時間就會消失掉,不會被點選,無法擷取到他們的焦點,但是在 Android 中有一個叫做 Appium Toast 的工具,在 Android 1.6.x 多的時候就已經開始支援識别 Toast 的内容了,但是它是基于 UIAutomator2 的,是以說呢,在我們啟動 app 的配置檔案中需要增加如下參數即可:
xg_caps['automationName'] = 'uiautomator2'
目錄
1、首先要安裝 UIAutoMator2的包
2、安裝 Selenium
3、綜合案例
4、執行腳本時遇到的問題
5、螢幕截圖
1、首先要安裝 UIAutoMator2的包
// 在終端輸入以下指令
bogon:~ Sirius$ cnpm install appium-uiautomator2-driver
在安裝完成後,按照提示的安裝路徑進行檢視,會發現有如下兩個檔案說明已經安裝成功了:
2、安裝 Selenium
方法一:
在 Terminal 中輸入如下指令: pip install selenium(Python2中的指令)、pip3 install selenium(Python3中的指令),根據自己安裝的環境選擇不同的安裝指令即可
方法二:以 PyCharm 編輯器為例
選擇 PyCharm 菜單—>Preferences—>Project—>Project Interpreter,在右側的對話框中找到 pip 後,輕按兩下,在出現的對話框中進行如下2不操作即可
驗證是否安裝成功,建立一個 py 檔案,輸入 from selenium ,如果有提示說明安裝成功,如果沒有安裝成功,可以嘗試用第一種方法進行安裝
3、綜合案例
- 測試環境
- java jdk version:1.8.0
- appium version:1.13.0
- selenium version:3.11.0
- device android version:6.0.1
- python version:3.6.2
- test app wandoujia version:5.71.21
- 測試場景
進入到登入界面,隻輸入使用者名和密碼,不選中 同意複選框,直接點選登入,擷取提示的 Toast 内容 “請先勾選同意使用者許可協定和隐私政策說明”
- 測試腳本
xg_toast.py
-*- coding:utf-8 -*-
from capability import driver
from selenium.webdriver.support.ui import WebDriverWait
def login():
// 點選左上角的主菜單導航按鈕
driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click()
// 點選
driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click()
// 點選又上角的設定按鈕
driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click()
driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear()
driver.find_element_by_xpath('//android.widget.EditText[@text="手機号/email"]').send_keys('[email protected]')
driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq')
driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
toast_message = '請先勾選同意使用者許可協定和隐私政策說明'
message = '//*[@text=\'{}\']'.format(toast_message)
// 進入元素顯示等待
toast_content = WebDriverWait(driver, 5).until(lambda x:x.find_element_by_xpath(message))
print(toast_content.text)
if __name__ == '__main__':
login()
Tip:如果擷取的内容中包含中文,必須在腳本的第一行添加 # coding=utf-8 ,要不然會因為編碼的問題而導緻文字識别失敗
4、執行腳本時遇到的問題
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing
the command. Original error: UIAutomation2 is only supported since Android 5.0 (Lollipop). You could still use
other supported backends in order to automate older Android versions.
// 處理指令時發生未知的伺服器端錯誤。原始錯誤:無法找到帶有OS 5.1.1的活動裝置或仿真器。UiAutoMe2僅支援Android 5(Lollipop).您仍然可以使用其他支援的後端來自動化舊的Android版本
也就是說,我的夜神模拟器的Android版本太低了,查了很多方法來更新Android的系統版本,都沒有搞定,重新下載下傳了模拟器也不行,有的說搞個多開就完事了,但是 Mac 的好像還不支援多開。最後選擇了一個 叫做 網易MuMu 的模拟器,安裝也很簡單,啟動也很快,預設端口是:22471
網易MuMu 網盤連結:https://pan.baidu.com/s/1HqrWGjuavzoX64IiSt36Qw 提取碼: 1hg8
5、螢幕截圖
螢幕截圖存在的好處:在自動化測試的過程中,有的時候會遇到各種異常情況,為了能夠更好的定位,有的時候除了捕捉日志之外,還需要對裝置的狀态進行截屏,這樣更具有說服力,畢竟有圖有真相嗎
- 螢幕截圖的方法
①、使用 save_screenshot() 可以直接儲存目前螢幕的截屏圖檔到目前腳本所在的位置
driver.save_screenshot('toast.png')
②、使用 get_screenshot_as_file() 可以将截屏後的圖檔存放到指定的檔案路徑
driver.get_screenshot_as_file('./toast1.png')
5.1 截屏案例
- 測試場景
進入到登入界面,隻輸入使用者名和密碼,不選中 同意複選框,直接點選登入,擷取提示的 Toast 内容 “請先勾選同意使用者許可協定和隐私政策說明”,進行截屏
screen.py
from capability import driver
def login():
// 點選左上角的主菜單導航按鈕
driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click()
// 點選
driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click()
// 點選又上角的設定按鈕
driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click()
driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear()
driver.find_element_by_xpath('//android.widget.EditText[@text="手機号/email"]').send_keys('[email protected]')
driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq')
driver.find_element_by_xpath('//*[@class="android.widget.CheckBox"]').click()
driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
// 截屏
driver.save_screenshot('toast.png')
driver.get_screenshot_as_file('./toast1.png')
if __name__ == '__main__':
login()