1. 程式人生 > >如何使用UIAutomation進行iOS 自動化測試

如何使用UIAutomation進行iOS 自動化測試

轉自http://www.cnblogs.com/vowei/archive/2012/08/10/2631949.html

大神的文章,大神的翻譯

寫在前面

研究iOS的自動化測試也有些日子了,剛開始的時候,一直苦於找不到什麼好的資料,只能從Apple的官網查閱相關的API文件,只可惜,Apple對開發者來說實在是不怎麼友好,文件寫得相當的粗略,對於初學者來說有一定的難度。

本來是打算自己動手寫一篇關於iOS的UI自動化測試的入門級別的介紹性文件的,但想起來後面在具體解決一些問題的時候,收藏一篇很好的Blog,很全面地介紹瞭如何使用UIAutomation的JavaScript Libraries

做iOS程式的自動化測試。如果作者早點看到這篇文章,應該要少走一些彎路,這裡沒有創意性的它他翻譯成中文,希望對你們有一些幫助。

翻譯正文:

快速入門

自動化測試程式碼可以“在你的睡著的時候”很好地幫你測試你的應用程式。它可以讓你能夠快速地跟蹤你程式中的迴歸和效能方面的問題,這樣你就不用擔心你新增的功能會影響到你之前已經完成開發的程式了。

隨著iOS4.0的釋出,蘋果公司同時釋出了一個名為UIAutomation的測試框架,它可以用來在真實裝置和iPhone模擬器上執行自動化測試。但官方關於UIAutomation的文件相當的有限,在網路上也沒有太多的資源可以查詢的。本文將向你展示你如何將UIAutomation整合到你的工作流程當中去。

除此之外,包括在Xcode中的OCUnit測試框架也可以用來為你的應用程式編寫單元測試。

1. 第一個UIAutomation測試指令碼

  • 使用iOS 模擬器
  • 使用iOS裝置

2. 處理UIAElement和元素可訪問性(Accessibility)

  • UIAElement層次結構
  • 模擬使用者操作

3. 經驗分享(讓你的生活變得更簡單)

  • 類庫Tune-up介紹
  • 匯入外部指令碼
  • 使用強大的命令列
  • 使用錄製互動功能
  • 當遇到問題時,加上“UIATarget.delay(1);”

4. 高階互動

  • 處理非預期和預期的提示框(alerts)
  • 多工
  • 螢幕方向

5. 總結

  • 有用的連結
  • 一個視訊

1. 你的第一個UIAutomation測試指令碼

UIAutomation的功能測試程式碼是用Javascript編寫的。UIAutomation和Accessibility有著直接的關係,你將用到通過標籤和值的訪問性來獲得UI元素,同時完成相應的互動操作。

下面讓我們來編寫我們的第一段測試程式碼。

使用iOS模擬器

1. 下載示例應用程式TestAutomation.xcodeproj,並開啟它。這個專案是一個很簡單的包含2個tab的tabbar應用程式。

2. 確保選中如下圖所示的“TestAutomation > iPhone 5.0 Simulator”模式(或許你已經切換成5.1了,因此它可能是iPhone5.1模擬器)。

clip_image001[4]

3. 啟動Instruments(Product > Profile),或者通過⌘I。

4. 選擇左邊的iOS Simulator,然後再選擇Automation模板,然後點選“Profile”。

clip_image002[4]

5. Instruments就已經啟動好後,然後直接開始錄製了。這裡先停止錄製,(紅包按鈕或者⌘R)。

clip_image004[4]

6. 在左邊的Scripts視窗,點選“Add > Create”建立新的指令碼。

clip_image005[4]

7. 在指令碼編輯器裡,輸入下面的程式碼

1 2 3 4 var target = UIATarget.localTarget(); var app = target.frontMostApp(); var window = app.mainWindow(); target.logElementTree();

clip_image007[4]

8. 重新執行這段指令碼⌘R(不需要儲存)。指令碼跑起來後,你可以在日誌打完後停止它。

clip_image009[4]

贊一個!我們就這樣完成了我們的第一個UIAutomation測試用例。

使用iOS裝置

你除了將你的測試用例執行模擬器上,也可以將它執行在一個真實的裝置上。不過,自動化測試用例只能執行在支援多工的:iPhone 3GS,iPad,iOS > 4.0等裝置上。遺憾的是不管iPhone 3G的系統版本是什麼,都不支援。

下面是如何操作:

1. 通過USB介面連線上你的iPhone。

2. 選擇 “TestAutomation > iOS Device”模式。

3. 確保Developper profile設定成Release模式(而不是Ad-Hoc Distribution profile)。預設情況下,profiling是設定成Release模式的(因為沒有必要將profile設定成Debug模式)。

clip_image010[4]

5. 後面的步驟請參考前面模擬器部分。

2. 處理UIAElement和元素可訪問性(Accessibility)

UIAElement層次結構

Accessibility和UIAutomation有密切的聯絡:如果一個控制元件的Accessibility是可以被訪問的,你就可以設定和讀取它的值,作相關的操作,而當一個控制元件的Accessibility不可見時,你就沒有辦法通過automation訪問它。

你可以通過Interface Builder,或者通過在程式裡設定isAccessibilityElement屬性的方式來設定一個控制元件的Accessibility或者可被自動化。當你設定container view(即:一個檢視包含其它的UIKit元素)的accessibility時,你必須注意。你設定了整個View的accessibility將會“隱藏”它的子檢視的accessibility,例如:在示例專案中,你不能將outlet檢視設定成可訪問的,否則它所有的子控制元件將都不可以訪問了。在任何時候,logElementTree都是你忠實的朋友:它將當前介面的所有可被訪問的元素都列印在日誌裡。

每一個可以被訪問的UIKit控制元件都可以用一個Javascript物件來描述,它就是一個UIAElement。UIAElement有幾個屬性:name, value, elements, parent。你的主視窗包含很多的控制元件,它們是以UIKit層次的方式定義的,這些UIKit層次結構對應的是UIAElement的層次樹。例如:前面的測試程式碼中,通過呼叫logElementTree,我們可以得到如下面所示的樹結構:

+- UIATarget: name:iPhone Simulator rect:{{0,0},{320,480}}

| +- UIAApplication: name:TestAutomation rect:{{0,20},{320,460}}

| | +- UIAWindow: rect:{{0,0},{320,480}}

| | | +- UIAStaticText: name:First View value:First View rect:{{54,52},{212,43}}

| | | +- UIATextField: name:User Text value:Tap Some Text Here ! rect:{{20,179},{280,31}}

| | | +- UIAStaticText: name:The text is: value:The text is: rect:{{20,231},{112,21}}

| | | +- UIAStaticText: value: rect:{{145,231},{155,21}}

| | | +- UIATabBar: rect:{{0,431},{320,49}}

| | | | +- UIAImage: rect:{{0,431},{320,49}}

| | | | +- UIAButton: name:First value:1 rect:{{2,432},{156,48}}

| | | | +- UIAButton: name:Second rect:{{162,432},{156,48}}

clip_image001[6]

你可以通過下面的程式碼來訪問文字框:

1 2 var textField = UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];

你可以選擇通過從0開始的索引或者這個元素的名稱來訪問這個元素,例如:你也可以通過下面的程式碼來訪問文字控制元件。

1 2 var textField = UIATarget.localTarget().frontMostApp().mainWindow().textFields()["User Text"];

後一種方式更加清晰明瞭,應該多使用。你可以通過Interface Builder設定UIAElement的name屬性,

clip_image002[6]

或者通過編寫程式碼的方式:

1 2 myTextField.accessibilityEnabled = YES; myTextField.accessibilityLabel = @"User Text";

你現在可以看到,通過accessibility屬性可以被UIAutomation用來找到不同的控制元件。這非常的清晰,因為,第一,你只要學習一個測試框架;第二,通過編寫自動化測試程式碼,你同時還可以保證你的程式是可以被訪問的。因此,每一個UIAElement物件的子控制元件可以通過下面的方法進行訪問:

buttons(), images(), scrollViews(),textFields(), webViews(), segmentedControls(), sliders(), staticTexts(), switches(), tabBar(),tableViews(), textViews(), toolbar(), toolbars() 等等……

你可以通過如下程式碼在tabbar上訪問第一個tab:

1 2 var tabBar = UIATarget.localTarget().frontMostApp().tabBar();

相關推薦

如何使用UIAutomation進行iOS 自動化測試(Part II)

3. 經驗分享(讓你生活變得更簡單) 類庫Tune-up介紹 現在你應該基本上知道如何編寫測試程式碼了。但你慢慢地會發現,你會經常寫到一些重複的,冗餘的,黏糊糊的程式碼,像下面一樣: 1 2 3

如何使用UIAutomation進行iOS 自動化測試

轉自http://www.cnblogs.com/vowei/archive/2012/08/10/2631949.html 大神的文章,大神的翻譯 寫在前面 研究iOS的自動化測試也有些日子了,剛開始的時候,一直苦於找不到什麼好的資料,只能從Apple的官網查閱相關的API文件,只

如何使用UIAutomation進行iOS 自動化測試(Part I)

寫在前面 研究iOS的自動化測試也有些日子了,剛開始的時候,一直苦於找不到什麼好的資料,只能從Apple的官網查閱相關的API文件,只可惜,Apple對開發者來說實在是不怎麼友好,文件寫得相當的粗略,對於初學者來說有一定的難度。 本來是打算自己動手寫一篇關於iOS的U

UIAutomation---IOS自動化測試的工具

xcode中自帶的Instuments工具可以用來進行APP的自動化測試, 以及用於進行記憶體洩露, 檔案讀寫操作等的效能分析. 第一部分: 熟悉Instruments的UIAutomation. 首先, 選取xcode->Open Developer Tool-&g

Selenium+Python進行web自動化測試(Demo+API)

mod amp cep path chrome all 配置使用 nas img Selenium官方網站 http://selenium-python.readthedocs.io/ 配置使用環境 下載相應的瀏覽器驅動, Firefox 是默認的 本文以 chrome 為

