成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

IOS9每天多一點了解2:UI測試

移動開發
自動化測試用戶界面工具對于開發軟件來說是非常有用的,他可以快速的幫你定位到問題。一套成功的測試流程,可以為你最終發布軟件帶來信心。在iOS平臺上,我們使用 Automation 來完成這個工作。這要打開一個單獨的應用 Instruments,然后編寫和運行 JavaScript 腳本。整個流程痛苦且漫長。

自動化測試用戶界面工具對于開發軟件來說是非常有用的,他可以快速的幫你定位到問題。一套成功的測試流程,可以為你最終發布軟件帶來信心。在iOS平臺上,我們使用 Automation 來完成這個工作。這要打開一個單獨的應用 Instruments,然后編寫和運行 JavaScript 腳本。整個流程痛苦且漫長。

UI Testing

在Xcode7中,蘋果介紹了一種新的方式來管理你的應用界面的測試工作。UI testing 允許你對 UI 元素進行查找,交互,驗證屬性和狀態。在 Xcode7 中,UI testing 伴隨著測試報告,并且和單元測試一起運行。 XCTest 是在 Xcode 5 時融入到測試框架的,在Xcode7 中,新增了對 UI 的測試能力。允許在特定點設置斷言,查看UI當時的狀態。

Accessibility(輔助功能)

為了 UI Testing 能夠工作,框架需要和你的眾多元素直接建立連接,然后安排好操作。你可以設定義特別的點,或者在某個 UI 上創建 tweak,然后指定點擊或者滑動操作。但是這在不同尺寸設備上就失效了。

這時候 accessibility,就能提供幫助了。Accessibility 是蘋果早就發布的一個框架,提供給有一定身體障礙(例如失明)的人使用,讓他們能夠操作和使用你的應用。他把你的 UI 以語義話的方式提供給這些用戶,允許他們進行豐富的操作。你可以(也應該)讓你的元素具備Accessibility的能力。有很多原因,比如說自定義的控件,不能夠被自動發現。

UI Testing 有能力通過你的應用提供給 Accessibility 的特性,來對不同尺寸的設備進行測試提供解決方案。也保證了你在重新組織了一下你的 UI 之后,不必全部重新寫一套測試。不僅能夠幫助你測試自己的 UI,同時也能夠對你的應用,更好的支持有一定身體障礙的人群使用而帶來幫助。

UI 錄制

一旦你設置好了你的 accessible UI,你將要創建 UI 的測試項。編寫 UI 的測試是非常耗時,無聊的,如果你的 UI 比較復雜,也是非常困難的。感謝 Xcode7, 蘋果介紹了 UI Recording. 他允許你新建、或者在已有項目中創建測試。當你打開時,測試代碼會隨著你在設備或模擬器上操作自動創建。好了,簡介到此結束,是時候用一個例子來看一下,如何使用了。

創建 UI 測試例子

我們將通過UI Testing套件來創建一個實例,展示 UI Testing 是如何工作的。最終的demo 可以在Github下載,你可以跟著我們一起來練習和查看結果。

創建

在Xcode7中,當你創建新項目時,如果選擇包含 UI Tests,將會為你創建一個新的 target,你可以在彈出框中設置所有你想要的配置。

 

選中Include UI Tests

本項目非常簡單,但已經足夠幫我們演示 UI Testing 在 Xcode 7 中是如何工作的了。

 

storyboard 界面

這里有一個 menuViewController,里面包含一個 switch 和一個 button。點擊 button,可以 push 到  detailViewController 頁面。當 switch 的狀態為 off 的時候,是禁止 push 的。詳細頁面有一個按鈕和一個標簽,點擊按鈕可以增加標簽的值。

使用 UI Recording

一旦UI控件創建好,并且寫好了方法。我們就可以寫測試單元,確保代碼的變化,不會影響方法的效果。

The XCTest UI Testing API

