【发布时间】:2015-02-07 07:35:33
【问题描述】:
我有一个 Web 服务,它在调用 /image.gif 时生成动态图像。 如何让量角器测试下载文件并对结果进行 MD5sum?
我查看了Protractor e2e test case for downloading pdf file,但它依赖于浏览器具有可供点击的下载链接。
没有托管此图片的页面。
【问题讨论】:
标签: selenium-webdriver jasmine protractor
我有一个 Web 服务,它在调用 /image.gif 时生成动态图像。 如何让量角器测试下载文件并对结果进行 MD5sum?
我查看了Protractor e2e test case for downloading pdf file,但它依赖于浏览器具有可供点击的下载链接。
没有托管此图片的页面。
【问题讨论】:
标签: selenium-webdriver jasmine protractor
我无法在我的 Windows 设置上下载图像,使用 Leo 的回答没有错误,但我发现以下内容允许我获取我可以“预期”的 base64 数据 uri。
Convert an image into binary data in javascript
it('Image is version1)', function() {
browser.ignoreSynchronization = true
browser.get(targetUrl);
return browser.executeScript(function() {
var img = document.querySelector('img');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}).then(function (data) {
expect(data).toEqual(base64VersionOfVersion1);
});
});
【讨论】:
你应该关注我的Chrome configuration on that pdf-question link。
然后,browser.get('/image.gif'); 应该触发下载,而不是单击某些内容。
关注Stephen Baillie solution 或类似内容,等待下载完成。
最后,对于 MD5 部分的 NodeJS 方面,您可以使用 execSync 或其他更花哨的东西,但 execSync 可以:
var execSync = require('exec-sync');
var md5sum = execSync('md5sum ' + pathToDownloadedFile).split(' ')[0]
// e.g. md5sum //=> "c9b833c49ffc9d48a19d0bd858667188"
【讨论】: