zoukankan      html  css  js  c++  java
  • uiautomator——简单的将自动化测试与截图对比相结合使用的小例子!

    1、在使用uiautomator进行自动化测试过程当中,执行某些动作之后,要进行判断是否已执行的动作成功时,需要添加检查点来判断,因此添加判断点除了使用id、text、view等方式进行之外,存在一种问题是界面无任何的可判定元素来判断当前的测试动作是否成功时,就需要用到截图对比;

    2、以下是简单的截图对比与自动化执行相结合使用的小例子,在真正的测试执行过程中,可将截图方法进行封装,在使用时调用即可;

    # -*- coding: utf-8 -*- 
    
    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,(8,8)) 
            image2 = cv2.resize(image2,(8,8)) 
            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[0]): 
                for j in range(image.shape[1]): 
                    if image[i,j] > avreage: 
                        hash.append(1) 
                    else: 
                        hash.append(0) 
            return hash
            
        # 计算汉明距离 
        def Hamming_distance(self,hash1,hash2): 
            num = 0
            for index in range(len(hash1)): 
                if hash1[index] != hash2[index]: 
                    num += 1
            return num 
        
        #使用adb命令截取手机页面图片
        def screenshot(self):
            time.sleep(8)
            #os.system("adb shell /system/bin/screencap -p /sdcard/p2.png")     #(保存到SDCard)
            #os.system("adb pull /sdcard/p2.png E:Studyuiautomatorpicture")    #(保存到电脑)
         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(0)
  • 相关阅读:
    以用户名注册来分析三种Action获取数据的方式
    Struts2中的OGNL详解 《转》
    Module 'null' not found异常解决办法
    struts标签<logic:iterate>的用法
    struts2的核心和工作原理 <转>
    jstl标签怎么实现分页中下一页
    forward 和redirect
    forward 和redirect的区别
    今天早上起来就想着要问问龙虎有圆通没
    昨天晚上回来弄了两个皮蛋吃
  • 原文地址:https://www.cnblogs.com/syw20170419/p/6964361.html
Copyright © 2011-2022 走看看