monkeyrunner之测试结果判断(八)
monkeyrunner的功能脚本编写完成之后,我们就需要对结果进行判断,判断结果是否为我们预期的结果值。下面我们主要讲述2种方式判断结果。
方式一、monkeyrunner截图对比
这是monkeyrunner非常有特色的一种方式,用于通过设备屏幕前后的对比来获取对执行结果的判断。使用.sameAs()对比截图,获得测试结果。
#连接设备
device = MonkeyRunner.waitForConnection()
#当前页面截图
image = device.takeSnapshot()
#去文件中找到我们要对比的正确的图片(这里比如存储在F盘,命名为result.png),与该截图image进行对比
result = MonkeyRunner.loadImageFromFile('F:\\result.png')
#判断图片相识度是否是90%(这个比值根据需求来定)
if image.sameAs(result,0.9):
print "图片对比成功"
else:
print "图片对比失败"
这种方式虽然比较常见,但是如果屏幕分辨率一旦改变,就使得对比结果无效,代码可移植性很低,不稳定。
下面推荐一种通过控件id或文字判断结果的方式。
方式二、monkeyrunner文字对比
1.EasyMonkeyDevice
这种文字对比方式,主要是利用EasyMonkeyDevice中的exists(By selector)和getText(By selector)两种方法来判断。关于EasyMonkeyDevice,后续有文章会专门介绍其所有的API。
核心代码如下(代码中的packageName和activity要换成自己需要的包名和活动名):
#coding:utf-8
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
#提供了根据ID进行访问
from com.android.monkeyrunner.easy import EasyMonkeyDevice
#根据ID返回PyObject的方法
from com.android.monkeyrunner.easy import By
#连接设备
device = MonkeyRunner.waitForConnection()
#packageName、activity根据自己的需求获取,启动app
componentName = packageName + '/' + activity
device.startActivity(component = componentName)
#必须在activity启动之后
easy_device = EasyMonkeyDevice(device)
#判断结果页面中是否有特定控件ID:如果有,则获取该控件上的文本;若没有,则直接出对比结果
if easy_device.exists(By.id('id/btn_loginout')) == True:
text = easy_device.getText(By.id('id/btn_loginout'))
if text.encode('utf-8') == '注销':
print "login success"
else:
print "login failed"
else:
print "login failed"
注:控件text需要具有唯一性。
2.HierarchyViewer
这个方法的API和EasyMonkeyDevice类似,主要用到findViewById和getText来判断。关于HierarchyViewer各API,后续有文章介绍。
由于方法和EasyMonkeyDevice类似,这里不再赘述。核心代码如下:
device=MonkeyRunner.waitForConnection()
hierarchy_viewer = device.getHierarchyViewer()
login_button = hierarchy_viewer.findViewById('id/btn_loginout')
text = hierarchy_viewer.getText(login_button)
print text.encode('utf-8')
最后,再补充一句,还可以根据EasyMonkeyDevice的getFocusedWindowId接口来获取当前页面的窗口ID,即activity,或者,根据HierarchyViewer的getFocusedWindowName来获取当前页面的packageName/activityName。从而方便monkeyrunner脚本中各页面的切换。
注:每个窗口的activity并不是唯一的,所以当activity相同时,需要activity的Fragment来判断当前页面。(判断方法后续讲述,主要用sdk/tools/uiautomatorviewer)
核心代码如下,欢迎拍砖:
#获取当前页面窗口ID
winId = easy_device.getFocusedWindowId()
print winId.encode('utf-8')
monkeyrunner之测试结果判断(八)的更多相关文章
- Kali Linux Web 渗透测试视频教程— 第八课 nessus
Kali Linux Web 渗透测试视频教程— 第八课 nessus 文/玄魂 视频课程地址:http://edu.51cto.com/course/course_id-1887.html 目录 n ...
- shell编程之测试和判断
一.测试 程序运行中经常需要根据实际情况来运行特定的命令或代码段.比如判断某个文件或目录是否存在,如果文件或目录不存在,可能首先创建文件或目录.举例说,要判断文件/var/log/mlocate文件是 ...
- 从零自学Java-5.使用条件测试进行判断
1.使用if语句进行最基本的条件测试:2.测试一个值大于还是小于另一个值:3.测试两个值是否相等:4.使用与if语句对应的else语句:5.组合多个条件测试:6.使用switch语句进行复杂的条件测试 ...
- Java 程序测试_判断语句
package test; public class Condition_Phase { public static void main (String[] args) { //The Traditi ...
- 【2016北京集训测试赛(八)】 crash的数列 (思考题)
Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多 ...
- Brup Suite 渗透测试笔记(八)
续上次笔记 1.之前记到payload类型的用户名生成器,(username generator).这种类型发payload只要用于用户名和email账号的自动生成. 2.ECB加密块洗牌(ECB ...
- 2016北京集训测试赛(八)Problem C: 直径
Solution 一个定理: 把两棵树用一条边练成一棵树后, 树的直径在原来两棵树的四个直径端点中产生. 放到这一题, 我们通过DP先求出大树中以每个点为根的子树中的直径, 再取每棵小树中与其他树有连 ...
- 渗透测试学习 十八、 XSS跨站脚本漏洞详解 续
XSS平台搭建 ISS+zkeysphp 首先在IIS中新建一个网站,详细过程可以看我之前写搭环境的文章 (下面的写入选项不需要选中) 安装ZKEYS PHP 修改数据库配置 用户名:root 密码: ...
- Android 测试 之MonkeyRunner
一.什么是MonkeyRunner monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器.通过monkeyrunner,您可以 ...
随机推荐
- 单片机DA转换实现正弦波
使用的是查表法: 1.c文件: #include "reg52.h" #include <intrins.h> #include <i2c.h> #defi ...
- C#正则表达式Regex常用匹配
使用Regex类需要引用命名空间:using System.Text.RegularExpressions; 利用Regex类实现验证 示例1:注释的代码所起的作用是相同的,不过一个是静态方法,一个是 ...
- EC笔记,第二部分:9.不在构造、析构函数中调用虚函数
9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...
- MySQL练习2
学习MySQL过程中做的练习题,感觉是不错的例子就记录下来. 练习要使用到的表: 表一:员工表–> yg y_id y_name y_sex y_age y_address b_id 1 赵老大 ...
- UDS(ISO14229-2006) 汉译(No.5 公共约定)
ISO 14229遵循OSI Service Conventions(ISO 10731)(OSI服务公约)所述,并应用于诊断服务.这些约定指定相互作用与服务消费者和服务提供者.通过服务原语,信息数据 ...
- WebAPI生成可导入到PostMan的数据
一.前言 现在使用WebAPI来作为实现企业服务化的需求非常常见,不可否认它也是很便于使用的,基于注释可以生成对应的帮助文档(Microsoft.AspNet.WebApi.HelpPage),但是比 ...
- Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍
回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...
- 解决eclipse配置Tomcat时找不到server选项(Mac通用)
集成Eclipse和Tomcat时找不到server选项: 按照网上的步骤如下: 在Eclipse中,窗口(window)——首选项(preferences)——服务器(Server)——运行时环境( ...
- [翻译]用 Puppet 搭建易管理的服务器基础架构(4)
我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第四部分. 原文地址:http://blog.jobbole.com/89214/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...
- 纯CSS3实现3D跳动小球
请使用Chrome,火狐的浏览器查看本页面,使用IE将看不到效果.如果在本页看不到一个跳动的小球,请确定您的浏览器支持CSS3,或者访问http://keleyi.com/a/bjac/iphgrtq ...