XCode 8中使用UITest

1: 在podfile中添加單元測試依賴庫

1:在pod file添加依賴庫 不添加單元測試會報file not found錯誤

target 'ServiceEngineerUITests' do
pod 'FMDB', '~> 2.5'
pod 'MJExtension', '~> 3.0.9'
end  
重新pod install

2: 選中ServiceEngineerUITests.m

光標點擊代碼中的某一處亚亲,此時紅點可點擊,而光標停留的地方將是代碼錄制的起點幽崩。點擊紅點葛账,然后操作界面.

代碼會在此處自動生成

3最后運行測試找颓,可以選擇test運行,但最好的方式是直接點擊testExample方法左邊的勾勾運行,簡單易用奈泪。

4:需要注意的地方

代碼測試自動生成的代碼
eg:[tabBarsQuery.buttons[@"\U6211"] tap]會報錯!解決辦法:將所有大寫的U全部換成小寫u即可
eg:[tabBarsQuery.buttons[@"\u6211"] tap];

5:通過測試語句找到對應(yīng)的UI元素并通過XCTAssert進行測試

XCUIApplication 啟動 終止測試
XCUIElement 元素
XCUIElementQuery 查詢語句

首先 UI tests 是基于事件響應(yīng)來測試的灸芳,主要分為下面幾個步驟

1:查詢涝桅,找到頁面的元素。

2:明確元素的預(yù)期事件行為烙样,以此作為參考

3:點擊或單擊元素獲取響應(yīng)

4:通過每一步的響應(yīng)判斷預(yù)期的結(jié)果是否通過或者失敗冯遂。

一般步驟

1:通過XCUIElementQuery來找到XCUIElement
2:給元素 XCUIElement傳遞事件
3:使用斷言來將XCUElement的當(dāng)前狀態(tài)和預(yù)期的狀態(tài)進行比較

XCUIElement

XCUIElement 提供了輕觸,點擊误阻,移動债蜜,捏合晴埂,旋轉(zhuǎn)等一系列交互。

判斷當(dāng)前元素是否存在

(readonly) BOOL exists;

可否點擊

@property (readonly, getter = isHittable) BOOL hittable;

返回指定元素的所有子視圖(包含子視圖的子視圖)類元素查詢語句
  • (XCUIElementQuery *)descendantsMatchingType:(XCUIElementType)type;
返回指定元素的所有子視圖元素查詢語句
  • (XCUIElementQuery *)childrenMatchingType:(XCUIElementType)type;

提供元素的調(diào)試信息

@property (readonly, copy) NSString *debugDescription;

通過XCUIElement category來實現(xiàn)元素的一些列動作相應(yīng)

@interface XCUIElement (XCUIElementEventSynthesis)

//輸出text到element

  • (void)typeText:(NSString *)text;
  • (void)tap; //點擊事件
  • (void)doubleTap; //雙擊事件
  • (void)pressForDuration:(NSTimeInterval)duration; //持續(xù)按壓
  • (void)swipeUp; //向上滑動
  • (void)swipeDown; //下滑
  • (void)swipeLeft; //左右 ...

XCUIElementQuery頭文件(遵循XCUIElementTypeQueryProvider協(xié)議)

獲得傳入的索引值所在的元素,返回XCUIElement對象寻定。只能從當(dāng)前對象的查找儒洛。更深層次的元素不在查找范圍內(nèi)

elementAtIndex

根據(jù)NSPredicate定義的匹配條件查找元素。返回XCUIElement對象狼速。只能從當(dāng)前對象中查找琅锻。更深層次的元素不在查找范圍內(nèi)

elementMatchingPredicate

根據(jù)元素類型(XCUIElementType)和id號來匹配查找元素。返回XCUIElement對象向胡。只能從當(dāng)前對象中查找恼蓬。更深層次的元素不在查找范圍內(nèi)

elementMatchingType

