iOS自動化測試之常用UI Automation API

本文章轉(zhuǎn)載于搜狗測試

在iOS自動化測試中UI Automation的對象继榆,都是以UIAxxx的形式出現(xiàn)的,例如UIAButton等纲岭。UIA是UI Automation的縮寫猜扮,如果忽略掉前綴,直接看對象的名稱糟需,在表達(dá)方面應(yīng)該會明確。接下來對UI Automation所提供的API進(jìn)行初步了解吧谷朝。

UIALogger日志輸出

負(fù)責(zé)日志輸出的對象是UIALogger洲押,主要有兩部分的職責(zé):記錄測試結(jié)果;負(fù)責(zé)各個級別的日志結(jié)果輸出圆凰。

在記錄測試結(jié)果方面杈帐,有l(wèi)ogFail()、logPass()方法和logStart()方法专钉。logStart()方法會在測試即將開始的時候調(diào)用娘荡,并且在測試結(jié)束后,和logFail()或logPass()方法配對出現(xiàn)完成一個測試方法的開始部分和最后的完成部分的結(jié)果記錄驶沼,logPass()和logFail()是一對函數(shù),分別表示方法測試通過和未通過争群。

在日志輸出方面回怜,一般常用的事logMessage()方法,日志輸出是我們調(diào)試UI Automation腳本唯一的手段换薄,在編寫自動化測試腳本的時候玉雾,一定要掌握logMessage()方法。需要注意的是logMessage()只接受字符串類型的參數(shù)轻要。例如:UIALogger.logMessage(“JUST TEST”)就是一個有效地輸出复旬,但是如果這樣的:UIALogger.logMessage(123);就不會有任何輸出,這里需要強(qiáng)制的是把數(shù)字類型轉(zhuǎn)化為字符串類型就可以有內(nèi)容輸出了冲泥。

手勢動作的模擬

UI Automation的API給用戶提供了很多手勢操作的模擬方式驹碍,現(xiàn)在介紹幾種常用的手勢動作模擬方式,為大家提供一個思路凡恍。如果希望更加全面的學(xué)習(xí)志秃,建議參考Apple官方文檔。

模擬操作動作的方法主要由兩個主類提供嚼酝,在API調(diào)用方式上也有一些其別浮还,所以這里再次細(xì)分了兩種方式,分別為UIAElement方式和UIATarget方式闽巩。

1. UIAElement方式

(1)點擊

tap()方法钧舌,一個button或者一個表單的某一行(UIATableViewCell)都可以使用tap方法操作担汤。但如果是一個閱讀器的話,本身被操作的控件區(qū)域很大洼冻,在控件內(nèi)部還會細(xì)分操作區(qū)域崭歧。不同區(qū)域的相同操作可能效果不同。在這樣的測試需求前面碘赖,只使用tap()方法明顯是不能滿足需求的驾荣。這時需要使用更高級的操作方式tapWithOptions(option)。例如普泡,UIAElement.tap

WithOptions({x:0.9,y:0.5})播掷。

如果題詞點擊不能滿足需求,還可以使用doubleTap()方法來模擬雙擊的操作撼班。如果單指的點擊不能滿足需求歧匈,可以使用twoFinger

Tap()來模擬雙指的點擊操作。

(2)滑動或拖拽

滑動和拖拽在UI Automation中區(qū)別不大砰嘁,唯一區(qū)別在于操作時的延時時間不同〖現(xiàn)在可以從接口層面來查看滑動操作和拖拽操作的區(qū)別。

滑動實例:

UIAElement.flickInSideWithOption({touchCount:2,startOffset:{x:0.5,y:0.9}, endOffset:{x:1.0, y:0.9}});

拖拽實例:

UIAElement.dragInsideWithOptions({touchCount:2,startOffset:{x:0.5,y:0.9}, endOffset:{x:1.0, y:0.9}, duration:1});

從上面兩個實例中可以看出矮湘,拖拽比滑動函數(shù)多了一個duration參數(shù)斟冕,這個duration表示操作時手指和屏幕的接觸時間,duration參數(shù)一般只接收值為0或1的傳入(你可能還會看到有些文檔里賣弄傳入2或者3缅阳,但官方文檔中未對這些參數(shù)進(jìn)行詳細(xì)說明磕蛇,而且從實際操作的角度來看好像也沒有看出具體的差別),0代表flick方式接觸時間十办,1代表drag和pinch等操作的將誒出時間秀撇。還需要特別說明,duration參數(shù)有一個默認(rèn)值并且為0.也就是說dragInsideWithOptions方法如果沒有顯示傳入duration的值向族,dragInsideWithOptions和flickInsideWithOptions是等價的呵燕。這兩個方法都有一個參數(shù)為touchCount,這個參數(shù)表示滑動或拖拽操作的手指個數(shù)件相,默認(rèn)為1再扭。單指滑動或拖拽就可以不用設(shè)置這個參數(shù)了。

2. UIATarget方式

(1)點擊

在點擊方面夜矗,UIATarget和UIAElement的方式一樣提供了兩種方法供開發(fā)者使用霍衫,即tap()和tapWithOptions()方法。唯一不同的是傳入的參數(shù)侯养。Target的實例:

UIATarget.localTarget.tap({x:300,y:200});

