14.Android UiAutomator 图像处理
一、BitMap介绍
1.图像使用场景
1)效果类截图
2)不可见的组件图像对比
3)失败与异常截图
4)利用图像判断组件
2.部分API简单说明
|
API |
说明 |
| compress | 压缩图片 |
| copy | 复制图片 |
| createBitmap | 创建图片 |
| getHeight | 获取图片高度 |
| getWidth | 获取图片宽度 |
| getPixel | 获取某个点颜色值 |
| setPixel | 设置某个点颜色值 |
3.创建bitmap实例
//方法体代码
public class ImageTestCase extends UiAutomatorTestCase{
public void saveBitMapToSdcard(Bitmap bitmap,String newName){
FileOutputStream out=null;
try {
out=new FileOutputStream("/mnt/sdcard/"+newName+".jpg");
if(out!=null){
//三个参数分别为格式、保存的文件质量、文件流
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.close();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} //用例部分代码
public class test1 extends ImageTestCase{
//快速调试
public static void main(String [] args){
new UiAutomatorHelper("test","testDemo1.test1","testDemo1","2");
}
//创建一个Bitmap
public void testDemo1(){
//a.截取一张图片
String Path="/mnt/sdcard/testBitMap.png";
File storePath=new File(Path);
UiDevice.getInstance().takeScreenshot(storePath);
sleep(1000);
//b.将图片重命名并保存
//从文件中创建bitmap
Bitmap bitmap=BitmapFactory.decodeFile(Path);
//调用方法体
saveBitMapToSdcard(bitmap,"new-Image-88");
}
}
二、获取像素值与图像截取
像素值:每一个像素点的颜色值
1.获取某点像素值实例
//方法体代码
public class ImageTestCase extends UiAutomatorTestCase{
//根据描述获取组件
public UiObject obj(String text){
return new UiObject(new UiSelector().description(text));
}
//截取一张图片后另存
public void cutBitmap(Rect rect,String path){
Bitmap m=BitmapFactory.decodeFile(path);
m=m.createBitmap(m,rect.left,rect.top,rect.width(),rect.height());
//调用上面例子中的那个方法,实际调试过程中如果需要就把那个方法体加上
saveBitMapToSdcard(m, "cutImg_88");
}
//获取某点的颜色值
public int getColorPicel(int x,int y){
String path="/mnt/sdcard/testcolor.png";
File file=new File(path);
UiDevice.getInstance().takeScreenshot(file);
Bitmap m=BitmapFactory.decodeFile(path);
int color=m.getPixel(x, y);
return color;
}
} //用例代码
public class test1 extends ImageTestCase{
//快速调试
public static void main(String [] args){
new UiAutomatorHelper("test","testDemo1.test1","testDemo2","2");
}
//用例
public void testDemo2() throws UiObjectNotFoundException{
//截取图片
Rect rect = obj("城市").getBounds();
String path="/mnt/sdcard/testcolor.png";
File file=new File(path);
UiDevice.getInstance().takeScreenshot(file);
//调用方法体
cutBitmap(rect,path);
//调用方法体获取某个点的颜色值
int color=getColorPicel(rect.centerX(),rect.centerY());
System.out.println("COLOR:"+color);
}
}
三、图像嵌入文字
截图的时候希望把用例场景用文字写在图像上,便于快速查看
1.图像嵌入文字实例:
//方法体
public class ImageTestCase extends UiAutomatorTestCase{
//截图方法
public void screenshotAndDrawRext(String path,String imageName,String text){
File file=new File(path);
UiDevice.getInstance().takeScreenshot(file);
Bitmap bitmap=BitmapFactory.decodeFile(path);
Bitmap drawBitmap=drawTextBitmap(bitmap,text);
saveBitMapToSdcard(drawBitmap, imageName);//调用前面第一个例子中的方法
}
//嵌入文字方法
public Bitmap drawTextBitmap(Bitmap bitmap,String text){
int x=bitmap.getWidth();
int y=bitmap.getHeight();
//创建一个更大的位图
Bitmap newBitmap=Bitmap.createBitmap(x,y+80,Bitmap.Config.ARGB_8888);
Canvas canvans=new Canvas(newBitmap);
Paint paint=new Paint();
//在原图位置(0,0)叠加一张图片
canvans.drawBitmap(bitmap, 0, 0,paint);
//画笔眼色
paint.setColor(Color.parseColor("#FF0000"));
paint.setTextSize(80);//设置文字大小
canvans.drawText(text, 300, y+55, paint);//写字
canvans.save(Canvas.ALL_SAVE_FLAG);//保存
canvans.restore();
return newBitmap;
}
} //用例
public class test1 extends ImageTestCase{
//快速调试
public static void main(String [] args){
new UiAutomatorHelper("test","testDemo1.test1","testDemo3","2");
}
public void testDemo3(){
String path="/mnt/sdcard/testDrawText.png";
String imageName="testDrawText_888";
String text="测试输入";
//调用方法体
screenshotAndDrawRext(path, imageName, text);
}
}
四、图像对比
某些特殊组件无法获取到组件信息,无法判断状态
1.图像对比实例
//方法体
public class ImageTestCase extends UiAutomatorTestCase{
//图像对比的方法
public boolean imageSameAs(String targetImagePath,String comPath,double percent){
try {
//创建两个bitmap
Bitmap m1=BitmapFactory.decodeFile(targetImagePath);
Bitmap m2=BitmapFactory.decodeFile(comPath);
//声明变量
int width=m2.getWidth();
int height=m2.getHeight();
int numDiffPixels=0;
//横纵对比,涉及到两个循环
for(int y=0;y<height;y++){
for(int x=0;x<width;x++){
//取不相等的像素值
if(m2.getPixel(x, y)!=m1.getPixel(x, y)){
numDiffPixels++;
}
}
}
double totalPices=height*width;//总像素值
double diffPercent=numDiffPixels/totalPices;//不相等的百分比
return percent<=1.0-diffPercent;//返回相似度
} catch (Exception e) {
}
return false;
}
} //图片对比用例部分
public class test1 extends ImageTestCase{
//快速调试
public static void main(String [] args){
new UiAutomatorHelper("test","testDemo1.test1","testDemo4","2");
}
//图片对比
public void testDemo4(){
//截取两张对比图
String targetImagePath="/mnt/sdcard/c1.png";
String comPath="/mnt/sdcard/c2.png";
File f1=new File(targetImagePath);
File f2=new File(comPath);
UiDevice.getInstance().takeScreenshot(f1);
sleep(1000);
UiDevice.getInstance().pressHome();//换个场景
sleep(1000);
UiDevice.getInstance().takeScreenshot(f2);
//调用图像对比方法
boolean b=imageSameAs(targetImagePath,comPath,1.0d);
//输出对比结果
System.out.println("图像比对结果:"+b);
}
}
14.Android UiAutomator 图像处理的更多相关文章
- Android uiautomator gradle build system
This will guide you through the steps to write your first uiautomator test using gradle as it build ...
- Android UiAutomator 自动化测试编译运行---新手2
1.首先打开eclipse创建java项目
- Appium python自动化测试系列之Android UIAutomator终极定位(七)
android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...
- Android UiAutomator - CTS Frame
使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...
- Android UiAutomator 快速调试
背景:在Eclipse中不能直接运行Uiautomator工程,所以每次编写一份用例都要进行手动输入命令,很烦.调试起来不仅繁琐还浪费时间.网上找到一份快速调试的代码UiAutomatorHelper ...
- Android UiAutomator
UiAutomator是一个做UI测试的自动化框架.<Android自动化测试框架>中已有详细介绍,这里就不再累赘了. 一.首先了解自动化测试流程 自动化需求分析 测试用例设计 自动化框架 ...
- python+Android+uiautomator的环境
Python+Android+uiautomator的环境搭建 Python 下载适合系统的版本并安装,安装时勾选把路径加入path 验证:windows下打开cmd输入python 出现以下界面说明 ...
- Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)
简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...
- Android uiautomator实例使用
转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...
随机推荐
- RedHat yum源配置
RedHat yum源配置 原本以为Redhat7 和Centos7是完全一样的,可是安装完Redhat7以后,使用yum安装软件,提示红帽操作系统未注册.在网上搜索教程,最后成功解决,解决方式是将y ...
- python实现lower_bound和upper_bound
由于对于二分法一直都不是很熟悉,这里就用C++中的lower_bound和upper_bound练练手.这里用python实现 lower_bound和upper_bound本质上用的就是二分法,lo ...
- ArrayList中ensureCapacity的使用与优化
对于ArrayLis中有一个方法ensureCapacity(int n),这个方法可以对ArrayList低层的数组进行扩容,显示的调用这个函数,如果参数大于低层数组长度的1.5倍,那么这个数组的容 ...
- underscore.js源码解析(五)—— 完结篇
最近公司各种上线,所以回家略感疲惫就懒得写了,这次我准备把剩下的所有方法全部分析完,可能篇幅过长...那么废话不多说让我们进入正题. 没看过前几篇的可以猛戳这里: underscore.js源码解析( ...
- ADAS芯片解决方案汇总
ADAS(高级辅助驾驶系统),是指利用安装于车上各式各样的传感器,在第一时间收集车内的环境数据,进行静.动态物体的辨识.侦测与追踪等技术上的处理,从而能够让驾驶者在最快的时间察觉可能发生的危险. 在过 ...
- Coloring a Tree(耐心翻译+思维)
Description You are given a rooted tree with n vertices. The vertices are numbered from 1 to n, the ...
- jQuery的滚动监听
jQuery的滚动监听 1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offs ...
- 修改mac的hosts文件
第一步:请先打开 Mac 系统中的 Finder 应用,接下来请按快捷键组合 Shift+Command+G 三个组合按键,并输入 Hosts 文件的所在路径:/etc/hosts , 随后即可在 F ...
- RFID标签、读卡器、终端、接口的概念
RFID标签:(引用)RFID无线射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境.RFID技术可识别高速运动物体并可同时 ...
- windows下的coreseek安装及PHP调用入门
转载:http://zhan.renren.com/longmensoft?gid=3602888498043096197&checked=true 把我的运行环境简单说一下:windows ...