1. 程式人生 > >uiautomator——簡單的將自動化測試與截圖對比連接起來使用!

uiautomator——簡單的將自動化測試與截圖對比連接起來使用!

查找 hash算法 elf activit style 成功 調用 .get gree

在自動化測試過程當中,除了使用id。text。view等方式進行查找元素之外,存在一種問題是界面無任何的可判定元素來判斷自動化測試是否成功時,需要用到截圖對比

# -*- 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:\Study\uiautomator\picture") #(保存到電腦) 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)

uiautomator——簡單的將自動化測試與截圖對比連接起來使用!