【转】Appium 中截取 element 图片作为对比,判断对比结果
其实在https://github.com/gb112211/Adb-For-Test 里面有一个截取element进行对比的方法,但是在使用appium时是无法使用的,因为其用到了uiautomator命令。。。
在appium中截取界面某个element,也就是截取屏幕的部分区域进行对比,在以图片对比结果作为判断依据的时候还是有用的,直接上代码:
extend.py
- #!/usr/bin/env python
- #coding=utf-8
- import os
- import platform
- import tempfile
- import shutil
- from PIL import Image
- PATH = lambda p: os.path.abspath(p)
- TEMP_FILE = PATH(tempfile.gettempdir() + "/temp_screen.png")
- class Appium_Extend(object):
- def __init__(self, driver):
- self.driver = driver
- def get_screenshot_by_element(self, element):
- #先截取整个屏幕,存储至系统临时目录下
- self.driver.get_screenshot_as_file(TEMP_FILE)
- #获取元素bounds
- location = element.location
- size = element.size
- box = (location["x"], location["y"], location["x"] + size["width"], location["y"] + size["height"])
- #截取图片
- image = Image.open(TEMP_FILE)
- newImage = image.crop(box)
- newImage.save(TEMP_FILE)
- return self
- def get_screenshot_by_custom_size(self, start_x, start_y, end_x, end_y):
- #自定义截取范围
- self.driver.get_screenshot_as_file(TEMP_FILE)
- box = (start_x, start_y, end_x, end_y)
- image = Image.open(TEMP_FILE)
- newImage = image.crop(box)
- newImage.save(TEMP_FILE)
- return self
- def write_to_file( self, dirPath, imageName, form = "png"):
- #将截屏文件复制到指定目录下
- if not os.path.isdir(dirPath):
- os.makedirs(dirPath)
- shutil.copyfile(TEMP_FILE, PATH(dirPath + "/" + imageName + "." + form))
- def load_image(self, image_path):
- #加载目标图片供对比用
- if os.path.isfile(image_path):
- load = Image.open(image_path)
- return load
- else:
- raise Exception("%s is not exist" %image_path)
- #http://testerhome.com/topics/202
- def same_as(self, load_image, percent):
- #对比图片,percent值设为0,则100%相似时返回True,设置的值越大,相差越大
- import math
- import operator
- image1 = Image.open(TEMP_FILE)
- image2 = load_image
- histogram1 = image1.histogram()
- histogram2 = image2.histogram()
- differ = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, \
- histogram1, histogram2)))/len(histogram1))
- if differ <= percent:
- return True
- else:
- return False
接着跑了个appium脚本简单测试了下:
extend_test.py
- #coding=utf-8
- import unittest
- import os
- from extend import Appium_Extend
- from appium import webdriver
- class Test(unittest.TestCase):
- #初始化环境
- def setUp(self):
- desired_caps = {}
- desired_caps["platformName"] = "Android"
- desired_caps["platformVersion"] = "4.3"
- desired_caps["deviceName"] = "788a6ab5"
- desired_caps["appPackage"] = "com.android.settings"
- desired_caps["appActivity"] = ".Settings"
- self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
- self.extend = Appium_Extend(self.driver)
- #回到主屏幕
- self.driver.press_keycode(3)
- #退出测试
- def tearDown(self):
- self.driver.quit()
- def test_get_screen_by_element(self):
- element = self.driver.find_element_by_id("com.android.deskclock:id/imageview")
- self.extend.get_screenshot_by_element(element).write_to_file("f:\\screen", "image")
- self.assertTrue(os.path.isfile("f:\\screen\\image.png"))
- def test_same_as(self):
- element = self.driver.find_element_by_id("com.android.deskclock:id/imageview")
- load = self.extend.load_image("f:\\screen\\image.png")
- #要求百分百相似
- result = self.extend.get_screenshot_by_element(element).same_as(load, 0)
- self.assertTrue(result)
- if __name__ == "__main__":
- suite = unittest.TestSuite()
- suite.addTest(Test("test_get_screen_by_element"))
- suite.addTest(Test("test_same_as"))
- #执行测试
- unittest.TextTestRunner().run(suite)
这里截取的图片是下面这张图中的时间插件:
截取后的图片:
另外批量截图、批量对比就针对需求再做扩展了!
【转】Appium 中截取 element 图片作为对比,判断对比结果的更多相关文章
- C#从大图中截取一部分图片
#region 从大图中截取一部分图片 /// <summary> /// 从大图中截取一部分图片 /// </summary> /// <param name=&quo ...
- pdf文件中截取eps图片并压缩
最近遇到了一个问题,需要从pdf裁剪出其中部分的矢量图格式的图片,并保存为eps格式,方便使用. 最简单的方法就是先用acrobat pro将pdf进行页面抽取,并裁剪,剩下所需要的图片部分,然后另存 ...
- 微信开发中使用微信JSSDK和使用URL.createObjectURL上传预览图片的不同处理对比
在做微信公众号或者企业微信开发业务应用的时候,我们常常会涉及到图片预览.上传等的处理,往往业务需求不止一张图片,因此相对来说,需要考虑的全面一些,用户还需要对图片进行预览和相应的处理,在开始的时候我使 ...
- selenium - 截取页面图片和截取某个元素的图
1.截取页面图片并保存 在测试过程中,是有必要截图,特别是遇到错误的时候进行截图. # coding:utf-8 from time import sleep from PIL import Imag ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- 13、在 uwp应用中,给图片添加高斯模糊滤镜效果(一)
如果在应用中,如果想要给app 添加模糊滤镜,可能第一想到的是第三方类库,比如 Win2d.lumia Imaging SDK .WriteableBitmapEx,不可否认,这些类库功能强大,效果也 ...
- C# 截取图片区域,并返回所截取的图片
/// <summary> /// 截取图片区域,返回所截取的图片 /// </summary> /// <param name="SrcImage" ...
- 在Windows 10中截取截图的6种方式 简介
在Windows 10中截取截图的6种方式 简介 截图对于不同的目的很重要.它可以用于捕获笔记本电脑上的任何内容的截图.所以,如果你使用Windows 10,你可能不知道如何截图,因为它是比较新的.因 ...
- C#截取验证码图片
使用Graphics类中的DrawImage方法,这个方法有30种重载方式,这里只介绍一种,也是我认为最直观的一种,代码如下: using System.Drawing; namespace kq.U ...
随机推荐
- [T-ARA][yayaya]
歌词来源:http://music.163.com/#/song?id=22704449 U look at me Right T-ARA U Ready Let me seeya LaLaLaLa ...
- 智能指针shared_ptr新特性shared_from_this及weak_ptr
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shar ...
- Android 4.4中AudioRecord用例 - 录制系统内置声音
通过API 19新加的MediaRecorder.AudioSource.REMOTE_SUBMIX參数能够让系统App录制系统内置的声音,也就是扬声器的声音.以下是一个巨简单的样例来演示样例怎样通过 ...
- VM下,装centos7系统,配置nginx的问题
一.流程 1.先安装nginx依赖的包 (1)yum install gcc-c++ (2)yum install -y pcre pcre-devel (3)yum install -y zlib ...
- ethers.js-1
https://docs.ethers.io/ethers.js/html/ What is ethers.js The ethers.js library aims to be a complete ...
- Windows与Linux之间的文件自动同步
问题:在工作中遇到一个场景,需要每天定时将Linux机器上的文件自动同步到Windows机器上. 解决方案有两个: 1.在Windows 机器上设置共享目录,然后在Linux机器上挂载共享 目录,每天 ...
- ICC Scenario Definition
现代先进工艺下的后端设计都是在 MCMM 情况下设计的,所谓 MCMM 就是 muti-corner muti-mode,用于芯片的不同工作模式和工作条件. 后端设计过程中,需要保证芯片在所有工作模 ...
- ejs引擎项目
关于这个我也很懵逼,写这篇博客就是想记录一下,有哪位大神看到之后可以略微指点一二,不胜感激....... 一.项目结构 db model user.js version.js schema xx.js ...
- 743. Network Delay Time
题目来源: https://leetcode.com/problems/network-delay-time/ 自我感觉难度/真实难度: 题意: 分析: 自己的代码: class Solution: ...
- ddt 测试用例UI运用
import xlrd from selenium import webdriver import ddt import time import unittest class Excel(object ...