如何讓電腦自動化測試程式知道如何操作手機應用程式?(Locator)
人對於手機的操作十分的熟練,靠兩根手指透過點擊、滑動、長按、放大、縮小等動作,就可以操作手機應用程式。
因此對於電腦來說手機自動化測試的挑戰有兩個。
- 點擊到正確的位置(Locator),人有眼睛可以正確的判別圖示與位置,但是電腦怎麼辦找到正確的位置呢?
- 模擬一些手指操作行為,例如點擊、滑動、長按、放大、縮小等動作。
這篇文章主要針對如何讓電腦可以找到正確的位置做進一步的說明。同樣我們會用 appium 與Andorid 為範例說明。
如何找到點擊位置(Locator)?
在 Windows/Android 平台上,主要我們要使用的工具是UIAutomatorViewer。
(如果是 Mac 可以使用Appium inspector)
這個工具其實是 Android SDK 的一部分,通常在
\android-sdk\tools\uiautomatorviewer.bat |
測試情境 – 小算盤
我們用手機小算盤應用程式為例子,要如何可以正確的點到小算盤上面的數字?
1. 於電腦的Android 模擬器 (或是實體手機)啟動小算盤
2. 啟動 uiautomatorviewer.bat
3. 畫面上方有綠色手機的圖示,點下後就會開始分析該手機應用程式。結果如下圖所示:
4. 右下方有些關鍵的資訊。這些資訊就是電腦自動化測試程式用來定位 (locator)點擊使用。
Locate Elements by ID, Name…and..?
透過 uiautomatorviewer得到這些資訊之後,一般來說我們要定位一個點擊的位置可以透過下列方式
程式範例(紅色為 uiAutomatorViewer所對應的值) | |
resource-id | WebElement digit_7=driver.findElement(By.id(“com.android.calculator2:id/digit7“));digit_7.click(); |
text | WebElement digit_7=driver.findElement(By.name(“7“));digit_7.click(); |
class | WebElement digit_7=driver.findElement(By.className(“android.widget.Button“));digit_7.click();
對於使用 className 來說,這個例外。因為所有的數字的 className 都是”android.widget.Button”所以要另外使用 findElements,利用陣列的方式點擊。 例如下面例子: List<WebElement> digits=driver.findElements(By.className(“android.widget.Button“)); |
content-desc | 這個例子,因為 “7”剛好沒有定義 content-desc。如果有的話可以用下列方式處理。WebElement plusSign=driver.findElementByAccessibilityId(“7“);或是使用
AndroidUIAutomatorWebElement equal=driver.findElementBy.AndroidUIAutomator(“newUiSelector().description(\”7\”)”); |
Android UiSelector
另外可以參考 AndroidUIAutomator,因為這個函數提供許多不同的定位方法。
- WebElement equal=driver.findElementByAndroidUIAutomator(“new UiSelector().resourceId(\”com.android.calculator2:id/equal\“)”;
- WebElement equal=driver.findElementBy.AndroidUIAutomator(“newUiSelector().description(\”equals\”)”);
http://developer.android.com/reference/android/support/test/uiautomator/UiSelector.html