Index: test/wrappers/pages.js |
=================================================================== |
--- a/test/wrappers/pages.js |
+++ b/test/wrappers/pages.js |
@@ -23,6 +23,8 @@ |
const Jimp = require("jimp"); |
const {By, until} = require("selenium-webdriver"); |
+let lastScreenshot = Promise.resolve(); |
+ |
// Once we require Node.js >= 10 this should be replaced with |
// the built-in finally() method of the Promise object. |
function promiseFinally(p, callback) |
@@ -63,23 +65,22 @@ |
// of the viewport and crop it to the size and position of our element. |
// This is not guaranteed to work on other browsers (mostly because |
// the behavior of Driver.takeScreenshot() may vary across browsers). |
- () => element.getLocation().then(loc => |
- element.getDriver().executeScript(` |
- window.scrollTo(${loc.x}, ${loc.y}); |
- return [window.scrollX, window.scrollY]; |
- `).then(result => |
- { |
- let x = loc.x - result[0]; |
- let y = loc.y - result[1]; |
+ () => |
+ lastScreenshot = Promise.all([element.getRect(), |
+ lastScreenshot]).then(([rect]) => |
+ element.getDriver().executeScript(` |
+ window.scrollTo(${rect.x}, ${rect.y}); |
+ return [window.scrollX, window.scrollY]; |
+ `).then(result => |
+ { |
+ let x = rect.x - result[0]; |
+ let y = rect.y - result[1]; |
- return Promise.all([ |
- element.getDriver().takeScreenshot().then(imageFromBase64), |
- element.getSize() |
- ]).then(([img, size]) => |
- img.crop(x, y, size.width, size.height) |
- ); |
- }) |
- ) |
+ return element.getDriver().takeScreenshot() |
+ .then(imageFromBase64) |
+ .then(img => img.crop(x, y, rect.width, rect.height)); |
+ }) |
+ ) |
).then(img => img.bitmap); |
} |