随笔 - 301  文章 - 27  评论 - 8  阅读 - 10万

UI自动化测试-40--WebDriver--. 比较网页截图图片

from selenium import webdriver
import unittest,time
from PIL import Image

'''
某些情况下,我们需要对某个功能执行两次,分别截图,通过比较截图来验证功能是正确的。
首先安装python的pillow包,然后导入:from PIL import Image
'''
class ImageCompare(object):
'''
本类实现了对两张图片通过像素对比的算法,获取文件的像素个数大小
然后使用循环的方式将两张图片的所有项目进行一一对比
并计算比对结果的相似度的百分比
'''
def make_regalur_image(self,img,size = (256,256)):
#将图片尺寸强制重置为指定的size大小,然后再将其转换成RGB值
return img.resize(size).convert('RGB')

def split_image(self,img,part_size = (64,64)):
#将图片按给定大小切分
w,h = img.size
pw,ph = part_size
assert w % pw ==h % ph == 0
return [img.crop((i,j,i + pw,j + ph)).copy()
for i in range(0,w,pw) for j in range(0,h,ph)]

def hist_similar(self,lh,rh):
#统计切分后每部分图片的相似度频率曲线
assert len(lh) == len(rh)
return sum(1 - (0 if l == r else float(abs(1 - r)) / max(1,r))
for l,r in zip(lh,rh)) / len(lh)

def calc_similar(self,li,ri):
#计算两张图片的相似度
return sum(self.hist_similar(l.histogram(),r.histogram())
for l,r in zip(self.split_image(li),self.split_image(ri)))/16.0

def calc_similar_by_path(self,lf,rf):
li,ri = self.make_regalur_image(Image.open(lf)),\
self.make_regalur_image(Image.open(rf))
return self.calc_similar(li,ri)

class TestDemo(unittest.TestCase):
def setUp(self):
self.IC = ImageCompare()
self.driver = webdriver.Chrome()

def test_ImageComparison(self):
self.driver.get('https://www.baidu.com/')
self.driver.save_screenshot('d:\\a.png')
self.driver.get('https://www.baidu.com/')
self.driver.save_screenshot('d:\\b.png')
print(self.IC.calc_similar_by_path('d:\\a.png','d:\\b.png'))

def tearDown(self):
self.driver.quit()

if __name__ == '__main__':
unittest.main()
posted on   寻不到花的蝶  阅读(446)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示