精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS9 UI Tests探索筆記

移動開發(fā) iOS
在實際的開發(fā)過程中,隨著項目越做越大,功能越來越多,僅僅靠人工操作的方式來覆蓋所有測試用例是非常困難的,尤其是加入新功能以后,舊的功能也要重新測試一遍,這導致了測試需要花非常多的時間來進行回歸測試,這里產(chǎn)生了大量重復的工作,而這些重復的工作有些是可以自動完成的,這時候UI Tests就可以幫助解決這個問題了。

UI Tests是什么?

UI Tests是一個自動測試UI與交互的Testing組件

UI Tests有什么用?

它可以通過編寫代碼、或者是記錄開發(fā)者的操作過程并代碼化,來實現(xiàn)自動點擊某個按鈕、視圖,或者自動輸入文字等功能。

UI Tests的重要性

在實際的開發(fā)過程中,隨著項目越做越大,功能越來越多,僅僅靠人工操作的方式來覆蓋所有測試用例是非常困難的,尤其是加入新功能以后,舊的功能也要重新測試一遍,這導致了測試需要花非常多的時間來進行回歸測試,這里產(chǎn)生了大量重復的工作,而這些重復的工作有些是可以自動完成的,這時候UI Tests就可以幫助解決這個問題了。

使用方法

***步:添加UI Tests

如果是新項目,則創(chuàng)建工程的時候可以直接勾選選項,如下圖

如果是已有的項目,可以通過添加target的方式添加一個UI Tests,點擊xcode的菜單,找到target欄

在Test選項中選擇Cocoa Touch UI Testing Bundle

這時候test組件添加成功,它在項目中的位置如下圖所示

第二步:創(chuàng)建測試代碼

手動創(chuàng)建測試代碼

打開測試文件,在testExample()方法中添加測試代碼

如果不知道如何寫測試代碼,則可以參考自動生成的代碼樣式

自動生成測試步驟

選擇測試文件后,點擊錄制按鈕

這時候開始進行操作,它會記錄你的操作步驟,并生成測試代碼

下圖就是在一些操作后自動生成的測試代碼

這時候可以分析測試代碼的語法,以便你自己手動修改或者手寫測試代碼

開始測試

點擊testExample方法旁邊的播放按鈕,它就開始進行自動測試了,這時候你會看到app在自動操作

 

下面介紹一下測試元素的語法

XCUIApplication:

繼承XCUIElement,這個類掌管應(yīng)用程序的生命周期,里面包含兩個主要方法

launch():

啟動程序

terminate():

終止程序

XCUIElement:

繼承NSObject,實現(xiàn)協(xié)議XCUIElementAttributes, XCUIElementTypeQueryProvider

可以表示系統(tǒng)的各種UI元素

exist:

可以讓你判斷當前的UI元素是否存在,如果對一個不存在的元素進行操作,會導致測試組件拋出異常并中斷測試

descendantsMatchingType(type:XCUIElementType)->XCUIElementQuery:

取某種類型的元素以及它的子類集合

childrenMatchingType(type:XCUIElementType)->XCUIElementQuery:

取某種類型的元素集合,不包含它的子類

這兩個方法的區(qū)別在于,你僅使用系統(tǒng)的UIButton時,用childrenMatchingType就可以了,如果你還希望查詢自己定義的子Button,就要用descendantsMatchingType

另外UI元素還有一些交互方法

tap(): 點擊

doubleTap(): 雙擊

pressForDuration(duration: NSTimeInterval): 長按一段時間,在你需要進行延時操作時,這個就派上用場了

swipeUp(): 這個響應(yīng)不了pan手勢,暫時沒發(fā)現(xiàn)能用在什么地方,也可能是beta版的bug,先不解釋

typeText(text: String): 用于textField和textView輸入文本時使用,使用前要確保文本框獲得輸入焦點,可以使用tap()函數(shù)使其獲得焦點

XCUIElementAttributes協(xié)議

里面包含了UIAccessibility中的部分屬性

