如何優化appium-IOS的自動化測試運行的速度

做了測試剛一年,我做了PC appium-android,appium-ios測試開發,也有一些心得,大神什麼的就不要看了,直接正題

我們也都知道appium-ios測試原理是appium調用instrument驅動手機,所以其實我們寫的代碼都會轉化成instrument代碼去執行,appium要放出一套標準的接口,所以會把instrument封裝起來,

我用的appium版本是1.4.13,,開發語言是C#

要想速度提升,只要做到以下三點

1.儘量減少了和appium的交互

假若一個頁面需要抓取很多元素,而這個頁面時靜止的(控件屬性不會再變動)我們可以用getpageSource把頁面源碼獲取下來,解析成一個XML對象,然後利用解析XML對象的接口去獲取所需的節點對象,實現所需業務示例代碼如下:

 pageSource =driver.PageSource;
 xml = new XmlDocument();
 xml.LoadXml(pageSource);    
 xnl = xml.SelectNodes(@"//UIATableCell[@y<" + Screen_Y * 0.75 + " and @visible='true']/UIAStaticText");

假若業務是判斷一個控件屬性的變化,不必每次都去抓取這個控件,然後取他的屬性對比,只需要抓取一次,然後不同時間取他的屬性即可,因爲appium不會緩存控件的屬性,若界面上控件屬性變化,再次獲取這個控件的屬性也會變化,是即是性的,示例代碼如下

element = driver.FindElement(By.Name("wtKeyBoard"));

string value1=element.text;

Thread.sleep(5000);

string value2=element.text;

2儘量少用ByXpath取抓取控件

避免使用By.name因爲Appium1.5已經移除By.name這個抓取方式

By.Id By.Name抓取元素的速度一般般

ByXpath的速度最慢,ios是可以抓取全屏的控件,所以這就導致了有一個問題,假若頁面的控件很多,比如有TableCell的頁面,頁面的控件的越多ByXpath的速度就越慢,ByXpath的抓取機制我就不說了,網上有

所以用什麼替代ByXpath去實現相應的業務這是一個問題,百度了好多資料,終於發現 driver.ExecuteScript();是一個好東西 他可以直接運行instrument的 js代碼,

若想使用好這個恐怕得學另一套接口了

蘋果官方網站提供的intrumnet官方文檔https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/UIAutomationRef/index.html#//apple_ref/doc/uid/TP40009771

獲取一個app的主Window

driver.ExecuteScript(@"var window=target.frontMostApp().mainWindow();");

點擊一個按鈕

driver.ExecuteScript(@“window.navigationBar().buttons()['setting home'].tap();")

使用謂語查找元素 使用謂語也是一個很強大的語法體系跟Xpath一樣,這就是爲什麼可以替代Xpath實現業務,也可以轉爲IWebElement對象,然後使用Appium接口

driver.ExecuteScript("window.navigationBars().withPredicate(\"name=='持倉'|| name='融資融券' \")") as IWebElement

driver.ExecuteScript執行的js結果是字符串,那返回的就是轉爲字符串的object,若是一個控件對象這是一個可以轉爲IWebElement的object,若是無值,這是一個空object

執行速度槓槓的。

3避免抓取很多控件去遍歷

如果去遍歷控件,這是一個很耗費時間的事情,如果必須遍歷,最好用PageSource方法,最好抓取時帶一些條件以避免後面的遍歷




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章