2017-06-21 42 views
4

我想使用量角器拍摄元素的快照,量角器支持element.takeScreeshot()。然而,当我使用它抛出一些会话错误(如下图)无法为量角器中的特定元素拍摄屏幕截图

element(by.model('model.username')).takeScreenshot().then(ab=>{ 

)} 

错误

**- 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** 
+0

检查浏览器版本的驱动程序,并在http://www.protractortest.org/#/api?view=webdriver.WebElement.prototype.takeScreenshot –

回答

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

1除了你的解决方案比较每个webdriver都采用不同的截图。因此,以这种方式确定位置不适用于Firefox <48或IE 11,因为它们会截取整个完整页面而不是视口。正如我的回答中所提到的,一个模块可以解决这个问题。它也解决了移动问题 – wswebcreation

1

正如所说的@苏雷什-salloju,这是一个新的功能,甚至在我的chromedriver 2.30和硒3.4.0是相同的答案。

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

相关问题