Selenium基於Python 進行 web 自動化測試

對象 little syn can chang 執行 pri lba 版本 From: https://www.cnblogs.com/hanxiaobei/p/6108677.html 配置使用環境 下載相應的瀏覽器驅動, Firefox 是默認的 本文以 chrom

【Mac + Appium學習(四)】之常用的IOS自動化測試API總結 Selenium2+python自動化36-判斷元素存在 Appium+Python3+iOS定位元素

環境: Appium:1.9.1 Appium-desktop:1.7.1 Xcode:10.0 IOS:iPhone5S(10.3.3) Mac:10.13.6   ①獲取手機螢幕size:長、寬 《Appium Appium 1.9 版本 BUG:使用

【Mac + Appium學習(四)】之常用的IOS自動化測試API總結

git return click 支持 wip ces 其他 報錯 xxx 環境: Appium:1.9.1 Appium-desktop:1.7.1 Xcode:10.0 IOS:iPhone5S(10.3.3) Mac:10.13.6 ①獲取手

初識 iOS 自動化測試框架 WebDriverAgent

像素 測試開發 文章 hub 遠程控制 target 管理工具 ans name 微信跳一跳最近很火,外掛代練什麽的也越來越多。作為一只程序猿,對外掛的原理產生了強烈的好奇心,於是埋頭研究了一階段,註意到了 WebDriverAgent 這套 Facebook 出

Appium自動化—淺談iOS自動化測試環境搭建

在日常的測試工作中,我們會發現有些測試工作重複率極高,測試人員需要花費大量的時間進行這些重複性的測試,浪費了大量的人力與時間。若能夠將常用的測試場景進行自動化,那必定能節省許多的人力與時間。作為一個初次步入測試行業的小白,也十分渴望能夠使用自動化來分擔測試工作。上網搜尋了很多的資料,瞭解了很多工

iOS自動化測試的那些乾貨

前言 如果有測試大佬發現內容不對,歡迎指正,我會及時修改。 大多數的iOS App(沒有持續整合)迭代流程是這樣的 也就是說,測試是釋出之前的最後一道關卡。如果bug不能在測試中發現,那麼bug就會抵達使用者,所以測試的完整性和可靠性十分重要。 目前,大多數App還停留在人工測試階段,人

Airtest之iOS自動化測試環境部署

[本文出自天外歸雲的部落格園] 簡介 這個Airtest IDE是通過iOS-Tagent來操作iPhone的 前提 1. 得有個iOS開發者賬號,然後才能在developer.apple.com的account下看到管理自己的證書入口,否則看不到 2. 將要下載的iOS-Tagent需要在xcod

安裝protractor進行前端自動化測試-web ui自動化測試

安裝protractor進行前端自動化測試 介紹 protractor 是個 Node.js 程式。所以首先得安裝 Node.js。然後就可以使用npm 安裝 protractor 了。 通常 protractor 使用 Jasmine 測試框架作為他的測試介面。 下面的

如何進行前端自動化測試

前端測試是前端工程方面的重要分支,有過一些探索,這裡簡單分享一下。 首先,還是要強調一點: 前端是一種特殊的GUI軟體 看過我最近一年內做前端工程方面相關分享的人可能有印象,我總是在強調這一點。前端測試也跟這個理論基礎有所關聯。 在這裡,我還想吐槽一下: API測試方法論在測試GUI時並不能解決所有問題。 與

初嘗phpunit進行介面自動化測試

<?php function do_Post($url, $fields, $extraheader = array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURL

如何進行iOS效能測試-------Instruments 使用教程

INSTRUMENTS使用者指南介紹     本文件組織結構     第一章    INSTRUMENTS快速入門         1.1    啟動INSTRUMENTS         1.2    建立一個跟蹤文件         1.3    瀏覽跟蹤文件視窗        1.4    示例:快速

Robot + Appium 搭建 iOS 自動化測試環境

一、iOS安裝條件  需要建立設定的移動平臺執行APPium測試。如以下的平臺資訊:  Mac OS 10.12.6 Xcode 9 Apple開發工具(IPhone simulator SDK,command line tools)。 二、Appium在OS X中安裝

搭建IOS自動化測試環境-Appium

一、安裝Homebrew工具1、簡介Homebrew官網http://brew.sh/index_zh-cn.htmlHomebrew是神馬linux系統有個讓人蛋疼的通病,軟體包依賴,好在當前主流的兩大發行版本都自帶了解決方案,Red ha有yum,Ubuntu有apt-g

Instruments進行iOS效能測試

週末頂著39度烈日去拜訪了畢業後就沒見的同學(杭州A公司),請教 Instruments效能測試知識,因為太久時間沒見,閒話太多,講解的時間並不長,回來之後怕自己忘記,翻開小本本,趁熱打鐵簡單梳理一遍。 Instruments下的工具很

iOS自動化測試之自動安裝ipa的資料

一、打包IPA 二、安裝IPA 1、網站分享安裝 2、程式碼命令列安裝 三、參考平臺 通過網上的資料找到有三種方式安裝ipa