小白學(xué)習(xí)instrument之UI Automation(1)

鉆研小白學(xué)習(xí)instrument之一周左右润梯,總結(jié)在網(wǎng)上找了一些零零散散和蘋(píng)果官網(wǎng)給出的官方文檔介紹,總結(jié)了一下自己的學(xué)習(xí)心得,分享一下吧。

UI Automation就是UI自動(dòng)化的意思跋炕,這個(gè)大家都應(yīng)該明白。既然是自動(dòng)化工具律适,那肯定需要有自動(dòng)化的腳本去支撐辐烂,而UI Automation它所支持的腳本語(yǔ)言除了自己原生的swift語(yǔ)言外,還支持JavaScript語(yǔ)言捂贿。

我說(shuō)一下本人第一次見(jiàn)到這個(gè)工具的情景吧纠修,自從xcode5版本開(kāi)始(具體是5點(diǎn)幾版本就不知道了),UI Automation就支持錄制用戶操作厂僧,自動(dòng)生成為腳本的功能扣草。當(dāng)初自己對(duì)app就進(jìn)行一些操作,發(fā)現(xiàn)它自動(dòng)就自動(dòng)生成了一段腳本颜屠,感覺(jué)好神奇啊辰妙,但當(dāng)自己想去解讀腳本語(yǔ)言,發(fā)現(xiàn)自己根本對(duì)此(八竅通七竅汽纤,一竅不通)上岗,為了讓自己看懂這些腳本的意思和加強(qiáng)一些操作福荸,就去學(xué)習(xí)JavaScript語(yǔ)言蕴坪。學(xué)了兩周左右時(shí)間后,基本的JavaScript語(yǔ)句會(huì)寫(xiě)了,也能大概根據(jù)代碼去了解其功能背传,然后又花了2天時(shí)間專(zhuān)門(mén)去了解UI Automation一些特定的操作呆瞻,就著手寫(xiě)上自己的第一個(gè)正式的UI Automation腳本。

//聲明變量,減少代碼量
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var main = app.mainWindow();

//登錄流程
app.tabBar().buttons()["我"].tap();
main.tableViews()[0].cells()[" "].tap();//點(diǎn)擊默認(rèn)頭像區(qū)域


//因?yàn)閍pp已經(jīng)記住了用戶名径玖,這段代碼屏蔽
//main.textFields()[0].textFields()[0].tap();
//var name = "skk"
//main.textFields()[0].textFields()[0].setValue(name);


main.secureTextFields()[0].secureTextFields()[0].tap();
//給密碼聲明變量痴脾,并賦予輸入框變量的值
var passwd = "123456";
main.secureTextFields()[0].secureTextFields()[0].setValue(passwd);

main.buttons()["登錄"].tap();
target.delay(1);//延遲1秒后操作
app.tabBar().buttons()["首頁(yè)"].tap();
target.delay(5);//延遲5秒后操作
//登錄完成

//退出登錄流程
app.tabBar().buttons()["我"].tap();
main.tableViews()[0].tapWithOptions({tapOffset:{x:0.60, y:0.85}});//點(diǎn)擊【設(shè)置】
main.buttons()["退出登錄"].tap();
app.actionSheet().collectionViews()[0].cells()["退出"].buttons()["退出"].tap();
app.tabBar().buttons()["首頁(yè)"].tap();
//退出登錄成功
UIALogger.logMessage("登錄腳本都運(yùn)行通過(guò)");
//腳本運(yùn)行完成,輸入該內(nèi)容

這個(gè)是我們公司一個(gè)產(chǎn)品的登錄流程梳星,寫(xiě)的比較簡(jiǎn)單赞赖,沒(méi)有特意去優(yōu)化它。

?就如同標(biāo)題一樣冤灾,我就是小白前域,要我這個(gè)小白去自己獨(dú)立去寫(xiě)出這段腳本,那是不可能的韵吨,腳本的所有的操作都是錄制得到的匿垄,我只是把錄制得到的腳本進(jìn)行一些優(yōu)化而已。

下面說(shuō)一些干貨吧归粉,先說(shuō)一下?UI Automation的結(jié)構(gòu)吧椿疗,拿一段腳本代碼來(lái)說(shuō)說(shuō)我的見(jiàn)解吧,官網(wǎng)給出控件樹(shù)圖沒(méi)有實(shí)時(shí)更新與實(shí)際操作上會(huì)有點(diǎn)差別糠悼,大家明白一個(gè)大概意思即可届榄。推薦一本書(shū)《ios測(cè)試指南》這個(gè)本的第56頁(yè)有對(duì)這個(gè)控件數(shù)的結(jié)構(gòu)有很詳細(xì)的解釋。

UI Automation所有的操作事件都必須以UIATargt開(kāi)頭绢掰,如圖所示UIATargt是整個(gè)控件樹(shù)的根節(jié)點(diǎn)???痒蓬;
UIATarget.localTarget().frontMostApp();應(yīng)用程序是最前面的應(yīng)用程序(或應(yīng)用程序的目標(biāo)),也就是指這個(gè)app滴劲。
UIATarget.localTarget().frontMostApp().mainWindow();到達(dá)你的應(yīng)用程序的主窗口中攻晒,也就是指這個(gè)被測(cè)app下面的主窗口。

[ ](javascript:;)蘋(píng)果官方給出的控件樹(shù)圖

