移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
来源:互联网 发布:php h5上传图片插件 编辑:程序博客网 时间:2024/05/09 10:12
根据前一篇文章《移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇》所述,因为Appium和MonkeyRunner有一个共同点--代码控制流程都是在客户端实现的。所以要把MonkeyRunner在PC端实现的图片比对和获取子图功能移植到同样是在PC端运行的Appium是很容易的事情,但是对于在服务器端运行的Robotium和UiAutomator就是另外一回事了。
因为在Android的sdk中,MonkeyRunner获取子图和图片比对需要用到的以下两个类是没有支持的,简单来说就是java.awt这个库是不支持的:
import java.awt.image.BufferedImage;import javax.imageio.ImageIO;但是在Android的sdk中有Bitmap这个类来帮助我们完成类似的功能,同时这个类还提供了一个sameAs的方法来比对两个Bitmap是否一致,但是遗憾的是它没有像MonkeyRunner一样提供一个百分比来指明两个图片的差异接受程度,所以为了兼容多种情况,我们需要对sameAs方法提供多个重载方法。
当然,这只是验证代码,有bug的话自己调吧。
1. 移植代码
注意一下代码只在UiAutomator上面测试通过,但是我相信Robotium是一样的,因为他们都是运行在目标安卓机器上面的,大家可以自行验证下。
package libs;import java.io.FileInputStream;import java.io.FileNotFoundException;import android.graphics.Bitmap;import android.graphics.BitmapFactory;public class Util {public static boolean sameAs (String path1, String path2) throws FileNotFoundException {boolean res = false;FileInputStream fis1 = new FileInputStream(path1);Bitmap bitmap1 = BitmapFactory.decodeStream(fis1);FileInputStream fis2 = new FileInputStream(path2);Bitmap bitmap2 = BitmapFactory.decodeStream(fis2);res = sameAs(bitmap1,bitmap2);return res;}public static boolean sameAs (String path1, String path2,double percent) throws FileNotFoundException {FileInputStream fis1 = new FileInputStream(path1);Bitmap bitmap1 = BitmapFactory.decodeStream(fis1);FileInputStream fis2 = new FileInputStream(path2);Bitmap bitmap2 = BitmapFactory.decodeStream(fis2);return sameAs(bitmap1,bitmap2,percent);}public static boolean sameAs (Bitmap bitmap1, Bitmap bitmap2, double percent) {if(bitmap1.getHeight() != bitmap2.getHeight())return false;if(bitmap1.getWidth() != bitmap2.getWidth())return false;if(bitmap1.getConfig() != bitmap2.getConfig())return false;int width = bitmap1.getWidth();int height = bitmap2.getHeight();int numDiffPixels = 0; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bitmap1.getPixel(x, y) != bitmap2.getPixel(x, y)) { numDiffPixels++; } } } double numberPixels = height * width; double diffPercent = numDiffPixels / numberPixels; return percent <= 1.0D - diffPercent;}public static boolean sameAs (Bitmap bmp1, Bitmap bmp2) throws FileNotFoundException {boolean res = false;res = bmp1.sameAs(bmp2);return res;}public static Bitmap getSubImage(String path,int x,int y,int width,int height) throws FileNotFoundException {FileInputStream fis = new FileInputStream(path);Bitmap bitmap = BitmapFactory.decodeStream(fis);Bitmap res = Bitmap.createBitmap(bitmap, x, y, width, height);return res;}}
2. 调用代码示例
以下是UiAutomator示例,Robotium的示例请大家自行实现.
package sample.demo;import java.io.File;import java.io.IOException;import libs.Util;import android.graphics.Bitmap;import com.android.uiautomator.core.UiDevice;import com.android.uiautomator.core.UiObject;import com.android.uiautomator.core.UiObjectNotFoundException;import com.android.uiautomator.core.UiSelector;import com.android.uiautomator.testrunner.UiAutomatorTestCase;public class CompareScreenshots extends UiAutomatorTestCase {public void testCompareScreenshotsNSubScrenshots() throws UiObjectNotFoundException, IOException, InterruptedException {UiDevice device = getUiDevice();//device.pressHome();UiObject appNotes = new UiObject(new UiSelector().text("Notes"));appNotes.click();Thread.sleep(3000);String p1 = "/data/local/tmp/1.bmp";String p2 = "/data/local/tmp/2.bmp";File f1 = new File(p1);if(f1.exists())f1.delete();File f2 = new File(p2);if(f2.exists())f2.delete();device.takeScreenshot(f1);device.takeScreenshot(f2);Bitmap sub1 = Util.getSubImage(p1, 6, 39, 474, 38);Bitmap sub2 = Util.getSubImage(p2, 6, 39, 474, 38);boolean same = Util.sameAs(sub1, sub2, 1.0);assertTrue(same);same = Util.sameAs(p1, p2, 0.9);assertTrue(same); }}
作者
自主博客
微信
CSDN
天地会珠海分舵
http://techgogogo.com
服务号:TechGoGoGo
扫描码:
http://blog.csdn.net/zhubaitian
1 0
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
- 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
- monkeyrunner内置uiautomator出错的原因
- Android Monkeyrunner的录制和回放功能
- android自动测试方法分析(monkeyrunner,robotium,uiautomator)
- Android Testing Fundamentals 2, robotium, uiautomator, monkeyrunner and monkey
- android自动测试方法分析(monkeyrunner,robotium,uiautomator)
- Monkeyrunner图片对比
- MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)
- MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)
- 使用Robotium & UIAutomator构建基于twitter的测试
- MonkeyRunner 之如何获取APP的PackageName和Activity Name
- java 下载图片 类似于重定向的意义
- ehcache memcache redis三大缓存男高音
- 获取图片的宽高
- php Yii框架建立子域名访问路径
- 3D重构基础五--Essential and Fundamental matrices
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- 腾讯出此策,阿里就怕了
- 就是喜欢听西北风情的歌
- 堆栈 Stack类
- PostgreSQL查询连接信息
- Oracle执行计划详解
- 最近工作的小总结吧
- js限制输入文字长度
- iOS: 对图片进行不规则剪裁