如何优化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方法,最好抓取时带一些条件以避免后面的遍历




你可能感兴趣的:(appium,instrument,ios)