深入了解UIAutomation 的API
有關(guān)UiAUiAutomation的API對象的文件名稱。
1、UIAutomation中的對象都是以UIA#####開頭的出現(xiàn)的。eg:UIAButton
2、有關(guān)Logger對象負(fù)責(zé)日志的輸出
UIALogger類的作用到:1)記錄測試的結(jié)果?? 2)負(fù)責(zé)各個級別的結(jié)果的日志的輸出
通常:我們會看看到logStart(message) 開始,以失敗或者成功j結(jié)束。
以下是一個實例:(對應(yīng)的測試代碼)
var target = UIATarget.localTarget();var testName = "Module 001 Test";UIALogger.logStart(testName);UIALogger.logMessage("test"); UIALogger.logDebug("debug");target.logElementTree();UIALogger.logPass(testName);UIALogger.logWarning("it is not instrict");UIALogger.logError("錯誤");結(jié)果:(下圖)
對應(yīng)的知識點集合:
測試的狀態(tài):(記錄測試的結(jié)果輸出) (undefined) logFail(String message) //測試失敗 (undefined) logIssue(String message) //測試終止異常 (undefined) logPass(String message) //表示測成功 (undefined) logStart(String message) //表示測試開始測試的安全級別:(負(fù)責(zé)各個級別的日志結(jié)果輸出) (undefined) logDebug(String message) //測試級別為調(diào)試。日志調(diào)試的輸出信息 (undefined) logError(String message) //設(shè)置級別為錯誤, (undefined) logMessage(String message) //設(shè)置級別為信息 (undefined) logWarning(String message) //設(shè)置級別為警告上面試兩個不同的結(jié)果類型。能夠查看結(jié)果。有關(guān)Element 和 ElementArray的介紹
Element是全部控件元素的基類,這些控件的元素包含:Target 和Application這兩中相對高級的對象。
空間元素的定位方法:element()方法得到一個元素的子元素數(shù)組(Element Array)。數(shù)組就好辦,依照數(shù)組處理就好。
即為:通過:元素——> 元數(shù)組——>元素——> 元數(shù)組——>元素——> 元數(shù)組——>元素——> 元數(shù)組——> 這樣的遞歸的方式來定位須要操作的空間。
特殊的:由于一般的程序中的一個窗體值包括一個navigationBar,所以能夠通過這種方法Element.navigationBar()直接獲取,也能夠通過Element.navigationBar()[0]這樣的方式獲取。
還有tabar也是類似。
(這些都是理論,你能夠通過錄制能夠全然不必要記住這些)
手勢識別:
模擬操作的類主要由兩類:各自是Element和Target
1、element方式:
1)點擊
一個button、一個cell都是會有點擊的事件tap(),可是閱讀器那就大了,而且位置不同顯示的事件也就不同。那么肯定不是一個點擊事件那么簡單來實現(xiàn)的,所以有了:tapWithOptions(Options);這種方法。假設(shè)一次點擊不能夠滿足,能夠有相應(yīng)的方法doubleTap。一個手指不夠是吧。能夠用twoFingerTap()相應(yīng)的方法。
2)滑動和拖拽
事實上他們差別不大,僅僅是時間延時上存在差異而已。
滑動實例:Element.flickInsideWithOptions({touchCount:2 ,startOffset:{x:0.5,y:0.9} ,endOffset:{x:1.0 ,y:0.9}});
拖拽實例:Element.dragInsideWithOptions({touchCount:2 ,startOffset:{x:0.5,y:0.9} ,endOffset:{x:1.0 ,y:0.9} , duration:1});
//這個duration 表示的是:手指和屏幕接觸的時間。這些參數(shù)在官方文檔中有。:
duration默認(rèn)是0。此時它們是等價的。? touchCount表示手指有多少個同一時候參數(shù)操作,默覺得1.
2、Target方式
target和Element方式一樣提供了兩個方法,僅僅是參數(shù)不一樣而已。
即為:
1、element的范圍參數(shù)是:0~1
2、UITarget的參數(shù)是:詳細(xì)的數(shù)值。
eg:實例
UIATarget.localTarget().tap({x:100 , y:200});UIATarget.localTarget().tapWithOptions({x:100,y:200},{tapCount:1,touchCount:2 ,duration:1});由于target是全局對象。所以要傳入詳細(xì)的位置,同一時候還要:點擊的次數(shù)(tapCount。默認(rèn)值為:1),點擊是手指的個數(shù)(touchCount ,默覺得1) 。點擊時候接觸時間(duration,默認(rèn)值為0)
相同也有doubleTap和twoFingerTap
滑動和拖拽:
滑動:flickFromTo? 拖拽:dragFromToForDuration, 盡管方法名不同,可是使用方法全然同樣。
pinch 捏合與縮放,通常是放在圖上面
有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);總結(jié):1、element和Target是站在兩個不同的API描寫敘述的,一個是對于控件的元素,一個是對于總體的位置(詳細(xì))。結(jié)果都是一樣的,可能element用的會比較多一點(或許)
3、延時處理:
經(jīng)典方法:delay(延遲時間);
獲取子元素的方法:var elementArray = Element.elements;
存在則高速返回,否則時間消耗長。被超時處理機(jī)制處理。且默認(rèn)的超時為5s。所以會遲延測試的時間。
須要將超時時間設(shè)置為更加的短:
UIATarget.localTarget().setTimeout(1);
//即為設(shè)置超時為1s。且這樣的設(shè)置為全局設(shè)置,這樣存在不靈活的隱患。
var elementArray = Element.elements();
改進(jìn)的方法:
UIATarget.localTarget().pushTimeOut(1);
var elementArray = Element.elements();
UIATarget.localTarget().popTimeOut(1);
中間的代碼被改動為超時1s。其它的代碼不會受到影響。4、Target對象的系統(tǒng)級別的操作,即為:能夠提供設(shè)備底層的方法。
1、系統(tǒng)信息
Target 對象提供一系列的獲取系統(tǒng)信息的方法。
eg:
var Target = UIATarget.localTarget();
UIAlogger.logmessager(target.model());
UIAlogger.logmessager(target.rect().size.width);
UIAlogger.logmessager(target.systemVersion());
2、模擬地址坐標(biāo)
用于測試尤其是在地圖上面的推薦服務(wù)等等。
var target = UIATarget.localTarget();
target.setLocation("longitude ":123.3 ,"latitude":23);//獲取經(jīng)緯度設(shè)置在這里就好了
3、“搖一搖”之搖晃模擬
我們常常在微信、微博中的搖一搖功能測試
UIATarget.localTarget().shake();
4、鎖屏幕和多應(yīng)用交互模擬
一般我們打開另外一個程序之后。則當(dāng)前的這個程序就會自己主動進(jìn)入后臺。自己主動測試無法測試后臺應(yīng)用是否正常,我們能夠通過推斷應(yīng)用從后臺到前臺的時候是否正常處理程序。
eg:隨意的位置插入代碼:
UIATarget.localTarget().lockForDuration(2);//鎖屏2秒之后。自己主動恢復(fù)
UIATarget.lcoalTarget().deactivateAppForDuration(2);
若是本來正確的程序而如今插入之后不對,那么從后臺切換到前臺的過程是有問題的。
哎,這漫漫理解吧。沒有什么技術(shù)含量。
轉(zhuǎn)載于:https://www.cnblogs.com/lxjshuju/p/6811756.html
總結(jié)
以上是生活随笔為你收集整理的深入了解UIAutomation 的API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kafka自带没web ui界面,怎么办
- 下一篇: Linq的简介和基础知识学习