如下圖

可以方便你查看當前元素的特征,其中identifier屬性可用于直接讀取元素,不過該屬性在UITextField中有bug,暫時不清楚原因

XCUIElementTypeQueryProvider協(xié)議

里面包含了系統(tǒng)中大部分UI控件的類型,可通過讀屬性的方式取得某種類型的UI集合

部分屬性截圖如下

創(chuàng)建Demo

首先創(chuàng)建一個登錄頁面

點擊login按鈕進行登錄驗證,點擊clear按鈕會清除文本

登錄成功后可以去到個人信息頁面

個人信息頁面如下

點擊modify按鈕可以修改個人信息,點擊Message按鈕可以查看個人消息

***是消息界面

登錄頁面的測試

輸入一個錯誤的賬號

驗證結(jié)果

關(guān)閉警告窗

清除輸入記錄

輸入一個正確的賬號

驗證結(jié)果

進入個人信息頁面

測試代碼如下:

  1. func testLoginView() { 
  2. let app = XCUIApplication() 
  3. // 由于UITextField的id有問題,所以只能通過label的方式遍歷元素來讀取 
  4. let nameField = self.getFieldWithLbl("nameField"
  5. if self.canOperateElement(nameField) { 
  6. nameField!.tap() 
  7. nameField!.typeText("xiaoming"
  8. let psdField = self.getFieldWithLbl("psdField"
  9. if self.canOperateElement(psdField) { 
  10. psdField!.tap() 
  11. psdField!.typeText("1234321"
  12. // 通過UIButton的預設(shè)id來讀取對應(yīng)的按鈕 
  13. let loginBtn = app.buttons["Login"
  14. if self.canOperateElement(loginBtn) { 
  15. loginBtn.tap() 
  16. // 開始一段延時,由于真實的登錄是聯(lián)網(wǎng)請求,所以不能直接獲得結(jié)果,demo通過延時的方式來模擬聯(lián)網(wǎng)請求 
  17. let window = app.windows.elementAtIndex(0
  18. if self.canOperateElement(window) { 
  19. // 延時3秒, 3秒后如果登錄成功,則自動進入信息頁面,如果登錄失敗,則彈出警告窗 
  20. window.pressForDuration(3
  21. // alert的id和labe都用不了,估計還是bug,所以只能通過數(shù)量判斷 
  22. if app.alerts.count > 0 { 
  23. // 登錄失敗 
  24. app.alerts.collectionViews.buttons["確定"].tap() 
  25. let clear = app.buttons["Clear"
  26. if self.canOperateElement(clear) { 
  27. clear.tap() 
  28. if self.canOperateElement(nameField) { 
  29. nameField!.tap() 
  30. nameField!.typeText("sun"
  31. if self.canOperateElement(psdField) { 
  32. psdField!.tap() 
  33. psdField!.typeText("111111"
  34. if self.canOperateElement(loginBtn) { 
  35. loginBtn.tap() 
  36. if self.canOperateElement(window) { 
  37. // 延時3秒, 3秒后如果登錄成功,則自動進入信息頁面,如果登錄失敗,則彈出警告窗 
  38. window.pressForDuration(3
  39. self.loginSuccess() 
  40. else { 
  41. // 登錄成功 
  42. self.loginSuccess() 

這里有幾個需要特別注意的點:

1. 當你的元素不存在時,它仍然可能返回一個元素對象,但這時候不能對其進行操作

2. 當你要點擊的元素被鍵盤或者UIAlertView遮擋時,執(zhí)行tap方法會拋異常

詳細實現(xiàn)可參照demo: https://github.com/sunGd/demo/tree/master/iOS9/UITestDemo

個人信息頁測試

修改性別

修改年齡

修改心情

保存修改

測試代碼如下:

  1. func testInfo() { 
  2. let app = XCUIApplication() 
  3. let window = app.windows.elementAtIndex(0
  4. if self.canOperateElement(window) { 
  5. // 延時2秒, 加載數(shù)據(jù)需要時間 
  6. window.pressForDuration(2
  7. let modifyBtn = app.buttons["modify"]; 
  8. modifyBtn.tap() 
  9. let sexSwitch = app.switches["sex"
  10. sexSwitch.tap() 
  11. let incrementButton = app.buttons["Increment"
  12. incrementButton.tap() 
  13. incrementButton.tap() 
  14. incrementButton.tap() 
  15. app.buttons["Decrement"].tap() 
  16. let textView = app.textViews["feeling"
  17. textView.tap() 
  18. app.keys["Delete"].tap() 
  19. app.keys["Delete"].tap() 
  20. textView.typeText(" abc "
  21. // 點擊空白區(qū)域 
  22. let clearBtn = app.buttons["clearBtn"
  23. clearBtn.tap() 
  24. // 保存數(shù)據(jù) 
  25. modifyBtn.tap() 
  26. window.pressForDuration(2
  27. let messageBtn = app.buttons["message"
  28. messageBtn.tap(); 
  29. // 延時1秒, push view需要時間 
  30. window.pressForDuration(1
  31. self.testMessage() 

這里需要特別注意以下兩點:

1. textview獲取焦點時無法選擇焦點的位置

2. tap事件的觸發(fā)位置是view的中心,所以當view的中心被遮擋時,要考慮使用其他view來代替

個人消息界面測試

單元格的點擊

測試代碼如下:

  1. func testMessage() { 
  2. let app = XCUIApplication() 
  3. let window = app.windows.elementAtIndex(0
  4. if self.canOperateElement(window) { 
  5. // 延時2秒, 加載數(shù)據(jù)需要時間 
  6. window.pressForDuration(2
  7. let table = app.tables 
  8. table.childrenMatchingType(.Cell).elementAtIndex(8).tap() 
  9. table.childrenMatchingType(.Cell).elementAtIndex(1).tap() 

這里需要注意一點:

1. 暫時無法獲取到tableView的元素指針

總結(jié)

總的來說,UI Tests只能用于一些基礎(chǔ)功能的測試,驗證app的功能是否可以正常使用,是否存在崩潰問題。但它也有很多不足之處,編寫測試用例的過程非常繁瑣,自動生成的代碼幾乎無法運行,功能單一,很多用例無法覆蓋,而且bug很多,大大地限制了UI Tests在實際開發(fā)中的應(yīng)用。希望正式版出來的時候能夠修復這些問題,并開放更多的功能。

責任編輯:chenqingxiang 來源: CocoaChina
相關(guān)推薦

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-07-21 16:43:13

IOSUI

2015-08-24 09:24:21

ios學習contacts fr

2015-09-25 09:44:24

ios9MapkitTrans

2015-08-20 09:00:23

ios9api

2016-03-18 11:19:57

ios9replaykit入門

2015-09-09 15:51:54

2015-11-11 10:17:15

ios9聯(lián)系人框架干貨

2015-09-10 09:31:43

IOS9IOS9.1

2015-08-24 09:19:05

ios9split scree

2015-09-16 09:02:10

IOS9新功能搜索業(yè)務(wù)

2015-10-20 09:36:52

蘋果iOS 9字體

2015-07-27 09:04:33

ios9

2015-05-19 09:51:57

WWDCiOS9

2015-08-03 10:03:09

iosuistack vie

2015-10-29 11:13:23

iOS9使用框

2015-05-28 23:29:01

xy
點贊
收藏

51CTO技術(shù)棧公眾號

国产夫妻在线播放| 日本黄色不卡视频| 欧美h版在线| 欧美一区午夜视频在线观看| 成人在线视频一区二区三区| 亚洲 美腿 欧美 偷拍| 丝袜亚洲精品中文字幕一区| 色妞欧美日韩在线| 95视频在线观看| 日韩在线免费| 亚洲视频网在线直播| 91亚洲一区精品| www欧美在线| 99久精品视频在线观看视频| 亚洲加勒比久久88色综合| 91视频免费版污| 丝袜国产在线| 国产欧美精品一区二区三区四区 | 91香蕉一区二区三区在线观看| 一区二区三区视频播放| 在线观看av一区| 成人在线国产视频| 男人天堂久久久| 91免费国产视频网站| 91丝袜美腿美女视频网站| 五月婷婷中文字幕| 欧美人成网站| 日韩中文在线不卡| 亚洲区自拍偷拍| 粉嫩av一区二区| 欧美一二区视频| 污污动漫在线观看| 自拍一区在线观看| 亚洲高清免费视频| 国产免费xxx| 1769视频在线播放免费观看| 久久这里只有精品视频网| 成人一区二区三区四区| 91亚洲精品国偷拍自产在线观看 | 中文有码一区| 精品sm捆绑视频| 三年中文在线观看免费大全中国| 外国成人直播| 日韩欧美a级成人黄色| 免费高清一区二区三区| www视频在线看| 国产精品伦一区二区三级视频| 久久久久久九九| 深夜福利视频网站| 成人免费观看视频| 国产精品久久久久久免费观看| 国产日韩欧美视频在线观看| 久久av资源站| 91精品久久久久久综合乱菊 | 日韩高清国产一区在线| 欧美亚洲一级片| 精品成人免费视频| 亚洲精选久久| 欧美又大又硬又粗bbbbb| 日韩精品国产一区二区| 99热免费精品| 2023亚洲男人天堂| 中文字幕69页| 日本不卡123| 国产精品一区二区久久国产| 最新在线中文字幕| 裸体在线国模精品偷拍| 国产视频999| 国产草草影院ccyycom| 国产精品一区一区| 国产福利久久精品| 污污视频在线免费看| 成人aa视频在线观看| 精品欧美一区二区精品久久| 免费在线视频你懂得| 国产欧美日韩视频一区二区| 亚洲视频欧美在线| 成人免费看片| 午夜精品aaa| 无码日韩人妻精品久久蜜桃| 国产成人午夜性a一级毛片| 欧美日韩精品电影| 中国特级黄色片| 日韩精品丝袜美腿| 最近中文字幕2019免费| 澳门黄色一级片| 亚洲尤物精选| 国产精品网红福利| 成人av免费播放| 92精品国产成人观看免费| 亚洲v国产v在线观看| a毛片在线播放| 天天综合网天天综合色| 啊啊啊国产视频| 中文久久电影小说| 亚洲欧美综合v| 少妇人妻丰满做爰xxx| 99xxxx成人网| 国产中文日韩欧美| 青青草视频免费在线观看| 国产精品久久久久久久第一福利| 久久香蕉视频网站| 日韩在线免费| 亚洲第一av网站| 日韩欧美高清dvd碟片| 欧洲精品视频在线观看| 亚洲美女性囗交| 国产精品99久久免费观看| 亚洲视频在线观看视频| 久久久久久久久毛片| 亚洲欧美日韩在线观看a三区| 成人av在线天堂| 性感美女一级片| 亚洲色图第一区| 国产成人精品视频ⅴa片软件竹菊| 国产aa精品| 亚洲另类图片色| 久久久久99精品成人片毛片| 日韩精品电影在线| 久久国产一区二区| 日本孕妇大胆孕交无码| 7777精品伊人久久久大香线蕉的| 五级黄高潮片90分钟视频| 欧美日本一区| 成人妇女淫片aaaa视频| 欧美男男同志| 天天亚洲美女在线视频| 中文字幕在线观看视频www| 成人羞羞动漫| 欧洲亚洲在线视频| 免费观看国产精品| 日韩一级欧洲| 波多野结衣久草一区| 天堂在线视频免费| 成人欧美一区二区三区1314| 日韩在线xxx| 午夜精品福利影院| 91干在线观看| 婷婷五月综合激情| 亚洲成av人影院| 免费黄色a级片| 国色天香一区二区| 91亚洲永久免费精品| 91.xxx.高清在线| 91福利在线免费观看| av直播在线观看| 国产亚洲毛片| 开心色怡人综合网站| 欧美aa免费在线| 日韩av一卡二卡| 国产精品久久久免费视频| 成人性生交大片免费看中文| 国产小视频免费| 国产一级成人av| 91国内产香蕉| 嫩草在线播放| 色欧美片视频在线观看| 中文字幕一区二区人妻在线不卡 | 91免费黄视频| 久久悠悠精品综合网| 97精品视频在线播放| 青青草视频在线免费观看| 欧美性色视频在线| 日本美女bbw| 国内精品免费在线观看| 国产欧美久久久久| 日韩在线影视| 国产精品久久在线观看| 日韩美女网站| 欧美哺乳videos| 国产美女激情视频| 亚洲国产精品二十页| 男人的天堂最新网址| 中文字幕免费精品| 精品无人区一区二区三区| 亚洲日本网址| 久久影视电视剧免费网站| 后入内射欧美99二区视频| 婷婷中文字幕综合| 国产又粗又长免费视频| 国产高清久久久| aa免费在线观看| 外国成人免费视频| 国产欧美一区二区三区另类精品| 日韩在线伦理| 久久久国产在线视频| 欧美77777| 欧美日韩国产精品成人| 欧美日韩免费做爰视频| 久久精品亚洲乱码伦伦中文| 制服丝袜中文字幕第一页| 黄色精品网站| 亚洲欧洲日韩综合二区| 97超碰成人| 国产精品狼人色视频一区| 激情图片在线观看高清国产| 亚洲午夜未满十八勿入免费观看全集| 国产视频在线观看免费 | 欧美精品久久久久久久久久| 久久经典视频| 欧美大片顶级少妇| 国产一级精品毛片| 亚洲r级在线视频| 黄色国产在线播放| 91丨porny丨国产入口| 天堂在线一区二区三区| 久久成人免费| 无码粉嫩虎白一线天在线观看| 成人精品影视| 精品久久久久久乱码天堂| 国产不卡精品| 国产精品一区二区性色av| 日韩欧美一中文字暮专区| 欧美成人亚洲成人| porn视频在线观看| 国产视频精品xxxx| 国产 日韩 欧美 综合| 欧美日韩综合一区| 免费av网站在线| 亚洲成人黄色影院| 青青草激情视频| 中文字幕一区三区| 99久久久无码国产精品衣服| 成人免费视频app| 日本55丰满熟妇厨房伦| 久久se这里有精品| 欧美特级aaa| 日韩和欧美一区二区三区| 日韩国产欧美亚洲| 精品动漫3d一区二区三区免费| 久久免费视频2| 色综合狠狠操| 色狠狠久久av五月综合|| 亚洲三级性片| 免费国产一区| 自拍视频一区| 欧美综合激情| av中字幕久久| 色之综合天天综合色天天棕色| 天堂99x99es久久精品免费| 国产伦精品一区二区三区在线 | 国产高清精品在线| 女人扒开双腿让男人捅| 狠狠色丁香久久婷婷综| 亚洲精品综合在线观看| 久久成人麻豆午夜电影| 国产精欧美一区二区三区白种人| 老司机一区二区| 亚洲午夜精品一区| 国产精品影视在线观看| 无码人妻一区二区三区在线| 成人小视频在线| 亚洲天堂av网站| 91在线播放网址| 波多野结衣a v在线| 久久久www成人免费毛片麻豆| 天天躁日日躁aaaxxⅹ| 国产日本亚洲高清| 萌白酱视频在线| 亚洲女同女同女同女同女同69| 最新一区二区三区| 亚洲国产毛片aaaaa无费看| 国产精品成人网站| 欧美性猛交xxxx黑人| 综合久久中文字幕| 日韩一区二区免费高清| 蜜臀av午夜精品| 亚洲偷熟乱区亚洲香蕉av| av在线免费播放网站| 久久精品国产久精国产思思| 日皮视频在线观看| 7777精品视频| 最新日韩一区| 国产精品久久久对白| 一道本一区二区三区| 亚洲欧美精品在线观看| 欧美国产高潮xxxx1819| 能在线观看的av| 久久精品国产久精国产爱| 动漫美女无遮挡免费| 久久蜜臀精品av| 波多野结衣在线网址| 性做久久久久久免费观看欧美| 成人h动漫精品一区二区下载| 欧美精品777| 午夜av免费在线观看| 在线午夜精品自拍| 美女网站视频在线| 国产精品欧美风情| 91在线一区| 色播五月综合| 亚洲美女黄色| jizz欧美性11| 91网页版在线| 男女性高潮免费网站| 欧美日韩中文在线| 国产肥老妇视频| 国产香蕉精品视频一区二区三区| av在线免费网站| 国产成人一区二区三区小说| 亚洲精品国产九九九| 亚洲国产精品一区二区第一页| 亚洲午夜91| 五月天激情播播| 久久久香蕉视频| 欧美日韩国产大片| 日本在线丨区| 欧美精品xxx| 一级欧美视频| 五月天亚洲综合| 亚洲一区国产一区| 韩国三级与黑人| 国产精品麻豆网站| 日韩综合在线观看| 亚洲第一中文字幕在线观看| 黄视频网站在线看| 国产精品自产拍高潮在线观看| 天堂在线精品| 97视频久久久| 国产mv日韩mv欧美| 99久久99久久精品国产| 欧美在线视频不卡| 三区在线观看| 韩国日本不卡在线| 一区二区三区在线免费看 | 男人和女人做事情在线视频网站免费观看 | 亚洲毛片一区| wwwxx日本| 亚洲观看高清完整版在线观看| av免费观看在线| 久久深夜福利免费观看| 成人黄色视屏网站| 日韩精品久久一区二区三区| 欧美一级网站| 亚洲乱码国产乱码精品精大量| 婷婷久久综合九色综合绿巨人| 亚洲第一视频在线| 欧美日韩999| 日本一区影院| www国产免费| 国产成人精品亚洲日本在线桃色| 日韩影院一区二区| 欧美一区二区三区性视频| 黄色免费在线观看| 91久久精品美女高潮| 亚洲欧美网站在线观看| 想看黄色一级片| 亚洲麻豆国产自偷在线| 国产福利资源在线| 欧美激情xxxxx| 激情视频极品美女日韩| 免费观看美女裸体网站| 久久亚洲精华国产精华液 | 国产精品一区二区男女羞羞无遮挡| 欧美三级黄色大片| 日韩一二三四区| av影视在线看| 欧美不卡福利| 美日韩一级片在线观看| 影音先锋男人资源在线观看| 69堂精品视频| 欧洲黄色一区| 精品久久精品久久| 强制捆绑调教一区二区| 国产又色又爽又高潮免费| 这里是久久伊人| 国产探花在线观看| 欧美日韩国产一二| 久久精品国产99| 欧美三根一起进三p| 亚洲精品成人av| avav成人| 国产乱人伦精品一区二区三区| 91一区一区三区| 日韩乱码一区二区三区| 超在线视频97| 日韩av网址大全| 三上悠亚在线一区| 一区二区三区在线观看动漫| 婷婷亚洲一区二区三区| 国产精品久久久久久久午夜| 亚洲二区三区不卡| 国产制服丝袜在线| 欧美日韩精品欧美日韩精品一综合| caoporn免费在线| 欧美精品与人动性物交免费看| 久久草av在线| 伊人手机在线视频| www亚洲精品| 西野翔中文久久精品国产| 在线免费看污网站| 欧美日韩国产在线播放| 免费观看在线午夜影视| 精品一区久久久| 国产剧情一区在线| 无码人妻精品一区二区三区9厂| 欧美成人精品xxx| 欧美中文一区二区| 中文成人无字幕乱码精品区| 欧美日韩aaaaaa|