傳入XCUIElementType作為匹配條件,得到匹配的XCUIElementQuery對象僵芹,查找對象為當(dāng)前控件的子子孫孫控件处硬。返回XCUIElementQuery對象

descendantsMatchingType:(XCUIElementType)type;

傳入XCUIElementType作為匹配條件,得到匹配的XCUIElementQuery對象拇派,查找對象為當(dāng)前控件的兒子控件荷辕。返回XCUIElementQuery對象

childrenMatchingType:(XCUIElementType)type;

傳入NSPredicate作為過濾器,得到XCUIElementQuery對象件豌。返回XCUIElementQuery對象

matchingPredicate

傳入XCUIElementType和id號作為匹配條件疮方,得到XCUIElementQuery。返回XCUIElementQuery對象

matchingType

傳入id號作為匹配條件茧彤,得到XCUIElementQuery骡显。返回XCUIElementQuery對象
matchingIdentifier傳入NSPredicate過濾器作為匹配條件。從子節(jié)點中找到包含該條件的XCUIElementQuery對象

containingPredicate

傳入XCUIElementType和id作為匹配條件曾掂。從子節(jié)點中找到包含該條件的XCUIElementQuery對象

containingType

query用element表示形式惫谤,如果query中只有一個元素,可以講element當(dāng)成真正的element遭殉,執(zhí)行點擊等操作石挂,從這一方面來講XCUIElementQuery其實也是一種XCUIElement對象,只是是用來存放0~N個XCUIElement的容器险污。得到XCUIElement對象.

query中找到的元素數(shù)量,得到整數(shù)

count

query中根據(jù)accessibility element得到的元素數(shù)組痹愚。得到XCUIElement數(shù)組

allElementsBoundByAccessibilityElement

query中根據(jù)索引值得到的元素數(shù)組。得到XCUIElement數(shù)組

allElementsBoundByIndex

調(diào)試信息

debugDescription

@protocol XCUIElementTypeQueryProvider

@property (readonly, copy) XCUIElementQuery *groups;

@property (readonly, copy) XCUIElementQuery *windows;

@property (readonly, copy) XCUIElementQuery *sheets;

@property (readonly, copy) XCUIElementQuery *drawers;

@property (readonly, copy) XCUIElementQuery *alerts;

@property (readonly, copy) XCUIElementQuery *dialogs;

@property (readonly, copy) XCUIElementQuery *buttons;

@property (readonly, copy) XCUIElementQuery *radioButtons;

@property (readonly, copy) XCUIElementQuery *radioGroups;

@property (readonly, copy) XCUIElementQuery *checkBoxes;

@property (readonly, copy) XCUIElementQuery *disclosureTriangles;

@property (readonly, copy) XCUIElementQuery *popUpButtons;

@property (readonly, copy) XCUIElementQuery *comboBoxes;

@property (readonly, copy) XCUIElementQuery *menuButtons;

@property (readonly, copy) XCUIElementQuery *toolbarButtons;

@property (readonly, copy) XCUIElementQuery *popovers;

@property (readonly, copy) XCUIElementQuery *keyboards;

@property (readonly, copy) XCUIElementQuery *keys;

@property (readonly, copy) XCUIElementQuery *navigationBars;

@property (readonly, copy) XCUIElementQuery *tabBars;

@property (readonly, copy) XCUIElementQuery *tabGroups;

@property (readonly, copy) XCUIElementQuery *toolbars;

@property (readonly, copy) XCUIElementQuery *statusBars;

@property (readonly, copy) XCUIElementQuery *tables;

@property (readonly, copy) XCUIElementQuery *otherElements;

