当前位置: 首页 > news >正文

django做购物网站/软文网站名称

django做购物网站,软文网站名称,成都网站开发建设公司,php做网站子页模板本系列旨在阐述Android自动化的原理,让大家明白如何在Android平台上做自动化,甚至开发出自己的自动化工具来。 什么是Android自动化? 相信对于测试同学,这个问题就很简单了。自动化的目的就是做好回归测试,以达到版本控…

本系列旨在阐述Android自动化的原理,让大家明白如何在Android平台上做自动化,甚至开发出自己的自动化工具来。

什么是Android自动化?

相信对于测试同学,这个问题就很简单了。自动化的目的就是做好回归测试,以达到版本控制,并节省人力。而Android自动化就是在Android平台上做测试自动化,相信随着Android开发的日趋盛行,其测试自动化的需求也会逐渐增强,知其然,固然是好,但如能知其所以然,必将锦上添花。

目前我所知道的做Android自动化的工具有:

  •  Ranorex 支持录制回放功能,但是不太好用,需要在开发代码中注入一段测试代码,并且它是收费的。
  •  Robotium 开源的黑盒测试框架,使用时需要引入一个JAR包,需要测试人员有一定的编码功底,才能编写Test Case。
  •  Monkeyrunner Google随SDK发布的测试工具,功能简单,不是很好用。

因为是想研究自动化原理,所以这里主要参考Robotium以及Android源码。

如何识别页面元素?

做过自动化的同学应该都知道,我们在写涉及UI的自动化case时,其基本思路就是找到某元素—>执行操作,这里的操作要么是动作,要么是是验证。仔细想想,其实道理就是这样。所以说如果我们想开发自己的自动化测试工具时,首要解决的问题就是,如何在测试时,找到页面的元素。

而在Android中,思路也是一样。

如何大家研究过Android的窗口机制的话,应该看到过这样的说法,真正实现WindowManager窗口机制的是WindowManagerImpl类,它会把DecorView添加到mViews数组,创建对应的ViewRoot,而DecorView是何物呢?参考我上篇博客:http://www.cnblogs.com/jinsdu/archive/2013/01/03/2840565.html 知道,实际上DecorView是页面最顶层的View,而如果能够获取到它,我们就可以将其转换成ViewGroup,然后遍历其所有子节点从而得到所有的页面元素了。而运用java的反射机制,正好可以在运行时,获取类的属性和方法:

于是在运行时,获得WindowManagerImpl类:

    private static Class<?> windowManager;static{try {String windowManagerClassName = "android.view.WindowManagerImpl"; windowManager = Class.forName(windowManagerClassName);} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (SecurityException e) {e.printStackTrace();}}

然后获得页面的DecorView:

    private View[] getWindowDecorViews(){Field viewsField;Field instanceField;try {viewsField = windowManager.getDeclaredField("mViews");instanceField = windowManager.getDeclaredField("sWindowManager");viewsField.setAccessible(true);instanceField.setAccessible(true);Object instance = instanceField.get(null);return (View[]) viewsField.get(instance);} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}

如此我们就获得了页面的DecorView了,转换成ViewGroup,遍历其所有子元素,我们就能获得页面的所有元素:

    public ArrayList<View> getAllViews() {final View[] views = getWindowDecorViews();final ArrayList<View> allViews = new ArrayList<View>();if (views != null && views.length > 0) {View view;for (int i = 0; i < views.length; i++) {view = views[i];
          allViews.add(view);getAllChildren(allViews, (ViewGroup) view);}}
return allViews;}private void getAllChildren(ArrayList<View> allViews, ViewGroup viewGroup) {if (viewGroup != null) {for (int i = 0; i < viewGroup.getChildCount(); i++) {View child = viewGroup.getChildAt(i);allViews.add(child);if (child instanceof ViewGroup) {getAllChildren(allViews, (ViewGroup) child);}}}}

而获得了页面的元素,就基本上完成了我们UI Automation两步走的第一步 —> 找到页面元素。试想一下,如果我们的Android自动化框架有上面类似的功能,那么我们的自动化框架就能在运行时获得页面的所有元素,而我们在写case时,也许只要传给自动化框架一个控件ID,我们就可以获得这个元素了。有了这个元素我们就可以向我们的第二步迈进了—>在控件上执行操作,或者取其属性进行Expected验证。当然我会在接下来的文章中,一一阐述这些内容。

总结

研究Android自动化原理,要涉及到很多知识,尤其对Android的窗口机制要更加明确,像页面是如何加载,如何通信,都不是一言半语可以说清的,我也是正在研究中。对于WindowManagerImpl类的源码,有兴趣的同学,可以研究下:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/view/WindowManagerImpl.java#WindowManagerImpl 

最后,欲知后事如何,且听下回分解。

 

转载于:https://www.cnblogs.com/jinsdu/archive/2013/01/14/2858329.html

http://www.jmfq.cn/news/5087341.html

相关文章:

  • 做网站的经费/企业网站设计制作
  • 上海做家纺的公司网站/百度推广和优化哪个好
  • 江门学做网站课程/百度 官网
  • wordpress文章相册模式/百度网站优化
  • 霍山做网站/seo在线优化技术
  • 自己建设的网站打开慢/网络营销师资格证
  • 全民建网站/微信指数怎么看
  • 企业快速建站的公司/知了seo
  • 可信的品牌网站建设/站长聚集地
  • 建设部网站资质核查/沈阳网络营销推广的公司
  • 学计算机网站开发好吗/班级优化大师的功能有哪些
  • 网站怎么优化排名/常见的网络营销方式
  • 独立站平台/去了外包简历就毁了吗
  • 网站建设推广有用吗/疫情防控最新信息
  • 建网站 方法/论坛推广方案
  • 西安网站建设公司都有哪些/咨询网络服务商
  • php wordpress/seo团队管理系统
  • 网站开发工程师项目经验怎么写/网上接单平台有哪些
  • wordpress怎样上传主题/seo网站诊断流程
  • 建站行业分析/北京百度竞价托管
  • 小型购物网站模板/搜狗网站
  • 广东网站建设哪家好/厦门seo总部电话
  • 深圳麒麟网站建设/seo单词优化
  • 武汉定制网站建设/百度网站提交
  • 基本的网站开发技术/市场推广seo职位描述
  • 个人公司网站怎么做/友情链接的形式有哪些
  • 淘宝客网站必须备案吗/如何推广网上国网
  • 青岛做网站多少钱/百度搜索关键词排名靠前
  • 外贸营销工具/成都百度快照优化排名
  • 网站服务器宽带/百度关键词排名用什么软件