在我們錄制測試的動作之前,我們需要決定斷言放在哪里。為了能夠測試我們的UI,我們可以使用 XCTest Framework,他現在擴充了三個新的 API。

  • XCUIApplication 這是你要測試的應用的代理,他能夠把你的應用啟動起來,并且每次都在一個新進程中。這可能會花一點兒時間,但這意味著每次要測試你的應用時,他都會把需要處理的工作完成,保持一個干凈的,全新的狀態。
  • XCUIElement 這是你要測試的應用的 UI 元素的代理。元素都有類型和唯一標識。你可以結合使用來找到你的元素在哪里,這些元素以樹狀結構組合,構成了你的應用的表現形式。
  • XCUIElementQuery 當你要要查找元素時,會用到 XCUIElementQuery, 每一個 XCUIElement 基于一個查詢。這個查詢必須在你的元素樹上找到對應的元素,否則就會失敗。異常信息會提示不存在,你可以去檢查一下是否展現在樹上了。XCUIElementQuery 具有通用性,如果你查找一個輔助功能支持的元素,查詢會返回一組結果。

現在我們準備好寫測試了,通過這個測試來進一步解釋提到的這些API。

Test 1 - 確保switch關閉時,導航不能生效

首先我們定義一個測試方法。

  1. func testTapViewDetailWhenSwitchIsOffDoesNothing() { 
  2.  

 

定義好方法后,我們讓光標移到方法中,點擊Xcode窗口底部的錄制按鈕。

 

recording

現在應用啟動起來了,點擊一下 switch, 讓其處于關閉狀態,然后點擊一下“View Detail”按鈕,下面這些代碼會自動插入到 `testTapViewDetailWhenSwitchIsOffDoesNothing`方法中.

  1. let app = XCUIApplication() 
  2.  
  3. app.switches["View Detail Enabled Switch"].tap() 
  4.  
  5. app.buttons["View Detail"].tap() 

現在再點一下錄制按鈕,錄制會停止下來。可以看到,實際上并沒有 push 到 detailViewController 頁面。但這時測試并不知道,我們要加個斷言,判斷一下沒有變化。我們可以比較導航欄的標題值,這并不優雅,但當前演示就夠了。

  1. XCTAssertEqual(app.navigationBars.element.identifier, "Menu"

添加了這一行斷言后運行,發現測試還是能夠通過。如果你把導航欄的標題改為“Detail”,你會發現測試通過不了了。下面試最終的測試代碼,加了一些解釋行為的注釋。

 

test 1

#p#

Test 2 - 確保 switch 的狀態為 on 時,導航可以正常工作

第二個測試前面的非常相似,我們就不細講了。唯一的區別是switch是可用狀態,所以應用會加載詳細頁面到屏幕上。XCTAssertEqual 方法來驗證是否正確。

 

code 2

Test 3 - 確保增長按鈕確實增加了標簽的值

在這個測試中,我們要驗證點擊了增長按鈕,標簽的值是否會加1.前兩行代碼和前面的例子很像,我們復制過來。

  1. let app = XCUIApplication() 
  2.  
  3. // Tap the view detail button to open the detail page. 
  4.  
  5. app.buttons["View Detail"].tap() 

下一步我們要得到button,我們將多點擊幾下。所以我們要把按鈕作為一個變量。我們不必手寫代碼和 debug 他。再次錄制并且點擊一下 increase 的按鈕,這會自動給你添加下面的代碼。

  1. app.buttons["Increment Value"].tap() 

我們停止錄制,把代碼改成下面這樣。

  1. let incrementButton = app.buttons["Increment Value"

這種方法,讓我們不必手動編寫代碼,同樣的方式,我們獲的 lable 變量。

  1. let valueLabel = app.staticTexts["Number Value Label"

現在我們得到了能夠交互的感興趣的元素。下面這個測試中,我們測試點擊10次 button 按鈕,看標簽的值是否隨之增長。我們可以錄制10遍,但既然我們得到了變量,我們可以寫一個循環來測試它。

 

code 3

這三個測試離一個完整的測試距離甚遠,但給你展示了一個很好的開始,你可以輕松的擴展開來。為什么不寫一個自己的測試練習一下呢。比如去驗證一下 button 是 enable 的 時候,你可以在switch 關閉的情況下導航成功呢?

當錄制發生錯誤時

有時候你發現你在錄制的時候,點擊了一個元素,但是產生的代碼看起來不正確。通常這是由于你的元素對于 Accessibility 是不可用的。為了確定是否是這個原因,你可以打開Xcode的Accessibility Inspector。

 

accessiblity inspector

一旦打開Accessibility Inspector,如果你按下CMD+F7,鼠標懸浮在元素上時,你可以在熱點下面,看到完整的元素的信息。這能夠在你找不到元素時給你提供一些線索。

一旦你找到問題所在,你可以打開 Interface Builder.在屬性攔里找到 Accessibility 欄。他允許你設置元素的 accessibility。這是個強大的工具,設置你的圖形接口的 accessibility 屬性。

 

accessibility panel

當測試失敗時

當測試失敗時,如果你不確定為什么?有很多辦法能夠幫你修復錯誤。首先,你可以去測試報告里看一看。

 

testFailure

當你打開這個視圖,將鼠標懸停在某一步上時,你會發現在方法的右面有一個小的眼睛圖標。點擊一下這個眼睛圖標,會給你一個當時的截圖,你能夠清晰的看到當時你的UI的狀態以便發現錯誤。

和單元測試一樣,你可以設置斷點,允許你更方便的發現問題。你可以輸出UI的層次結構,元素的屬性等,然后找到原因。

為什么要進行UI測試

UI自動化測試是一個很好的辦法,為你在修改應用時,提高信心,并提供質量保證,。我們已經看到了,在 Xcode 中添加 UI 測試和運行是多么簡單。他不僅幫助你發現問題,并且能夠對有部分功能障礙的人使用你的應用提供幫助。

Xcode 的一個特別好的特性是,可以從 continuous integration server 來測試你的應用。這個可以利用 Xcode 的機器人來進行測試,并且 from the command line 意味著,如果一個測試失敗,你會第一時間被通知到。

責任編輯:倪明
相關推薦

2015-07-17 11:12:43

IOS搜索API

2015-07-27 09:04:33

ios9

2015-08-03 10:03:09

iosuistack vie

2015-08-07 11:07:21

IOS9code covera每天積累一點

2019-06-17 06:18:27

邊緣計算物聯網霧計算

2015-07-02 17:32:28

iOS 9蘋果

2019-06-26 05:14:32

性能優化程序系統

2011-03-15 10:41:05

內部類

2015-07-16 12:59:19

IOS9UIDynamics

2015-10-16 14:27:29

iOS9collectionV特性

2015-11-04 09:54:34

ios9人機界面ui

2015-09-16 09:55:12

ios9學習UIKit Dynam

2015-08-20 09:00:23

ios9api

2015-09-25 09:44:24

ios9MapkitTrans

2015-08-24 09:24:21

ios學習contacts fr

2020-09-21 16:05:55

安全 信息安全加密狗

2024-07-29 00:00:00

C程序色彩文本

2016-03-18 11:19:57

ios9replaykit入門

2019-04-16 15:05:59

ServerlessIT基礎局域網

2015-08-31 11:10:52

ios9內容攔截器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一区二区三区日本久久久 | 美女一区二区在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 欧美精品一区二区三区蜜臀 | 国产精品久久久久久久久久不蜜臀 | 日日操日日干 | 在线看黄免费 | 日韩欧美一二三区 | 中文字幕在线免费观看 | 亚洲第一成年免费网站 | 国产精品自产拍在线观看蜜 | 国产精品二区三区在线观看 | 欧美一区精品 | 日韩电影在线一区 | 五月网婷婷 | 91人人在线 | 2018国产精品| 黄色小视频大全 | 国产精品嫩草影院精东 | 男女网站视频 | 91久久北条麻妃一区二区三区 | 久久久久国产成人精品亚洲午夜 | 成人一区二区在线 | 国产精品视频500部 a久久 | 欧美亚洲视频在线观看 | 亚洲第一视频网 | 欧美视频精品 | 国产精品 欧美精品 | 91久久婷婷| 国产精品视频网站 | a级大片免费观看 | 欧美一区二区三区免费在线观看 | 国产永久免费 | 国产精品特级毛片一区二区三区 | 波多野结衣av中文字幕 | 久久久久久免费毛片精品 | 91夜色在线观看 | 99视频精品 | 日韩毛片免费看 | 日韩精品在线一区 | 国产精品久久久乱弄 |