如何在Android手机上进行自动化测试(下)
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
前言
通过阅读本篇教程,你将会了解到:
- 如何使用Poco对Android原生应用进行测试
Poco支持直接对任何Android原生应用(非游戏引擎、非webview)进行UI层次结构识别,用法上与Poco在其他平台上一模一样。
注:基于webview的应用比较特殊(如微信小程序或浏览器),请见文档Poco如何支持WebView检视。
开始前的准备
在AirtestIDE的Poco Assistant面板中选择Android模式之后,AirtestIDE会开始自动向手机里安装Pocoservice.apk和Pocoservice-test.apk,部分型号手机需要手动点击确认安装才能顺利安装。
安装完成后,AirtestIDE会自动启动PocoService,它会定时抓取 Android上界面的层次结构信息,稍等片刻就可以在AirtestIDE界面中看到当前界面的UI层次结构树。
点击UI树上的任意节点,可以Log面板中看到该节点的所有属性,同时设备画面中将出现方框,把对应位置框选出来,方便定位节点。

如果Pocoservice启动失败,会导致Pocoservice.apk反复重装,此时可以检查以下几个方面:
- 是否Android版本过低,Poco支持
Android SDK API≥ 19,即Android 4.4及以上 - 请关闭PC或手机上连接的网络代理Proxy,否则可能导致连不上Poco
- 可以尝试卸载手机中的2个Pocoservice相关的APK后,手工重新安装一遍,在
poco\poco\drivers\android\lib目录下能够找到这两个APK - 部分vivo和oppo手机需要将手机设置-输入法设置中,把
Yosemite输入法设置为默认输入法+当前输入法
一个使用计算器的例子
在这里我们提供一个使用Poco对一个计算器应用编写代码的例子,点这里下载示例App(calculator),并事先将此App安装到手机上。
按照刚才说的,在AirtestIDE中的Poco辅助窗下拉菜单中选择Android后,AirtestIDE将会自动启动Pocoservice,显示出当前的UI控件层次结构树。此后就可以在AirtestIDE中进行Poco语句的编写和录制了。
代码示例
下面这段代码例子将演示一个简单的功能:点击calculator的界面,实现一个1+1=2的运算验证。
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco()
poco('com.google.android.calculator:id/digit_1').click()
poco('com.google.android.calculator:id/op_add').click()
poco('com.google.android.calculator:id/digit_1').click()
poco('com.google.android.calculator:id/eq').click()
result = poco('com.google.android.calculator:id/formula').get_text()
assert_equal(result, '', '1+1=2 ^^')
在这段代码中,我们使用poco = AndroidUiautomationPoco()初始化了一个poco对象,然后分别选取了1 + 1按钮进行点击操作后,使用get_text接口非常轻松地获取到了结果控件的值2,并且使用断言语句进行结果验证。
这个例子非常简单,更多poco用法和例子请见poco tutorial。
同时连接多台手机使用Poco
在上一篇教程(四、如何在Android手机上进行测试(上)-多机协作)中,我们提到了一个脚本里可以连接多台Android手机,并且用set_current接口在手机之间切换:
from airtest.core.api import connect_device
dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 连上第一台手机
dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二台手机
set_current(1)
假如我们在连上手机后,想要分别使用poco去获取控件和点击这两台不同的手机,此时需要分别初始化两个poco,就像这样:
from airtest.core.api import connect_device
dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 连上第一台手机
poco1 = AndroidUiautomationPoco(dev1)
dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二台手机
poco2 = AndroidUiautomationPoco(dev2) set_current(1) # 切到第二台手机
poco2('com.google.android.calculator:id/digit_1').click()
同理,假如不使用connect_device接口连接手机,而是通过直接在命令行中传入--device来自动连接手机的话,不需要在代码里重复执行connect_device。此时只需要分别获取到设备对象,并且使用设备对象初始化poco就可以了:
from airtest.core.api import G print(G.DEVICE_LIST) # 假设当前总共有2台手机
poco1 = AndroidUiautomationPoco(G.DEVICE_LIST[0])
poco2 = AndroidUiautomationPoco(G.DEVICE_LIST[1])
如何在Android手机上进行自动化测试(下)的更多相关文章
- 如何在Android手机上进行自动化测试(上)
版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 前言 通过阅读本节教程,你将了解到以下内容: 如何在脚本代码中.运行脚本时指定手机 如何填写--device Android:/// ...
- 如何在 Android 手机上实现抓包?
如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么.网上的教程太复杂,不想麻烦.有 ...
- 如何在 Android 手机上安装 Ubuntu 13.04
在农村,一切都是相对的. 长话短说,我已经厌倦了我们在农村做的一个小小的突破. 我本该去放松,读了一大堆东西涉及到自然语言的处理.但是因为我这些天一直在修改LXC和chroot的时候,我决定将我的An ...
- 如何在iOS手机上进行自动化测试
版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 Airtest支持iOS自动化测试,在Mac上为iOS手机部署iOS-Tagent之后,就可以使用AirtestIDE连接设备,像连 ...
- Android 手机上安装并运行 Ubuntu 12.04
ubuntu.sh脚本的原地址变动了,导致下载不了,现在更新了网盘地址.小技巧:遇到一些下载失效的时候可以试一试p2p下载工具(如 easyMule.迅雷等)试一试,说不定有人分享过~* —————— ...
- 在Android手机上获取其它应用的包名及版本
转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...
- xe5 android 手机上使用sqlite [转]
在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank applicatio ...
- Android 手机上获取手机当前上网IP地址
[转] 原文 Android 手机上获取手机当前上网IP地址 (手机网关给手机号分配的IP) 每个手机上网通过移动网关的时候,网关都会给该手 ...
- Android 在Android手机上获取其他应用的包名及版本号
获取Android手机上其他应用的包名及版本号方法有很多,可以通过AAPT从APK包中直接获取,也可以通过代码在手机上获取.显然,对于产品或者用户来说要获取这些信息,在手机上获取更为简便. 下面我们来 ...
随机推荐
- MySQL 备份数据那点事
mysqldump 什么是 mysqldump ? mysqldump 是 MySQL 用于执行逻辑备份的一款工具,可以根据原始数据库对象以及表的定义和数据来生成一系列可以被执行的 SQL 语句. 通 ...
- ASP使用ajax来传递中文参数的编码处理
背景 asp的第一版是0.9测试版,自从1996年ASP1.0诞生,迄今20余载.虽然asp在Windows2000 IIS服务5.0所附带的ASP 3.0发布后好像再没有更新过了,但是由于其入手简单 ...
- Python拼接字符串的七种方式
忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串.相信不少同学会有同感. 几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型.而拼接字符串是必备的一种技能.今 ...
- ASP.NET Core MVC+EF Core项目实战
项目背景 本项目参考于<Pro Entity Framework Core 2 for ASP.NET Core MVC>一书,项目内容为party邀请答复. 新建项目 本项目开发工具为V ...
- 基于 HTML5 + WebGL 的地铁 3D 可视化系统
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...
- Linux服务和systemctl详解
定义 A Linux service is an application (or set of applications) that runs in the background waiting to ...
- python网络爬虫之入门[一]
目录 前言 一.探讨什么是python网络爬虫? 二.一个针对于网络传输的抓包工具fiddler 三.学习request模块来爬取第一个网页 * 扩展内容(爬取top250的网页) 后记 @(目录) ...
- .net core 上传文件Demo
view: <form method="post" enctype="multipart/form-data" action="@Url.Act ...
- JavaScript-----3.变量
1.变量的使用 变量在使用的时候分两步:1. 声明变量 2. 赋值 1.1声明变量 //声明变量 var age;//声明一个名字为age的变量 var是JS的一个关键字,用于声明变量,使用该关键字声 ...
- P2415 集合求和(一道洛谷好题鸭)(虽然可以水过,但有必研究DP)
此题坑点: 结果必须要用long long存,int存不下 如果想要像cout<<sum*pow(2,num-1)这样在输出时计算会错:long long在计算过程被隐式转换成了doubl ...