typescript - Kan inte ta skärmdump av ett specifikt element i protractor


Jag vill ta en ögonblicksbild av ett element med hjälp av Protractor och Protractor stödjer element.takeScreenshot(). Men när jag använder det kastar det Some session error (nedan)

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

)}

Fel

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

Svar #1

Du kan ta en skärmdump av hela sidan och sedan beskära bilden till det element du vill ha:

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

Detta kommer att generera en .png-bild av det valda elementet. Som nämnts nedan måste du se till att elementet är på skärmen innan detta; vilket kan uppnås på följande sätt:

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

Svar #2

Som sagt av @suresh-salloju, det är en ny funktion och även på min chromedriver 2.30 och selenium 3.4.0 ger det samma svar.

Om du vill kunna ta en skärmdump av ett element kan du kanske använda protractor-image-comparison. Metoderna saveElement eller checkElement kan hjälpa med testning. Var bara säker på att du scrollar elementet i vyporten.

Relaterade artiklar