列舉一些比較常用的操作代碼
要點(diǎn)擊兩次相同的位置班挖,你可以使用此代碼:
?示例鲁捏,點(diǎn)擊兩次100、200坐標(biāo)置
UIATarget.localTarget().doubleTap({X:100,Y:200});

測(cè)試點(diǎn)擊圖片放大和縮小功能
UIATarget.localTarget().twoFingerTap({X:100,Y:200});

放大和縮小手勢(shì)萧芙,你提供的坐標(biāo)的起始位置和結(jié)束位置给梅,以及持續(xù)時(shí)間,以秒為單位双揪。?
下面的示例指定位置动羽,從20、200的位置放大與縮小手勢(shì)渔期,經(jīng)過(guò)2秒:
UIATarget.localTarget().pinchOpenFromToForDuration({X:20,Y:200},{X:300,Y:200},2);?
UIATarget.localTarget().pinchCloseFromToForDuration({X:20,Y:200},{X:300,Y:200},2);

拖動(dòng)和輕彈运吓。如果你需要滾動(dòng)表或移動(dòng)元素在屏幕上渴邦,你可以使用dragFromToForDuration方法。你提供的坐標(biāo)的起始位置和結(jié)束位置拘哨,以及持續(xù)時(shí)間谋梭,以秒為單位。??

下面的示例指定位置倦青,從160瓮床、200的位置拖動(dòng)手勢(shì)到160、400的位置产镐,過(guò)了一段1秒:
UIATarget.localTarget().dragFromToForDuration({X:60,Y:200},{X:160,Y:400},1);

這個(gè)與拖動(dòng)手勢(shì)是相似的隘庄,但它被設(shè)定為一個(gè)快速動(dòng)作,因此它不要求一個(gè)持續(xù)時(shí)間參數(shù)癣亚。
UIATarget.localTarget().flickFromTo({X:160,Y:200},{X:160,Y:400});

輸入文字:您的腳本可能需要測(cè)試您的應(yīng)用程序正確地處理文本輸入峭沦。要做到這一點(diǎn),就可以通過(guò)簡(jiǎn)單地指定目標(biāo)文本字段并用其值設(shè)置輸入文本的文本字段的setValue方法逃糟。
下面的示例使用一個(gè)局部變量吼鱼,以提供一個(gè)長(zhǎng)字符串作為測(cè)試用例的第一個(gè)文本字段(索引[0])在當(dāng)前屏幕:var recipeName = " ";?
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].setValue(recipeName);

操作延時(shí),單位為秒U(xiǎn)IATarget.localTarget().delay(2);

timeout:返回當(dāng)前的超時(shí)值绰咽,應(yīng)用如下
UIATarget.localTarget().timeout();

setTimeout:設(shè)置一個(gè)新的超時(shí)值菇肃,應(yīng)用如下
UIATarget.localTarget().setTimeout();

pushTimeout:保存在堆棧的當(dāng)前超時(shí)值,并設(shè)置一個(gè)新的超時(shí)值取募,應(yīng)用如下
UIATarget.localTarget().pushTimeout();

popTimeout:從堆棧檢索以前的超時(shí)值琐谤,恢復(fù)其作為當(dāng)前的超時(shí)值,并將其返回玩敏,應(yīng)用如下UIATarget.localTarget().popTimeout();

打印日志斗忌,與document.write()一樣,只是這個(gè)是打印在ui autoaction工具內(nèi)UIALogger.logMessage("需要打印出的信息");?//這個(gè)可以用來(lái)進(jìn)行判斷

模擬app返回桌面旺聚,并且從后臺(tái)再次進(jìn)入app织阳,其中的操作間隔以秒為單位?//下面示例返回桌面,并且10秒后進(jìn)入ios后臺(tái)砰粹,返回app內(nèi)?
UIATarget.localTarget().deactivateAppForDuration(10);

?
這有個(gè)簡(jiǎn)單的示例唧躲,感興趣的去去看看:
http://www.minroad.com/?p=799

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碱璃,隨后出現(xiàn)的幾起案子弄痹,更是在濱河造成了極大的恐慌,老刑警劉巖嵌器,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛真,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爽航,警方通過(guò)查閱死者的電腦和手機(jī)蚓让,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)庇谆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凭疮,你說(shuō)我怎么就攤上這事〈觯” “怎么了执解?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纲酗。 經(jīng)常有香客問(wèn)我衰腌,道長(zhǎng),這世上最難降的妖魔是什么觅赊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任右蕊,我火速辦了婚禮,結(jié)果婚禮上吮螺,老公的妹妹穿的比我還像新娘饶囚。我一直安慰自己,他們只是感情好鸠补,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布萝风。 她就那樣靜靜地躺著,像睡著了一般紫岩。 火紅的嫁衣襯著肌膚如雪规惰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天泉蝌,我揣著相機(jī)與錄音歇万,去河邊找鬼。 笑死勋陪,一個(gè)胖子當(dāng)著我的面吹牛贪磺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诅愚,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缘挽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呻粹?” 一聲冷哼從身側(cè)響起壕曼,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎等浊,沒(méi)想到半個(gè)月后腮郊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筹燕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年轧飞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衅鹿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡过咬,死狀恐怖大渤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掸绞,我是刑警寧澤泵三,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站衔掸,受9級(jí)特大地震影響烫幕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敞映,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一较曼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧振愿,春花似錦捷犹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至栓霜,卻和暖如春翠桦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胳蛮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工销凑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仅炊。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓斗幼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抚垄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜕窿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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