精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

一区二区三区人妻| 一区二区在线观看网站| 日韩国产欧美亚洲| 国自产拍在线网站网址视频| 日韩中文字幕麻豆| 色爱av美腿丝袜综合粉嫩av| 三上悠亚av一区二区三区| av网站大全在线| 久久综合精品国产一区二区三区| 国产日韩在线看片| 久久久久亚洲av无码专区| 伊人久久大香线蕉综合网站| 在线成人高清不卡| 蜜桃导航-精品导航| 中文字幕在线观看欧美| 另类ts人妖一区二区三区| 色噜噜狠狠成人网p站| 欧美精品久久96人妻无码| 樱花视频在线免费观看| 综合国产在线| 一本色道久久88综合亚洲精品ⅰ| 精品久久久久久久久久中文字幕| shkd中文字幕久久在线观看| 成人黄色777网| 成人黄色大片在线免费观看| 香蕉影院在线观看| 国产综合亚洲精品一区二| 中文日韩在线视频| 草草地址线路①屁屁影院成人| 四虎地址8848精品| 在线免费亚洲电影| 欧美日韩电影一区二区| www.伊人久久| 自拍偷拍欧美专区| 久久精品国产v日韩v亚洲| 亚洲免费黄色网| www.精品| 第一福利永久视频精品| 玛丽玛丽电影原版免费观看1977| 国产精品无码在线播放| 青青草原综合久久大伊人精品优势| 国精产品一区一区三区有限在线| 最新一区二区三区| 欧美gayvideo| 色悠悠国产精品| 99久久久无码国产精品衣服| 猛男gaygay欧美视频| 亚洲精品ady| 国产+高潮+白浆+无码| av中文字幕在线观看第一页| 亚洲精品中文字幕乱码三区| 一区二区三区四区国产| 在线播放毛片| 中文字幕一区二区三| 91夜夜揉人人捏人人添红杏| 欧美高清69hd| 免费观看一级特黄欧美大片| 国产精品欧美日韩| 中文字幕你懂的| 麻豆成人91精品二区三区| 国产欧美久久一区二区| 一本色道久久综合精品婷婷| 久久国产精品无码网站| 欧美丰满少妇xxxxx| 久久中文免费视频| 欧美日韩国产在线一区| 久久久日本电影| 亚洲伊人成人网| 日韩精品一二三四| 成人国内精品久久久久一区| www.爱爱.com| caoporn国产精品| 久久精品日产第一区二区三区精品版| 亚洲欧美日本在线观看| 国产三级一区二区| 亚洲视频电影| 久久久久黄久久免费漫画| 天天影视色香欲综合网老头| 国产极品美女高潮无套久久久| 日韩欧美一区二区三区免费观看 | 91嫩草国产线观看亚洲一区二区 | 男人天堂网在线视频| 99久久婷婷国产综合精品电影| 精品伦理一区二区三区| 丁香婷婷在线观看| 亚洲天堂久久久久久久| 国产精品国产精品国产专区蜜臀ah| 国产 欧美 精品| 久久久噜噜噜久噜久久综合| 中文字幕精品一区日韩| 国产精品186在线观看在线播放| 色悠久久久久综合欧美99| 日本不卡一区二区在线观看| 国产精品毛片视频| 欧美人xxxx| www.四虎精品| 欧美一区电影| 日韩av影片在线观看| 欧美性猛交xxxx乱| 欧美91大片| 国产成人精品免高潮在线观看 | 咪咪网在线视频| 精品视频在线看| 国产黑丝一区二区| 午夜av一区| 日本不卡视频在线播放| 精品区在线观看| 国产亚洲欧美在线| 妺妺窝人体色777777| 日本在线一区二区| 亚洲人成电影网| 麻豆国产尤物av尤物在线观看 | 成人免费黄色在线| 四虎一区二区| 蜜桃麻豆影像在线观看| 91精品国产综合久久久久久久久久| 日韩www视频| 欧美 日韩 国产一区二区在线视频 | 欧美日韩在线视频免费| 秋霞午夜av一区二区三区 | 精品国产1区| 亚洲精品网址| 欧美日韩一区二区三区 | 桃子视频成人app| 欧美videos中文字幕| 欧美88888| 久久一二三区| 欧美劲爆第一页| 麻豆精品一区二区三区视频| 日韩在线播放一区二区| 国产嫩草一区二区三区在线观看 | 欧美国产成人精品| 欧美一二三区| av手机免费在线观看| 欧美一级二级在线观看| 青青草自拍偷拍| 日韩国产精品久久久久久亚洲| 玛丽玛丽电影原版免费观看1977| xxx性欧美| 精品日产卡一卡二卡麻豆| 四虎精品免费视频| 国产精品一二一区| 欧美少妇一区二区三区| 国产一区二区色噜噜| 中文字幕成人精品久久不卡| 中文字幕在线欧美| 久久久综合精品| 国产成人精品视频免费看| 久久亚洲黄色| 91高清免费在线观看| 天堂a√中文在线| 久久综合色婷婷| 日韩xxxx视频| 欧美黑人做爰爽爽爽| 97在线视频观看| 天堂网www中文在线| 欧美日韩精品中文字幕| 久久久久久久久免费看无码| 老司机一区二区三区| 欧美专区一二三| av成人在线观看| 久久精品中文字幕免费mv| 国产三级漂亮女教师| 波多野结衣中文一区| 国产婷婷一区二区三区| 日韩欧美天堂| 国产福利视频一区二区| 日本中文字幕视频在线| 在线电影欧美成精品| 久久精品一区二区三| 99精品欧美一区二区三区小说| 免费在线观看日韩视频| 全球成人免费直播| 亚洲最大福利视频| 久久男人天堂| 中文国产成人精品久久一| 国产免费福利视频| 午夜国产精品影院在线观看| 青娱乐国产视频| 激情小说亚洲一区| 69sex久久精品国产麻豆| 蜜桃视频欧美| 国产精品无码专区在线观看| 欧美草逼视频| 亚洲色图国产精品| aaa级黄色片| 久久久久99精品一区| 久久这里只精品| 国产精品mv在线观看| 欧美最大成人综合网| 精品国产鲁一鲁****| 欧美一级片在线播放| 免费高清完整在线观看| 日韩成人av网址| 国产精品久久久久毛片| 精品日韩中文字幕| 欧美三级黄色大片| 久久久久久久免费视频了| 青娱乐精品在线| 久久久噜噜噜久久狠狠50岁| 肉大捧一出免费观看网站在线播放| 亚洲动漫在线观看| 成人动漫视频在线观看免费| 欧美日一区二区三区| 久久久在线视频| 免费网站看v片在线a| 亚洲欧美在线磁力| 性色av蜜臀av| 国产欧美一区二区在线| 18深夜在线观看免费视频| 可以免费看不卡的av网站| 日韩欧美视频免费在线观看| 久久免费大视频| 欧美高清性xxxxhd| 中文字幕一区二区三区日韩精品| 久久精品视频一| 免费国产在线观看| 亚洲福利在线播放| 精品乱子伦一区二区| 欧美猛男男办公室激情| 中文字幕免费高清网站| 疯狂做受xxxx欧美肥白少妇| 免费视频网站www| 最新不卡av在线| 欧美精品日韩在线| 国产日韩欧美一区二区三区综合| 欧美双性人妖o0| 国产91丝袜在线18| 免费观看黄网站| 国产在线精品一区二区三区不卡| 九热视频在线观看| 日日夜夜精品免费视频| 日本免费一级视频| 国产精品视频| 成人免费在线小视频| 国产精品久久久久久模特| 超碰成人免费在线| 亚洲三级国产| 欧美专区一二三| 自拍亚洲一区| 欧美xxxx黑人又粗又长密月| 西野翔中文久久精品字幕| 国语精品中文字幕| 精品网站aaa| 精品国产电影| 日韩精品丝袜美腿| 欧美精品七区| 国产一区二区三区四区二区| 免费久久99精品国产自| 亚洲+变态+欧美+另类+精品| 久久久婷婷一区二区三区不卡| 日韩母乳在线| 欧美一区二区高清在线观看| 欧美三级伦理在线| 一区二区精品在线观看| 欧美xxav| 国产一二三四区在线观看| 欧美日韩亚洲一区| 精品少妇人妻av免费久久洗澡| 国产精品久久久久毛片大屁完整版| 91免费视频网站在线观看| 久久综合图片| 手机av在线免费| 国产精品资源站在线| 伊人久久一区二区三区| 91浏览器在线视频| 亚洲一区二区三区蜜桃| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品国产三级国产aⅴ中文 | 国内不卡一区二区三区| 希岛爱理av免费一区二区| 亚洲精品在线观看免费| 伊人色**天天综合婷婷| 青青草成人免费在线视频| 久久不射2019中文字幕| 老司机久久精品| 成人免费视频国产在线观看| 李宗瑞91在线正在播放| 一区精品在线播放| 日本少妇性生活| 在线免费观看视频一区| www.黄色片| 亚洲美女性生活视频| 精品国产99久久久久久| 国内精品模特av私拍在线观看| 性欧美videohd高精| 91在线观看免费高清| 欧美天堂影院| 国产精品99久久久久久大便| 99在线观看免费视频精品观看| 牛夜精品久久久久久久| 国产成人精品免费在线| 国产jjizz一区二区三区视频| 亚洲欧美区自拍先锋| av资源免费观看| 欧美一区二区日韩一区二区| 青青草在线视频免费观看| 欧美大片在线观看一区二区| 日韩精品系列| 久久精品亚洲精品| 高清不卡亚洲| 高清免费日韩| 999国产精品视频| 韩国一区二区av| 成人免费看的视频| xxxx日本少妇| 欧美一a一片一级一片| 少妇av在线播放| 毛片精品免费在线观看| 97欧美成人| 欧美国产视频在线观看| 激情欧美国产欧美| 99er在线视频| 日韩国产欧美在线视频| 欲求不满的岳中文字幕| 亚洲激情自拍视频| 亚洲天堂手机版| 国产一区二区三区中文| 国产免费拔擦拔擦8x在线播放| 91社区国产高清| 欧美色女视频| 成熟老妇女视频| av一本久道久久综合久久鬼色| 少妇被躁爽到高潮无码文| 91福利国产成人精品照片| 午夜福利一区二区三区| 欧美激情欧美狂野欧美精品| 综合久久伊人| 亚洲午夜激情| 美腿丝袜亚洲色图| 少妇精品无码一区二区免费视频| 懂色av影视一区二区三区| 蜜桃视频久久一区免费观看入口| 欧美另类在线播放| 二区三区精品| 在线播放豆国产99亚洲| 免费观看日韩av| 毛片aaaaaa| 欧美日韩在线一区二区| аⅴ资源新版在线天堂| 国产精品久久久久久久久久| 成人高清电影网站| 成人免费在线观看视频网站| 欧美激情一区二区三区| 中文字幕 欧美激情| 色婷婷av一区二区三区久久| 久久人体av| 99热都是精品| 国产成人精品免费网站| 日本在线视频中文字幕| 亚洲激情电影中文字幕| 日韩大片免费观看| 欧美性xxxx69| 美女视频网站久久| 国产精品国产三级国产传播| 日韩一二三区不卡| 美足av综合网| 久久青青草原一区二区| 日本亚洲一区二区| 搜索黄色一级片| 精品国产人成亚洲区| 成人免费看黄| 亚洲视频sss| 国产成人在线网站| 日韩精品一区二区三| 亚洲视频在线看| 日韩伦理一区二区| 人妻激情另类乱人伦人妻| 99久久精品免费观看| 无码无套少妇毛多18pxxxx| 色一情一乱一区二区| swag国产精品一区二区| 大肉大捧一进一出好爽视频| 国产精品毛片大码女人| 国产黄色av网站| 欧洲一区二区视频| 国产精品99视频| 中文字幕一区二区三区乱码不卡| 欧美性猛交xxxx乱大交极品| 午夜在线视频播放| 国产精品伊人日日| 人人精品人人爱| 日本网站免费观看| 色哟哟网站入口亚洲精品| 国产精品久久久久av蜜臀| 亚洲黄色小视频在线观看| 亚洲一区视频在线观看视频| 国产资源在线观看| http;//www.99re视频| 香蕉成人久久| 婷婷在线精品视频| 亚洲欧美国产精品| 亚洲专区**| 99热这里只有精品在线播放| 亚洲国产cao| 日本福利在线| 欧美国产一二三区| 国产aⅴ综合色| 亚洲天堂aaa| 日韩美女福利视频|