无法在量角器中截取特定元素的屏幕截图

时间:2017-06-21 09:32:38

标签: typescript protractor

我想使用量角器拍摄元素的快照,量角器支持element.takeScreeshot()。但是,当我使用它时会抛出一些会话错误(下面)

walk into your room
What is the length of the left hand wall? 78
What is the length of front wall? 23
1794 cm² is the area of your room

错误

walk into your room
What is the length of the left hand wall? 78
What is the length of front wall? 23
1794cm² is the area of your room

2 个答案:

答案 0 :(得分:2)

您可以截取整个页面,然后将图像裁剪为您想要的元素:

const fs = require('fs');
const PNG = require('pngjs').PNG;

var elem = element(by.model('model.username'));

promise.all([
    elem.getLocation(),
    elem.getSize(),
    browser.takeScreenshot()
]).then(function(result) {
    var src = PNG.sync.read(Buffer.from(result[2], 'base64'));
    var dst = new PNG({width: result[1].width, height: result[1].height});
    PNG.bitblt(src, dst, result[0].x, result[0].y, dst.width, dst.height, 0, 0);
    fs.writeFileSync('out.png', PNG.sync.write(dst));
});

这将输出所选元素的.png图像。 如下所述,您需要确保元素在此之前在屏幕上;这是可以实现的:

var elem = element(by.model('model.username'));
browser.actions().mouseMove(elem).perform();

答案 1 :(得分:1)

正如@ suresh-salloju所说,它是一个新功能,即使在我的chromedriver 2.30和selenium 3.4.0上也会得到同样的答案。

如果您希望能够截取元素的屏幕截图,可以使用protractor-image-comparison。方法saveElementcheckElement可以帮助您进行测试。只需确保在视口中滚动元素。