天天看點

Appium(六)Toast 定位 + Android版本問題的解決以及 Selenium 的安裝+螢幕截圖

       頁面的錯誤提示 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
           

在安裝完成後,按照提示的安裝路徑進行檢視,會發現有如下兩個檔案說明已經安裝成功了:

Appium(六)Toast 定位 + Android版本問題的解決以及 Selenium 的安裝+螢幕截圖

2、安裝 Selenium 

方法一:

在 Terminal 中輸入如下指令: pip install selenium(Python2中的指令)、pip3 install selenium(Python3中的指令),根據自己安裝的環境選擇不同的安裝指令即可

方法二:以 PyCharm 編輯器為例

選擇 PyCharm 菜單—>Preferences—>Project—>Project Interpreter,在右側的對話框中找到 pip 後,輕按兩下,在出現的對話框中進行如下2不操作即可

Appium(六)Toast 定位 + Android版本問題的解決以及 Selenium 的安裝+螢幕截圖

驗證是否安裝成功,建立一個 py 檔案,輸入 from selenium ,如果有提示說明安裝成功,如果沒有安裝成功,可以嘗試用第一種方法進行安裝

3、綜合案例

  • 測試環境
  1. java jdk version:1.8.0
  2. appium version:1.13.0
  3. selenium version:3.11.0
  4. device android version:6.0.1
  5. python version:3.6.2
  6. 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 

Appium(六)Toast 定位 + Android版本問題的解決以及 Selenium 的安裝+螢幕截圖

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