开源手机自动化测试框架iQuery入门教程(三)
2012-09-19 16:00 知平软件 阅读(2036) 评论(0) 编辑 收藏 举报前几篇入门教程请参看:
- 开源类库iQuery Android版使用说明
- 类jQuery selector的控件查询iQuery开源类库介绍
- 开源手机自动化测试框架iQuery入门教程(一)
- 开源手机自动化测试框架iQuery入门教程(二)
iQuery是一个开源的自动化测试框架项目,有兴趣的朋友可以在这里下载:https://github.com/vowei/iQuery/downloads
源码位置:https://github.com/vowei/iQuery
在前文讲了iQuery的伪类和伪属性的使用方法,以及注册一个新的伪类和伪属性的方式,例如在Android上注册一个伪类的代码:
iQueryParser parser = iQuery.createParser(“:switch”); parser. registerPseudoClass(“switch”, new IPseudoClass() { public boolean resolve(ITreeNode node) { return filterByNameEndsWith(node, "CheckBox"); } });
然而如果每次使用自定义的伪类,都要重新注册伪类实现方式的话,那势必会让代码变得很臃肿,并难以维护。因此为了解决这个问题,在最近的代码更新中,实现了一个iQuery模板解释器的概念,其实模板解释器跟普通的解释器是完全一样的,只不过基于模板创建的解释器自动会继承模板里已经注册好的自定义伪类和伪属性。
在Android上,创建模板解释器和从模板里创建解释器的方法如下:
iQueryParser parserTemplate = iQuery.createParser(""); parserTemplate.registerPseudoAttribute("text", new IPseudoAttribute() { public String resolve(ITreeNode node) { return node.getText(); } }); parserTemplate.registerPseudoClass("tv", new IPseudoClass() { public boolean resolve(ITreeNode node) { return iQuery.filterByNameEndsWith(node, "TextView"); } }); iQueryParser parser = iQuery.createParser(":tv [:text = '登录']", parserTemplate); LayoutTree tree = constructTree("testParserMethod.txt"); List<ITreeNode> nodes = parser.query(tree.getAllNodesCopy()); Assert.assertEquals(1, nodes.size()); Assert.assertTrue(nodes .get(0) .getName() .compareTo("android.widget.TextView@44f379f0") == 0);
在上面的代码里,第1行使用iQuery.createParser(“”)的方式创建一个解释器模板,第2 – 11行在解释器模板上注册了一个伪属性和伪类,然后第13行从模板里创建一个新的解释器,这个解释器就自动继承了模板里的伪类和伪属性定义。
在iOS上,创建模板解释器和从模板里创建解释器的方法如下:
var iq = new iQuery("", true); iq.parser.registerPseudoAttr("text", function(uiaobj) { if ( uiaobj != undefined ) { return uiaobj.name(); } }); iq.parser.registerPseudoClass("switch", function(uiaobj) { return isMatch(uiaobj, new Array("UIASwitch")); }); var result = root.$("> :button[:text = 'Second']", iq); assert.Equals(1, result.length); result = root.$("> :switch", iq); assert.Equals(1, result.length);
上面的代码里,跟Android版代码类似,第1行通过new iQuery(..)来创建一个模板解释器,其中第二个参数是指明创建模板解释器时,需要注册默认的伪类和伪属性,当然如果设置为false,则可以在代码里手工注册默认的伪类和伪属性,达到修改默认实现的目的。第2 – 9行在模板上注册伪类和伪属性,然后第11行和14行分别使用模板解释器来执行控件查询操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架