标签:
1)效果类截图
2)不可见的组件图像对比
3)失败与异常截图
4)利用图像判断组件
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"); } }
像素值:每一个像素点的颜色值
//方法体代码 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); } }
截图的时候希望把用例场景用文字写在图像上,便于快速查看
//方法体 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); } }
某些特殊组件无法获取到组件信息,无法判断状态
//方法体 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); } }
标签:
原文地址:http://www.cnblogs.com/JianXu/p/5225365.html