uiautomator——简单的将自动化测试与截图对比相结合使用的小例子!
1、在使用uiautomator进行自动化测试过程当中,执行某些动作之后,要进行判断是否已执行的动作成功时,需要添加检查点来判断,因此添加判断点除了使用id、text、view等方式进行之外,存在一种问题是界面无任何的可判定元素来判断当前的测试动作是否成功时,就需要用到截图对比;
2、以下是简单的截图对比与自动化执行相结合使用的小例子,在真正的测试执行过程中,可将截图方法进行封装,在使用时调用即可;
# -*- coding: utf- -*- from uiautomator import Device
import time
import os
import cv2
import numpy as np class Test:
def __init__(self,deviceid):
self.device=Device(deviceid)
self.deviceid=deviceid def click(self,x,y):
self.device.click(x,y) def startActivity(self,activity):
os.system('adb -s %s shell am start %s' %(self.deviceid,activity)) #平均hash算法计算
def classify_aHash(self,image1,image2):
image1 = cv2.resize(image1,(,))
image2 = cv2.resize(image2,(,))
gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
hash1 = self.getHash(gray1)
hash2 = self.getHash(gray2)
return self.Hamming_distance(hash1,hash2) #输入灰度值,返回hash
def getHash(self,image):
avreage = np.mean(image)
hash = []
for i in range(image.shape[]):
for j in range(image.shape[]):
if image[i,j] > avreage:
hash.append()
else:
hash.append()
return hash # 计算汉明距离
def Hamming_distance(self,hash1,hash2):
num =
for index in range(len(hash1)):
if hash1[index] != hash2[index]:
num +=
return num #使用adb命令截取手机页面图片
def screenshot(self):
time.sleep()
#os.system("adb shell /system/bin/screencap -p /sdcard/p2.png") #(保存到SDCard)
#os.system("adb pull /sdcard/p2.png E:\Study\uiautomator\picture") #(保存到电脑)
self.device.screenshot("E:\\Study\\uiautomator\\picture\\p2.png") if __name__ == "__main__":
w=Test('0123456789ABCDEF') #记录手机串号,查看方式adb devices
w.startActivity('com.android.mms/.ui.ConversationList')
w.screenshot()
img1 = cv2.imread("E:\\Study\\uiautomator\\picture\\p1.png") #读取保存的图片,原始图片
img2 = cv2.imread("E:\\Study\\uiautomator\\picture\\p2.png") #读取与原始图相同使用screenshot方法截取的页面图片
cv2.imshow("img1",img1) #展示图片1
cv2.imshow("img2",img2) #展示图片2
degree = w.classify_aHash(img1,img2) #调用方法,对比两张图片是否相同,返回值0为相同,返回1为不同,值越小,返回值越小,相似度越高
print degree
cv2.waitKey()
uiautomator——简单的将自动化测试与截图对比相结合使用的小例子!的更多相关文章
- python——几种截图对比方式!
本次记录的几种截图对比方式,主要是为了在进行手机自动化测试时,通过截图对比来判断测试的正确性,方式如下: # -*- coding: utf- -*- ''' 用途:利用python实现多种方法来实现 ...
- 简单实现接口自动化测试(基于python+unittest)
简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Pytho ...
- 简单Web UI 自动化测试框架 pyse
WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...
- 如何简单实现接口自动化测试(基于 python) 原博主地址https://blog.csdn.net/gitchat/article/details/77849725
如何简单实现接口自动化测试(基于 python) 2017年09月05日 11:52:25 阅读数:9904 GitChat 作者:饿了么技术社区 原文:如何简单实现接口自动化测试(基于 python ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- 用C#Winform写个简单的批量清空文件内容和删除文件的小工具
用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...
- ASP.NET Cookie对象到底是毛啊?(简单小例子)
记得刚接触asp.net的时候,就被几个概念搞的头痛不已,比如Request,Response,Session和Cookie.然后还各种在搜索引擎搜,各种问同事的,但是结果就是自己还是很懵的节奏. 那 ...
- 2、Lucene 最简单的使用(小例子)
在了解了Lucene以后,我打算亲手来做一个Lucene的小例子,这个例子只是Lucene最简单的应用:使用Lucene实现标准的英文搜索: 1.下载Lucene 下载Lucene,到Lucene的官 ...
- php+jquery+ajax+json简单小例子
直接贴代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Conte ...
随机推荐
- NewLife.Net——开始网络编程
网络编程的重要性就不说了,先上源码:https://github.com/nnhy/NewLife.Net.Tests 一个服务端,就是监听一些端口,接收客户端连接和数据,进行处理,然后响应. /// ...
- SQL性能分析之执行计划
一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL S ...
- AngularJS数据绑定中数据监控的机制说明
from : http://docs.angularjs.org/guide/scope When the browser calls into JavaScript the code execute ...
- log4j2.xml全配置文件
可以参考如下配置 <?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF &g ...
- websocket通信 实现java模拟一个client与webclient通信
发文原由: 熟悉socket通信的同学,对于socket模拟server与client,实现相互通信, 或者使用websocket与java模拟的websocket服务器通信(比如一个聊天室),对于这 ...
- mybatis源码解读(三)——数据源的配置
在mybatis-configuration.xml 文件中,我们进行了如下的配置: <!-- 可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境常用: ...
- HTML编码和CSS编码会遇到的问
http://codeguide.bootcss.com/#html-syntax 参考链接 属性顺序 HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读性. class id, name ...
- vue项目中解决type=”file“ change事件只执行一次的问题
问题描述 在最近的项目开发中遇到了这样的一个问题,当我上传了一个文件时,我将获取到的文件名清空后,却无法再次上传相同的文件 <template> <div class="h ...
- Java 开发环境配置
window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloa ...
- springboot整合shiro后报java.lang.ClassCastExcepting异常
最近搭一个springboot的框架,整合了shiro和redis,由于平常习惯用热部署,所以自然的引入了热部署的包,但是引入后报如下错误: 没错,这个问题害我搞了一天,后来删除热部署,项目正常的跑飞 ...