Typescript 无法拍摄量角器中特定元素的屏幕截图

Typescript 无法拍摄量角器中特定元素的屏幕截图,typescript,protractor,Typescript,Protractor,我想使用量角器拍摄元素的快照,量角器支持该元素。takeScreeshot()。但是,当我使用它时,会抛出一些会话错误(如下) 错误 **- Failed: GET /session/5d58e1ca-f55d-4b51-aee8-1d518498cb35/element/0/screenshot Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' System info: host: 'INBEN1017

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

错误

**- Failed: GET /session/5d58e1ca-f55d-4b51-aee8-1d518498cb35/element/0/screenshot
  Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
  System info: host: 'INBEN10174', ip: '157.237.220.180', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_121'
  Driver info: driver.version: unknown**

正如@suresh salloju所说,这是一项新功能,甚至在我的chromedriver 2.30和selenium 3.4.0上也给出了相同的答案


如果你想拍摄一个元素的截图,你可以使用。方法
saveElement
checkElement
有助于测试。只能确保在视口中滚动元素。

您可以截屏整个页面,然后将图像裁剪为所需的元素:

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();

检查浏览器驱动程序版本并进行比较。解决方案的一个补充是,每个Web驱动程序都有不同的屏幕截图。因此,以这种方式确定位置在例如Firefox<48或IE 11上不起作用,因为它们拍摄的是完整页面的屏幕截图,而不是视口。正如我在回答中提到的,一个模块可以解决这个问题。它还解决了移动通信的问题
var elem = element(by.model('model.username'));
browser.actions().mouseMove(elem).perform();