思考:手機APP上的必填或錯誤文本提示一般1-2s就會消失,比較難定位,所以一般的固定元素定位方式是不可用的,那我們如何定位toast呢?
前提:1.Appium1.6.3以上(包括1.6.3)
2.下載安裝node.js(官網下載即可)
3.下載安裝uiautomator2及其2個配置文件(appium-uiautomator2-server-debug-androidTest.apk和appium-uiautomator2-server-v2.8.0.apk)
4.下載安裝Android SDK(tools文件夾下必須要有zipalign.exe工具,否則沒法啟動app)
5.真機或模擬器版系統版本要求Android 5.0以上
環境准備:
一、下載安裝node.js
1.進入官網下載:https://nodejs.org/en/download/, 選擇適合自己操作系統的安裝文件,下載node js,並安裝(這里安裝路徑:C:\Program Files\nodejs)
以管理員權限打開cmd命令窗口
驗證nodejs是否安裝成功:node -v
驗證npm是否安裝成功:npm -v
2.改變原有路徑
(1)我們要先配置npm的全局模塊的存放路徑以及cache緩存的路徑,例如我希望將以上兩個文件夾放在NodeJS的主目錄下,便在NodeJs下建立"node_global"及"node_cache"兩個文件夾,輸入以下命令改變npm配置
npm config set prefix "C:\Program Files\nodejs\node_global" npm config set cache "C:\Program Files\nodejs\node_cache"
(2)在系統環境變量添加系統變量NODE_PATH,輸入路徑C:\Program Files\nodejs\node_global\node_modules,此后所安裝的模塊都會安裝到該路徑下
二、安裝淘寶npm(cnpm)
1.輸入以下命令安裝cnpm(注:“-g”這個參數意思是裝到global目錄下,也就是上面說設置的“C:\Program Files\nodejs\node_global”里面)
驗證cnpm是否安裝成功:cnpm -v
npm install -g cnpm --registry=https://registry.npm.taobao.org
2.添加系統變量path的內容
因為cnpm會被安裝到C:\Program Files\nodejs\node_global下,在系統變量path下添加該路徑即可
三、安裝Appium
輸入以下命令安裝appium(1.8.1)
cnpm install -g appium@1.8.1
驗證Appium是否安裝成功:Appium -v
appium安裝成功后,里面可以看到uiautomator2及其2個配置文件
實際操作
一、啟動Appium
appium --session-override -p 4723 -bp 4768 -U emulator-5554 -p 監聽端口號 -u 模擬器名稱 -bp 隨意
二、運行模擬器
閃電或夜神模擬器
三、編寫腳本:
Step1:初始化
在capability配置內部增加:desired_caps[‘uiautomationName’]=’ uiautomator2’
DriverConfigure.py(配置腳本)
# coding:utf-8 ''' Created on 2018-11-7 @author: 丹姐 Project:配置驅動 ''' from appium import webdriver import time # appium遠程啟動app # 定義獲取驅動方法 def get_driver(): try: desired_caps ={} desired_caps['automationName'] = 'uiautomator2' #引入uiautomator2,用於定位toast desired_caps['platformName'] = 'Android' # 設備系統 desired_caps['platformVersion'] = '5.1.1' # 設備系統版本 desired_caps['deviceName'] = 'emulator-5554' # 設備名稱 desired_caps['app'] = r'E://app-debug.apk' # 測試app desired_caps['appPackage'] = 'com.xywg.smartsitegov' # 獲取包名 desired_caps['appActivity'] = 'com.xywg.smartsitegov.activity.LaunchActivity' # 獲取activity啟動 desired_caps['unicodeKeyboard'] = 'True'#支持unicode輸入法 desired_caps['resetKeyboard'] = 'True'#重置鍵盤 desired_caps['noReset'] = 'true' # 模擬用戶非首次啟動 driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) time.sleep(5) # 等待5秒 return driver except Exception as e: raise e
Step2:定位Toast元素
(1)定義toast文本內容
(2)定義元素路徑
(3)定義等待時間
(4)組合文本內容和路徑進行定位:用format()連接路徑和文本內容
BasePage.py(基類腳本)
# 重寫獲取toast方法 def find_toast(self, message, timeout, poll_frequency): u'''獲取toast信息文本並驗證''' message1 = "//*[@text=\'{}\']".format(message) element = WebDriverWait(self.driver, timeout, poll_frequency).until( EC.presence_of_element_located((By.XPATH, message1))) return element.text
Step3:頁面調用獲取toast方法
XXXPage.py(頁面腳本)
#獲取上傳圖片提示 photo_toast = self.find_toast(u'請上傳圖片', 10, 0.01) print(u'圖片上傳必填提示:',photo_toast)
四、運行腳本
執行測試用例