XCUIApplication *app = [[XCUIApplication alloc] init];
// app.staticTexts 判斷靜態(tài)文本是否存在
XCTAssert(app.staticTexts[@“test1"].exists);

查詢用例:

實例化app
XCUIApplication *app = [[XCUIApplication alloc] init];

獲取當(dāng)前控制器的view元素
XCUIElement *element =
[[[[app.otherElementscontainingType:XCUIElementTypeNavigationBar identifier:@"View"]childrenMatchingType:XCUIElementTypeOther].elementchildrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element;

獲取當(dāng)前控制器的View上的Label(通過label的text)
獲取當(dāng)前控制器的View上的Button(通過Button的title)
XCUIElement *testLabel = [app.staticTexts[@"Label"] //testLabel的text為Label

XCUIElement *testButton = [app.buttons[@"Button"]; //testButton的Title為Button

獲取當(dāng)前elment元素上的UITextField元素, 如果有多個, 則通過Index來區(qū)分
XCUIElement *textField = [[element childrenMatchingType:XCUIElementTypeTextField] elementBoundByIndex:0];
[textField tap]; //點擊TextField
[textField typeText:@"test"]; //輸入test

當(dāng)前控制器的View上的Image(通過圖片的名字獲取)
XCUIElement *element = app.images[@"Image_1.png"]

測試:

XCTAssertTrue
XCTAssertEqualObjects
XCTAssertGreaterThan
......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛔糯,一起剝皮案震驚了整個濱河市拯腮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚁飒,老刑警劉巖动壤,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淮逻,居然都是意外死亡琼懊,警方通過查閱死者的電腦和手機阁簸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼丈,“玉大人启妹,你說我怎么就攤上這事∽淼” “怎么了饶米?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長车胡。 經(jīng)常有香客問我檬输,道長,這世上最難降的妖魔是什么匈棘? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任丧慈,我火速辦了婚禮,結(jié)果婚禮上羹饰,老公的妹妹穿的比我還像新娘伊滋。我一直安慰自己碳却,他們只是感情好队秩,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昼浦,像睡著了一般馍资。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上关噪,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天鸟蟹,我揣著相機與錄音,去河邊找鬼使兔。 笑死建钥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虐沥。 我是一名探鬼主播熊经,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼欲险!你這毒婦竟也來了镐依?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤天试,失蹤者是張志新(化名)和其女友劉穎槐壳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喜每,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡务唐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年雳攘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枫笛。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡来农,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崇堰,到底是詐尸還是另有隱情沃于,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布海诲,位于F島的核電站繁莹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏特幔。R本人自食惡果不足惜咨演,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚯斯。 院中可真熱鬧薄风,春花似錦、人聲如沸拍嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽横辆。三九已至撇他,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狈蚤,已是汗流浹背困肩。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脆侮,地道東北人锌畸。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像靖避,于是被迫代替她去往敵國和親潭枣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 啟示 iOS的自動化測試相對安卓的成熟度底很多.而自動化測試的目的是減輕人工測試的壓力.剛剛看一文章提到“沒有兩...
    Y_Swordsman閱讀 10,941評論 10 11
  • 這篇文章有點特別筋蓖,是我躲在廁所里寫的卸耘,深圳白石洲地鐵口處的廁所…… 我不敢出去……外面有一個人尾隨我很久了,轉(zhuǎn)了幾...
    JHC閱讀 355評論 4 5
  • 相信玩過微博的小伙伴們都知道,在我們的認識中,那是一個集了解明星八卦翰铡、產(chǎn)出各類網(wǎng)紅钝域、創(chuàng)建粉絲流量等多方效益的平臺。...
    芷茶閱讀 943評論 4 2
  • 關(guān)聯(lián)文章請點擊《我在陽朔興坪古鎮(zhèn),等待一段訴說》 她一言我一語迷捧,我們就這樣在靜靜地說著自己想說的話织咧。 屋外的暴風(fēng)雨...
    Harrietsu閱讀 749評論 20 7
  • 時間管理的基礎(chǔ)是精力管理笙蒙。 精力管理,管理的就是我們一天休息與工作的節(jié)奏庆锦。 運動捅位、睡眠、飲食三大習(xí)慣會為我們的身體...
    邢衍貞閱讀 132評論 0 0