老李分享:接电话扩展之uiautomator

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。

问题

在做自动化测试的时候,我们遇到接电话的case。这个问题的难点在于要自动的实现某一个时刻有电话打进来才能起作用。像我上篇文章写的case,是一个接电话的case,那么要想让该case起作用,我就得启动case后,手动拨一个电话给该手机。这不叫自动化,只能称为半自动化。那么有没有办法能让某个手机在莫个时间准确的打个电话过来。

思路1

用框架去控制2台手机,告诉其中一台手机给另一台手机打个电话,用我们自研的框架可以实现这个功能。但是问题在于现在不能通过调用API来获取手机号啦,那么如果这么做的话,就得每次手动填写手机号。可能对做APP测试的公司也没太大问题,但是如果是测手机的,手机型号就有很多种,那么sim卡也是很多的,要是每次都填写手机号,是不可行的。所以这个方法在研究了一下午后被我放弃了。

思路2

现在获取手机号的方式有2种,一种发短信给10086,但是不是所有运营商的手机都可以。那么打电话算最靠谱了吧。所以我们需要一个机器来接受来电,然后记录下来电号码,暂且称该手机为总机。只要给总机拨个电话,那么总机就能知道手机号了。如果这个时候,再回拨给该手机,也就是实现了在某个时刻准确的打个电话过来。

所以得在总机上安装个apk,用BroadcastReceiver来处理这种需求。

apk

public class PhoneReceiver extends BroadcastReceiver {

private static final String TAG = "PhoneReceiver";

private String lastIncomingNumber;

private Context context;

private boolean hasCallBack = false;

@Override

public void onReceive(Context context, Intent intent) {

Log.d(TAG, "接收到广播 : " + intent.getAction());

// 如果是去电

this.context = context;

if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {

String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

Log.d(TAG, "call OUT:" + phoneNumber);

} else {

TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);

tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

}

}

PhoneStateListener listener = new PhoneStateListener() {

@Override

public void onCallStateChanged(int state, String incomingNumber) {

Log.d(TAG, "电话状态发生改变" + incomingNumber);

switch (state) {

case TelephonyManager.CALL_STATE_IDLE:

Log.d(TAG, String.format("电话状态变为空闲"));

if (!hasCallBack && lastIncomingNumber != null && lastIncomingNumber.length() != 0) {

hasCallBack = true;

Log.d(TAG, String.format("已挂断和 %s 的通话", lastIncomingNumber));

Intent phoneIntent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + lastIncomingNumber));

phoneIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(phoneIntent);

}

break;

case TelephonyManager.CALL_STATE_OFFHOOK:

break;

case TelephonyManager.CALL_STATE_RINGING:

Log.d(TAG, String.format("收到%s的来电", incomingNumber));

hasCallBack = false;

lastIncomingNumber = incomingNumber;

break;

}

}

};

}

老李分享:接电话扩展之uiautomator 1的更多相关文章

  1. 老李分享:接电话扩展之uiautomator 2

    主要的类就是上面的PhoneReceiver广播接收者.来电的时候,我们记录下电话号码,等该来电挂断以后,立即回拨给对方.配置文件如下: <?xml version="1.0" ...

  2. 老李分享:接电话之uiautomator 1

    老李分享:接电话之uiautomator   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9 ...

  3. 老李分享:《Java Performance》笔记1——性能分析基础 1

    老李分享:<Java Performance>笔记1——性能分析基础   1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...

  4. 老李分享:JVM调优

    老李分享:JVM调优   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨 ...

  5. 老李分享:Web Services 组件 1

    老李分享:Web Services 组件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9 ...

  6. 老李分享:qtp自动化测试框架赏析-关键字自动化测试框架

    老李分享:qtp自动化测试框架赏析-关键字自动化测试框架   QTP从2005年继winrunner,robot逐渐退出历史舞台之后,占领主流自动化测试工具市场已经10年之久.当初为了提高在自动化测试 ...

  7. 老李分享:开发python的unittest结果输出样式

    老李分享:开发python的unittest结果输出样式   Python的unittest结果命令行输出,格式比较乱.为了提高格式输出的可读性,实现可以不同的颜色标识.所以准备扩展Python的un ...

  8. Mvc项目架构分享之项目扩展

    Mvc项目架构分享之项目扩展 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 5.项目 ...

  9. 老李分享:接口测试之jmeter

    老李分享:接口测试之jmeter   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.移动端自动化测试很多人把他仅仅理解成appu ...

随机推荐

  1. GCD(关于容斥原理)

    Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD( ...

  2. linux下常用语言的语法检查插件整理

    linux下常用语言的语法检查插件 可以结合vim语法检查插件syntastic使用,具体请参考syntastic使用说明 如php,sql,json,css,js,html,shell,c等语法插件 ...

  3. WP8.1开发中ListView控件加载图列表的简单使用(1)

    我也是刚接触WP编程没几个月,就是在这段时间一直闲着没事,然后又比较喜欢WP这款系统,就学习了WP这方面的开发言语,自学是很困难的,掌握这方面的资料不多,很初级,就是自己在网上找资料学习过程中,看到别 ...

  4. AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html

    今天用angular写table的时候,遇到了一个问题.在ng-repeat中,含有动态的html,而这些html中含有自定义指令. 因为希望实现一个能够复用的table,所以定义了一个指令mySta ...

  5. HTTP基础知识(二)

    接着上一章的内容:HTTP基础知识(一)   二.简单的HTTP协议 1.客户端:请求访问文本或图像等资源的一端称为客户端: 服务器端:提供资源响应的一端   2.以百度为例子 这是请求头: 在起始行 ...

  6. jeesite简单入口分析

    这两天要开新项目 , 准备使用比较受欢迎的 jeesite框架 . jeesite是一个写好的网站 , 用到的框架比较多 具体请看 -- > github链接 下载下来之后 , 手动把maven ...

  7. 《Django By Example》第八章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:还有4章!还有4章全书就翻译完成了 ...

  8. MAVEN学习(初级)

    1. 项目管理利器 MAVEN 学习,参考慕课网 :http://www.imooc.com/search/?words=maven 2. 下载MEAVN 地址:http://maven.apache ...

  9. Asp.Net Core Authentication Middleware And Generate Token

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  10. 关于使用lazytag的线段树两种查询方式的比较研究

    说到线段树,想来大家并不陌生——最基本的思路就是将其规划成块,然后只要每次修改时维护一下即可. 但是尤其是涉及到区间修改时,lazytag的使用往往能够对于程序的质量起到决定性作用(Ex:一般JSOI ...