上一篇写了通过webdriver在浏览器环境下异步调用js代码。

今天进入正题。

事实上有了executeAsyncScript,一切就呼之欲出了。

直接上代码:

var compareImage=function(){
return function(){
eval(arguments[0]);
var canvasBase64=arguments[1];
var expectBase64str=arguments[2];
var callback=arguments[ arguments.length - 1 ]; this.resemble(canvasBase64)
.compareTo(expectBase64str)
.onComplete(function (data) {
callback(data);
});
};
}

然后把resamble代码,要比較的两个图像的base64串,作为參数依次传进来

browser.executeAsyncScript(compareImage(),resemblejs,canvasBase64,expectBase64str)
.then(function(data){
console.log(data);
expect(data.isSameDimensions).toBe(true);//比較大小
expect(data. misMatchPercentage).toBe(0);//断言图像差异
});

断言大小和图像差异就能够了。我这个用的0,就是说图像全然一致。

尽管预计不用。还是说一下。resemblejs的代码怎么倒进来呢?

用fs读进来就能够了

var fs=require("fs");
var resemblejs=fs.readFileSync("jstest/e2e/00Common/resemble.js","utf-8");

以下的问题是。我用于比較的两个base64串怎么来呢?

先来说要測试的串,也非常easy,用代码到浏览器里去截。由于仅仅測canvas,所以用toDataUrl就能够了。

var getCanvasBase64 = function(){
return function(){
var canvasElement=document.getElementById('我叫canvas');
var str = canvasElement.toDataURL();
return str;
};
};

这次用executeScript来调,是同步的,所以要return

browser.executeScript(getCanvasBase64()).then(function(canvasBase64){
console.log(canvasBase64)
})

然后期望图则还是用fs读取

var base64Encode = function(file,type) {
var fs = require('fs');
var bitmap = fs.readFileSync(file);
var str=new Buffer(bitmap).toString('base64');
if(type!==undefined){
str="data:"+type+";base64,"+str;
}
else{
str="data:image/png;base64,"+str;
}
return str
};

好了,把上面全部的结合起来,就是我们的case了

h

it('測一下图像一不一样', function(){
var expectBase64str = <span style="font-family: Arial, Helvetica, sans-serif;">getBase64</span>('期望图路径.png',"image/png");
browser.executeScript(getCanvasBase64()).then(function(canvasBase64){
return browser.executeAsyncScript(compareImage(),reseblejs,canvasBase64,expectBase64str);
}).then(function(data){
console.log(data);
<span style="font-family: Arial, Helvetica, sans-serif;">expect(data.isSameDimensions).toBe(true);//比較大小</span><pre name="code" class="html"> expect(data. misMatchPercentage).toBe(0);//断言图像差异

});});


ok。大公告成。可喜可贺,可喜可贺

用protractor測试canvas绘制(二)的更多相关文章

  1. canvas绘制二次贝塞尔曲线----演示二次贝塞尔四个参数的作用

    canvas中绘制二次贝塞尔曲线的方法为ctx.quadraticCurveTo(x1,y1,x2,y2); 四个参数分别为两个控制点的坐标.开始点即当前canvas中目前的点,如果想从指定的点开始, ...

  2. 谈谈单元測试之(二):測试工具 JUnit 3

    前言 上一篇文章<为什么要进行烦人的单元測试?>讨论了一下现阶段软件开发中,程序猿们測试情况的现状.这篇文章中,我打算介绍一下单元測试的工具(插件).而且推荐大家以后在开发中,真正的用上单 ...

  3. James Whittaker的软件測试戒律(二)

    摘录自<探索式软件測试>(注:作者模仿了圣经十诫的语气和内容编写了软件測试戒律) 1.汝应用大量输入重复锤炼汝之应用程序 2.汝应贪图汝之邻居的应用程序 3.汝应亲自寻找睿智的预言家 4. ...

  4. amazeui+canvas绘制二维码

    <link rel="stylesheet" type="text/css" href="css/amazeui.min.css"/& ...

  5. HTML5 Canvas 绘制二十四字真言钟表

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  6. canvas 绘制二次贝塞尔曲线

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  7. ESP8266学习笔记1:怎样在安信可全功能測试板上实现ESP-01的编译下载和调试

    近期调试用到了安信可的ESP-01模块,最终打通了编译下载调试的整个通道,有一些细节须要记录,方便兴许的开发工作. 转载请注明:http://blog.csdn.net/sadshen/article ...

  8. OpenGL学习脚印:深度測试(depth testing)

    写在前面 上一节我们使用AssImp载入了3d模型,效果已经令人激动了.可是绘制效率和场景真实感还存在不足,接下来我们还是要保持耐心,继续学习一些高级主题,等学完后面的高级主题,我们再次来改进我们载入 ...

  9. Unityclient通信測试问题处理(二)

    Unityclient通信測试问题处理(二) 在client的通信測试过程中.场景载入的问题给自己带来了不小的麻烦.由于消息的解析方法在单独的监听线程中调用,这也就意味着无法在消息的解析方法中调用Un ...

随机推荐

  1. 为什么选择Android Studio 而是 Eclipse

    Android Studio 现在的版本已经比较稳定了,刚出来时也是各种BUG,自己用了下,摸索了一天,感觉挺好的. 优点之一:代码提示和搜索功能非常强大,非常智能. 1).自定义theme有个名字叫 ...

  2. C++ 由虚基类 虚继承 虚函数 到 虚函数表

    //虚基类:一个类可以在一个类族中既被用作虚基类,也被用作非虚基类. class Base1{ public: Base1(){cout<<"Construct Base1!&q ...

  3. Android studio 中R.menu的创建

    对于Android开发中的menu没有声明的情况: 首先,将鼠标定位到红色的menu上面, 然后,Alt+enter组合键,建立文件menu, 然后将以下代码复制进去: <item androi ...

  4. Android Studio查看CPU使用率。

    进入AS自带的CMD,依次输入: (1)进入Android Atudio安卓的目录: 1.H: 2.cd AndroidStudio\sdk\platform-tools (2)adb shell ( ...

  5. 移动web——轮播图

    1.我们将5张图片又前后各增加一张,第一张前增加的是原本的第五张,第五张后增加的是原本的第一张,增加的原因无非是手指滑动的时候有轮播效果,这不像以前的轮播图,点击图标就能立刻将ul跳转到指定位置,手机 ...

  6. java攻城狮之路--复习JDBC(PrepareStatement)

    PreparedStatement: 1.可以通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象 2.PreparedS ...

  7. GitHub代码托管平台搭建

    GitHub代码托管平台搭建 注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/. 之后就可以创建仓库了(免费 ...

  8. Python 之pytesseract模块读取知乎验证码案例

    import pytesseract from PIL import Image import requests import time # 获取只会验证码图片并保存为本地 def get_data_ ...

  9. CDR如何使用钢笔工具进行完美抠图?【6·18特惠倒计时!】

    不要以为抠图只能在图像处理软件中实现,矢量图形绘制软件CorelDRAW一样可以,而且方法很多,文章介绍使用CDR钢笔工具抠图的方法. 提示说明: 首先说明一下,CDR中的钢笔工具和其他平面设计软件中 ...

  10. LeetCode--不同路径

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”).现在考虑网格中 ...