原创开源项目 -- HierarchyViewer for iOS(2)
2016-06-12 14:43
639 查看
前文中,我们介绍了HierarchyViewer for iOS的主要功能,这款工具可以非常直观的阅读iOS应用的控件层次图,如下图所示:
还可以右键点击某个控件,来获取它在UIAutomation中的调用路径:
然后我们在剪切板可以得到该控件的调用路径:
把它拷贝到Instruments中,就可以直接调用这个控件了。
更多功能可以参考上文,本文我们将要介绍的是HierarchyViewer for iOS如何辅助生成iquery代码并进行测试的。
什么是iquery
iquery.js是我们发布的一个辅助iOS UIAutomation的javascript开源库,它可以非常方便的帮助我们找到iOS上面的控件,在处理动态生成的控件时更是非常有效;它采用了类似jquery的语法,熟悉jquery的人员很容易入手。用法非常简单,你可以在https://github.com/vowei/iQuery/downloads 下载它,然后在iOS UIAutomation中引用它即可,例如:
我们举个例子来说明下iquery的语法吧。
[code]$(">> [name = 'Table']")[0].tap()
以上代码表示在整个页面中查找name为‘Table’的控件,并点击它。我们来分析它的语法:
>> -- 表示查找所有的子孙节点。由于iquery默认是从UIAWindow开始查找的,所以这里>>指的就是查找UIAWindow所有的子孙控件。
[name = ‘Table’] -- 表示在结果中查找name为’Table’的控件。
这里有个小技巧,读者可能会感觉执行上面的代码速度会比较慢,这是由于iOS UIAutomation自身的问题导致在遍历控件的子控件时速度很慢造成的,解决办法是在UIAutomation脚本前面加上下面的语句:
具体可以参考stackoverflow对这个问题的回答。
iquery生成测试器
iquery为我们提供了强大的功能,但是手工编写还是一件有点麻烦的事,HierarchyViewer for iOS为提供了友好的iquery生成测试工具来帮助我们编写和测试它。
在工具栏上点击[url=http://images.cnblogs.com/cnblogs_com/Binhua-Liu/201208/201208150405008705.png]target.frontMostApp().windows()[0].na
4000
vigationBars[]("TestUIDemo").$("> [value='TestUIDemo']")[0].tap()[/code]
以上调用的前一部分target.frontMostApp().windows()[0].navigationBars[]("TestUIDemo")-- 是标准的UIAutomation语法,后一部分.$("> [value='TestUIDemo']")[0],是iquery语法。
以上语法的意义是,在name为TestUIDemo的NavigationBar下面,查找value为TestUIDemo的子控件,并tap它:
> 表示查找所有的子控件(注意,不是子孙控件),这里由于当前当前控件是NavigationBar,所以查找的是NavigationBar的所有子控件
[value=’TestUIDemo’] 表示查找value为‘TestUIDemo’的控件。
那么这种混合语法如何进行生成和测试呢?如下图所示:
[url=http://images.cnblogs.com/cnblogs_com/Binhua-Liu/201208/201208151636476913.png]
还可以右键点击某个控件,来获取它在UIAutomation中的调用路径:
然后我们在剪切板可以得到该控件的调用路径:
.buttons()["Table"]
把它拷贝到Instruments中,就可以直接调用这个控件了。
更多功能可以参考上文,本文我们将要介绍的是HierarchyViewer for iOS如何辅助生成iquery代码并进行测试的。
什么是iquery
iquery.js是我们发布的一个辅助iOS UIAutomation的javascript开源库,它可以非常方便的帮助我们找到iOS上面的控件,在处理动态生成的控件时更是非常有效;它采用了类似jquery的语法,熟悉jquery的人员很容易入手。用法非常简单,你可以在https://github.com/vowei/iQuery/downloads 下载它,然后在iOS UIAutomation中引用它即可,例如:
#import "iquery.js"
我们举个例子来说明下iquery的语法吧。
[code]$(">> [name = 'Table']")[0].tap()
以上代码表示在整个页面中查找name为‘Table’的控件,并点击它。我们来分析它的语法:
>> -- 表示查找所有的子孙节点。由于iquery默认是从UIAWindow开始查找的,所以这里>>指的就是查找UIAWindow所有的子孙控件。
[name = ‘Table’] -- 表示在结果中查找name为’Table’的控件。
这里有个小技巧,读者可能会感觉执行上面的代码速度会比较慢,这是由于iOS UIAutomation自身的问题导致在遍历控件的子控件时速度很慢造成的,解决办法是在UIAutomation脚本前面加上下面的语句:
UIATarget.localTarget().setTimeout(0);
具体可以参考stackoverflow对这个问题的回答。
iquery生成测试器
iquery为我们提供了强大的功能,但是手工编写还是一件有点麻烦的事,HierarchyViewer for iOS为提供了友好的iquery生成测试工具来帮助我们编写和测试它。
在工具栏上点击[url=http://images.cnblogs.com/cnblogs_com/Binhua-Liu/201208/201208150405008705.png]target.frontMostApp().windows()[0].na
4000
vigationBars[]("TestUIDemo").$("> [value='TestUIDemo']")[0].tap()[/code]
以上调用的前一部分target.frontMostApp().windows()[0].navigationBars[]("TestUIDemo")-- 是标准的UIAutomation语法,后一部分.$("> [value='TestUIDemo']")[0],是iquery语法。
以上语法的意义是,在name为TestUIDemo的NavigationBar下面,查找value为TestUIDemo的子控件,并tap它:
> 表示查找所有的子控件(注意,不是子孙控件),这里由于当前当前控件是NavigationBar,所以查找的是NavigationBar的所有子控件
[value=’TestUIDemo’] 表示查找value为‘TestUIDemo’的控件。
那么这种混合语法如何进行生成和测试呢?如下图所示:
[url=http://images.cnblogs.com/cnblogs_com/Binhua-Liu/201208/201208151636476913.png]
相关文章推荐
- 原创开源项目 -- HierarchyViewer for iOS(1)
- IOS JSON解析
- IOS7笔记-11、表格视图和iPad
- IOS Dev Intro - Opengl ES Series 02
- IOS Dev Intro - Opengl ES Series 01
- iOS中NSBundle的介绍
- iOS中NSBundle的介绍
- iOS 利用mask layer 使view中扣掉一块露出下边的view
- iOS开发:使用苹果自带框架实现二维码和条形码扫描
- qq iOS环境配置及调用
- 如果你想在 iOS 设备(iPhone/iPad/iTouch)上调试, 需要有 iOS 开发证书和
- iOS开发:仿支付宝界面拖拽按钮动画
- IOS 控件常识
- [iOS 字符串] 字符串后几位截取
- 离屏渲染学习笔记
- iOS监听模式之KVO、KVC的高阶应用
- iOS监听模式之KVO、KVC的高阶应用
- iOS编程(3)NavigationController
- CodingNet - Learning - 8
- iOS创建JSON字符串