问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

robotium-solo-5.6.3支持跨进程吗

发布网友 发布时间:2022-04-08 06:24

我来回答

2个回答

懂视网 时间:2022-04-08 10:45

  •   
  • adbDevice.tap(element);  //点击拍照按钮  
  •  

    好,接下来点击了拍照按钮之后,拍照功能还会让你选择是确定还是取消操作,如下图(4)所示:

    技术分享

     

    图(4)

    那么如法炮制,我们通过查询获知,这个用于确定的“√”按钮,它的属性能用于定位的其实只有class属性。不过这里要注意的是,此时由于我们用的是class属性,大家可以看到界面上class属性跟我们要点击的“√”这个按钮相同的对象很多,所以我们必须用findElementsByClass方法了。这个方法返回的是一个ArrayList<Element>,所以我们可以写如下的代码来获取所有class属性为”android.widget.ImageView”的元素列表。

     

    [java] view plaincopy  
    1. ArrayList<Element> imageViews =position.findElementsByClass("android.widget.ImageView");  

     

     

    好,写完之后,现在问题来了,究竟这个数组里面哪个index才是对应的我们要点击的“√”按钮呢?经过试验,我发现界面上多个相同元素返回到数组中时,对应元素位置是按照界面上的位置从上到下、从左到右来的,所以我们要点击的这个按钮的index应该是4。所以点击它的代码如下:

     

    [java] view plaincopy  
    1. adbDevice.tap(imageViews.get(4));    //2是x,3是重拍,4是√  

     

     

    上面的代码运行完后,界面就会回到我们的被测程序,后面的操作就不用我再多说了,大家看看是不是非常简单?技术分享

     

    例子2、跨进程操作之打电话

    有了第一个例子的基础,其实第二个例子就很好实现了。被测程序非常简单,如下图(5)所示:

    技术分享

     

    图(5)

    点击“拨打该号码”后,系统自动进入拨号界面,所以也是典型的跨进程测试场景。

     

    实现方法还是跟例1中一样,先还是用uiautomatorviewer查看界面中的对象信息,再使用对应的方法来操作对象即可。而且在这个例子中,我还给大家演示了另外一种情况,即有些跨进程操作不但要进行操作,还要取得一些对象属性来进行验证,这也是基本可以的。这里我直接给出我的测试代码(稍微封装了一下):

     

    [java] view plaincopy  
    1. public boolean CallUtil(String callNumber){  
    2.         Element  element;  
    3.         boolean  result;  
    4.         //验证是否拨打了正确的号码  
    5.         if(callNumber.length() == 11){//正常号码需要转变为 x xxx-xxx-xxxx的格式  
    6.                 StringformatCallNumber = callNumber.substring(0, 1) + " " +callNumber.substring(1, 4) + "-" + callNumber.substring(4,7) +"-" + callNumber.substring(7, callNumber.length());  
    7.                 element= position.findElementByText(formatCallNumber);  
    8.                 try{  
    9.                         Thread.sleep(2000);  //线程休眠2秒  
    10.                 }catch (InterruptedException e) {  
    11.                         e.printStackTrace();  
    12.                 }  
    13.         }else{  
    14.                 element= position.findElementByText(callNumber);//除正常号码外,其他格式的号码不进行格式转换  
    15.         }  
    16.         if(element != null){  
    17.                 result= true;  
    18.         }else{  
    19.                 result= false;  
    20.         }  
    21.         element= position.findElementByContentdesc("End");   //挂断电话  
    22.         if(element != null) adbDevice.tap(element);  
    23.         return  result;  
    24. }  

     

     

    好了,整个过程非常简单。我相信能用robotium的童鞋用起来应该都没有任何问题,所有代码都是非常易用易懂的。

     

    相信通过前面的实例,大家可以发现说这是“史上最简单”的Robotium跨进程操作解决方案我估计没人会反对,这并不是夸大事实、博人眼球,确实很简单,功能也很强大。其他也不用我多说了,最后我再来对该框架总结一下下吧:

    优点:

    1. 确实非常全,基本封装了adb的所有常用命令,它本身就是一个adb命令使用大全了。

    2. 框架接口设计清晰易懂,简单明了,封装成jar包,用起来也很方便。另外希望大家都能看看它的源码并了解它的实现细节,作者封装得还是很不错的,很值得我们学习,而不仅仅是简单地使用它。

     

    目前已知的不足:

    1. 手机的版本必须是4.1以上,即至少必须支持uiautomator的手机才行,因为该框架本身底层是依赖于uiautomator来dump出对象布局xml文件,最终获取对象的坐标进行操作的,所以你的手机版本本身并不支持uiautomator的话,就没法实现dump操作。

    2. 如果是真机的话,必须要root后的才可以。

    2. 有些对象是uiautomator也无法识别和操作的,那当然这个框架也无能为力了。比如屏幕最上方的通知消息栏的对象,所有工具都没法显示和识别,这个肯定没办法了,另外还比如输入文字时的弹出键盘上的按钮对象等,也无法识别,大家可以试试。

     

    以后想要尝试的改进:

    1. 对于手机版本的支持问题,个人觉得有个曲线救国的方法可以解决。即我们可以稍微修改下源码,加入判断手机版本的代码,判断当前手机版本如果高于4.1,就直接通过uiautomator来dump,如果低于4.1,则读取PC上事先导出到指定位置的xml文件。这样的话,如果你使用的手机不是4.1以上的版本,只需要事先把被测应用用4.1以上版本的手机通过uiautomator先dump到PC的一个指定路径上就行了,这样效果应该是一样的,只要最终能得到对象坐标就OK。

    2. 再加一些比较实用的功能。比如现在可以根据text来查找对象,但实际上很多时候我们可能是得到对象了,但想通过这个对象去获取对象的其他属性,所以建议增加类似getXXXXByElement(Element e)这样的方法,有空试一下,呵呵。

     

    以上只是我的一些个人想法,如果大家还有一些什么别的建议,也欢迎大家都提出来,一起来完善这个很实用的框架。

     

    最后,再次感谢AdbForAndroid框架的作者: xuxu。

    想要研究框架源码的童鞋,可以去github地址下载:https://github.com/gb112211/Adb-For-Robotium

    本文中相关样例工程源码(含被测程序和测试程序)下载

    另外,如果实在不知道怎么用这个框架的童鞋,可以参考下光荣之路的美女讲师的视频,里面有讲怎么去用这个框架:http://pan.baidu.com/s/1i3raNv3?qq-pf-to=pcqq.group

    基于ADB框架Robotium跨进程操作

    标签:

    热心网友 时间:2022-04-08 07:53

    robotium都不支持吧
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    天之骄子生肖里指什么动物 富康ES500电池和供电系统需要维护保养吗? 如何正确认识过敏? 皮肤爱过敏跟免疫力低下有关系么? 公积金账户里有2万多能贷款多少? 钱包颜色有讲究吗钱包颜色的讲究 钱包什么颜色最旺风水 EXO12个人的出生年月日? 求一本小说都市讲的女主是从军队退役,曾在金三角获得什么称号因为爱上了... ...学了故意几十门武功想要走火入魔.借此离开军队.求名字 话费卡的卡号是什么啊! 荣耀8x说明书? 卡号是电话号码? 卡号是电话号码吗 社会保险中提到的大额医疗保险是什么 荣耀magic3使用说明书在哪里可以看到- 问一问 荣耀Ⅹ20使用手册 求那些让你感动的句子,忧伤的,温暖的,触动心弦的。 每年的大额保险指的是什么,医保卡每年报销五千就不能用了对吧 关于一些温暖的优美句子 温暖感动的唯美句子说说心情 医疗大额保险是什么意思 感人语句优美的句子 大额保险是什么保险? 秦兵马俑的历史价值是什么 开服装店风险大吗? 债券合同中为什么要列入保护性条款?这些条款大致包括哪些内容?这些条款... 服装店如何少压货 电脑不能开机,报警两长两短两长,显示屏无反应。 债务合约和股权合约相比为什么重要 SIM卡卡号是什么?怎么知道? 平安 卡号 6221550360577096 电话 02569031751是什么卡号,电话? 《明日之后》第四季,有哪些看点? 明日之后适者生存在哪 古人名字的“字”由来是怎么样的? 古代人为什么都有字? 明日之后人类任务在哪接 《明日之后》裴小峰的十年之约是什么? 古代人的字号由来?? 明日之后陷入苦战视频怎么打 明日之后鱼塘主称号 中国字的由来 古时候人那个“字”代表什么? EMS能邮鸡蛋吗? 最简单的贷款是什么啊? AppStore直接输入密码登入吗 哪家快递可以寄鸡蛋的? 请问顺风快递可&#x33B4;可以寄鸡蛋? 中通快递可以寄鸡蛋吗 生鸡蛋怎么寄快递最安全