UIATarget.localTarget.tapWithOptions({x:300,y:200}, {tapCount:1,touchCount:2,duration:1});

在tap方法里面需要傳入點擊的具體坐標(biāo)敦跌,因為Target是一個全局對象,操作區(qū)域非常大,需要明確指定點擊的區(qū)域柠傍。在tapWithOptions方法中麸俘,還需要傳入點擊的次數(shù)(tapCount,默認(rèn)值為1)惧笛,點擊時手指的個數(shù)(touchCount从媚,默認(rèn)值為1),點擊時手指接觸時間(duration患整,默認(rèn)值為0)拜效。

同樣,UIATarget方式也有doubleTap方法和twoFingerTap方法各谚。

(2) 滑動和拖拽

在UIATarget方式中紧憾,滑動的方法為:flickFromTo;拖拽的方法為:fragFromToForDuration昌渤。雖然方法名字有所變化赴穗,但是用法和UIAElement方式完全相同,我們直接給出實際的例子:

UIATarget.localTarget().flickFromTo({x:160,y:200},{x:160,y:400})

UIATarget.localTarget().dragFromToDuration({x:160,y:200},{x:160,y:200}, 1);

在Target方式中膀息,還有一種操作般眉,非常類似于滑動和拖拽,在官方文檔中稱為pinch(一般可以翻譯為捏合或縮放潜支,但都不是很準(zhǔn)確)甸赃,一般pinch最常用的操作是,在瀏覽照片時可以通過pinch對照片進(jìn)行縮放冗酿。pinch根據(jù)移動的方式不同而被劃分為兩種:pinchOpen和pinchClose埠对。實例如下:

UIATarget.localTarget().pinchOpenFromToForDuration({x:20,y:200}, {x:300,y:200}, 1);

UIATarget.localTarget().pinchCloseFromToForDuration({x:20,y:200}, {x:300,y:200}, 1);

延時處理

在延時處理方面,有delay()方法已烤,在腳本中使用起來非常簡單、方便妓羊。在延時處理時胯究,還有更加高級的方法需要介紹一下。

在遍歷控件樹時躁绸,一般會采用這樣的方式遍歷控件樹:

var elementArray = UIAElement.elements();

正常情況下裕循,這段代碼很快就會返回一個UIAElementArray對象,并傳遞給變量净刮,但是當(dāng)這個UIAElement沒有子元素時剥哑,這個語句就會執(zhí)行的非常慢,因為沒有子元素了淹父,UI Automation是通過超時機(jī)制來處理這個異常的株婴。在沒有任何設(shè)置的情況下,UI Automation默認(rèn)的超時時間為5秒。頻繁地遇到這種情況會使測試腳本的執(zhí)行速度拖延困介,過慢的測試腳本運(yùn)行會大幅度降低測試腳本的可用性大审。這時需要把超時時間設(shè)置的短一些。例如:

UIATarget.localTarget().setTimeout(1);

這樣就把超時時間設(shè)置為1秒座哩,從而提升了腳本的執(zhí)行速度徒扶。但是使用setTimeout方法會有一個隱患,因為這種方式的設(shè)置是全局的一種方式根穷,UIATarget.localTarget().setTimeout(1)會使得這個測試運(yùn)行過程中超時時間都被強(qiáng)制改為1秒姜骡,或許在有些函數(shù)方法內(nèi)部還需要超時時間為5秒。所以需要有一種更加優(yōu)雅的方式來解決這個問題屿良。UI Automation提供了這樣的方式圈澈,實例代碼如下:

UIATarget.localTarget().pushTimeout(1);

var elementArray = UIAElement.elements();

UIATarget.localTarget().popTimeout(1);

pushTimeout和popTimeout成對出現(xiàn),在這兩個方法中間的代碼會被修改超時時間管引,不在這對語句中間出現(xiàn)的代碼士败,不會受到任何影響。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褥伴,一起剝皮案震驚了整個濱河市谅将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌重慢,老刑警劉巖饥臂,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異似踱,居然都是意外死亡隅熙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門核芽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚戚,“玉大人,你說我怎么就攤上這事轧简〕鄯唬” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵哮独,是天一觀的道長拳芙。 經(jīng)常有香客問我,道長皮璧,這世上最難降的妖魔是什么舟扎? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悴务,結(jié)果婚禮上睹限,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好邦泄,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布删窒。 她就那樣靜靜地躺著,像睡著了一般顺囊。 火紅的嫁衣襯著肌膚如雪肌索。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天特碳,我揣著相機(jī)與錄音诚亚,去河邊找鬼。 笑死午乓,一個胖子當(dāng)著我的面吹牛站宗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播益愈,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼梢灭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒸其?” 一聲冷哼從身側(cè)響起敏释,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摸袁,沒想到半個月后钥顽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靠汁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年蜂大,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝶怔。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡奶浦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踢星,到底是詐尸還是另有隱情澳叉,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布斩狱,位于F島的核電站耳高,受9級特大地震影響扎瓶,放射性物質(zhì)發(fā)生泄漏所踊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一概荷、第九天 我趴在偏房一處隱蔽的房頂上張望秕岛。 院中可真熱鬧,春花似錦、人聲如沸继薛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遏考。三九已至慈鸠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灌具,已是汗流浹背青团。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留咖楣,地道東北人督笆。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像诱贿,于是被迫代替她去往敵國和親娃肿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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