標籤:
UI自動化相關工具
1、appium平台
2、Apple的UIAutomation
3、Google的UIAutomation
簡單的介紹一下這幾個工具:
1、Appium簡介
Appium使用WebDriver的json wire協議,來驅動Apple系統的UIAutomation庫、Android系統的UIAutomator架構。
Appium在不同平台中使用了標準的自動化APIs,所以在跨平台時,不需要重新編譯或者修改自己的應用。
Appium支援的語言比較多,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl語言等。
2、Apple的UIAutomation
Apple家的UIAutomation是 Xcode內建的測試架構,在Instruments中可運行,可直接錄製指令碼和直接運行。
只使用Apple的UIAutomation,我們只能用javascript來編寫測試案例,而且只能用Instruction來運行測試案例。
3、Google的UIAutomation
Google的UIAutomation是Google內建的UI自動化測試載入器。
只使用Google的UIAutomation,我們就只能用java來編寫測試案例。
Appium介紹
Appium 的核心是一個 網頁伺服器,它提供了一套 REST 的介面。它收到用戶端的串連,監聽到命令,接著在行動裝置上執行這些命令,然後將執行結果放在 HTTP響應中返還給用戶端。
環境搭建
我用了比較簡單的指令碼Python去完成appium指令碼編寫,下面就講一下用Python完成UI自動化,環境搭建如下:
1、安裝Appium
2、安裝Appium python用戶端
其他環境要求
1. IOS
Mac OS X 10.7 or higher, 建議10.9.2
XCode >= 4.6.3, 建議5.1.1
Apple Developer Tools
2. Android
Android SDK API >= 17 (建議18/19)
如何調用Python代碼
1、開啟appium
開啟appium對應的安裝路徑,比如:C:\Program Files (x86)\Appium\node_modules\.bin
在該路徑下,運行:appium 即可啟動,appium預設是自動安裝APK的
如果需要不安裝的話,加個參數即可,啟動命令如下:appium --no-reset
2、調用Python指令碼
先將路徑定位到寫好的Python指令碼main.py的路徑
然後運行命令:
python -m unittest main
Python指令碼簡介
Desired Capabilities
Desired capabilities 是一些索引值對的集合 (比如,一個 map 或者 hash),用戶端將這些索引值對發給服務端,告訴服務端我們想要怎麼測試。比如,我們可以把platformName capability 設定為 iOS,告訴 Appium 服務端,我們想要一個iOS 的 session,而不是一個 Android 的。
desired_capabilities.py
編寫Python指令碼時,需建立2個檔案:desired_capabilities.py和main.py
desired_capabilities.py主要是建立get_desired_capabilities()
一、get_desired_capabilities()
擷取本次會話的參數。這裡主要設定了8個參數。使用者可以根據自己的需求進行調整。
1. platformName,我們測試的目標機器。
2. platformVersion,測試目標裝置的系統版本。
3. deviceName,測試機器的名稱(裝置名稱即可)。
4. appPackage,被測應用的包名(只有Android測試才用)。
5. appWaitPackage,測試時會等待(只有Android測試才用)。
6. app,被測應用檔案的所在位置
7. newCommandTimeout,兩條指令的最長時間間隔。如果超過這個間隔,Appium Server將會終止本次會話。
8. automationName,本次會話所使用的自動化引擎。Android 4.2以下系統請使用Selendroid;IOS、Android 4.2以上(含)請使用Appium。
二、main.py
就是UI的功能性指令碼。
常用方法整理
1、 尋找控制項方法
1) ID : 通過resource-id尋找。注意,測試Android應用時,Appium引擎和Selendroid引擎的id寫法不同,Appium下類似這樣:com.alibaba.mts.mtsdemoapp:id/login_login_button;而Selendroid下id是:login_login_button。所以,如果要寫通用的指令碼,建議使用其他尋找方式。
2) XPATH : 通過xpath尋找。例如尋找一個包含“Add note”字串的TextView控制項:driver.findElement(By.XPATH, "//android.widget.TextView[contains(@text,‘Add note‘)]")。
3) LINK_TEXT : (不支援Android 4.2.1以下)通過控制項的文本文字尋找,比如:driver.findElement(By.LINK_TEXT, “登入”),找到控制項文字為“登入”控制項。注意,它不會匹配“登入吧”、“快登入”等文字。建議使用下面的“PARTIAL_LINK_TEXT”。
4) PARTIAL_LINK_TEXT : (不支援Android 4.2.1以下)類似LINK_TEXT,但是可以匹配“登入吧”、“快登入”等文本的控制項。只要包含“登入”即可。
5) TAG_NAME : 通過控制項類名尋找,比如EditText、Button等等。
6) CLASS_NAME : 通過控制項全類名尋找,比如android.widget.EditText 、android.widget.Button等
這些控制項的屬性都可以用uiautomatorviewer這個工具查看,如所示:
2、 常用操作
1) 滑動螢幕,比如引導頁的滑動
driver.swipe(startx,starty,endx,endy,duration)
開始座標和結束座標,duration表示滑動時間,時間越長滑動越慢左右滑動的話,Y座標不變
2) 點擊按鈕
Driver.click()
3) 等待
Time.sleep(N)
N是等待的時間,以秒為單位
4) 鎖定螢幕
driver.lock(5)
5) 將APP置於後台
driver.background_app(5)
6) 收合鍵盤
driver.hide_keyboard()
7) 開啟通知欄
driver.open_notifications()
8) 檢查是否已安裝
driver.is_app_installed(‘com.example.android.apis‘)
9) 安裝應用到裝置中
driver.install_app(‘path/to/my.apk‘)
10) 從裝置中刪除應用
driver.remove_app(‘com.example.android.apis‘)
11) 類比裝置搖晃
driver.shake()
12) 關閉應用
driver.close_app()
13) 按鍵事件 (Key Event)
給裝置發送一個按鍵事件
driver.keyevent(176)
14)通過MQC檢查
可直接在代碼中輸入MQC內建的檢查指令。
self.driver.shell("log -p i -t MQC-LOG-MASTER screenshot")
appium入門知識