使用InternetJS进行全页屏幕截图



当谈到UI自动化时,我对JavaScript编程还很陌生,并且来自基于Java的Selenium背景。我目前正试图了解InternetJS,以及如何使用它在任何设备上拍摄我想要的任何URL的整页屏幕截图。最终目标是在多台设备上拍摄特定网站的屏幕截图,用于手动视觉验证,并使用Sauce Labs帐户。

我能够将takeScreenshot()功能分离为一种可重复使用的方法,如下所示:

MyFile.prototype.takeScreenshotAndWriteToFile = function (fileName) {
return function () {
return this.parent
.takeScreenshot()
.then(function (fileAsBuffer) {
fileSystem.writeFile(fileName, fileAsBuffer, 'base64');
})
.catch(function (error) {
console.log(error);
});
};
};

然而,当我通过我们的Sauce Labs帐户在各种设备/浏览器上运行此程序时,我会得到以下结果:

  • Chrome和Firefox桌面(Windows 10上的最新版本)只会在我提出请求时在浏览器窗口中立即显示内容的屏幕截图
  • 上述结果同样适用于移动设备和平板电脑的测试
  • 奇怪的是,Safari版本11(在Mac上)确实拍摄了一张完整的页面截图。同样的方法。同样的实施。不同的结果

我完全不明白为什么像想要拍一整页截图这样简单的事情却被证明是一个如此复杂的问题。。。有人能告诉我正确的方向吗?我能做些什么来实现我的目标?

或者,如果有人知道在这种情况下有更好的替代InternetJS的方法吗?现阶段我愿意接受任何想法/建议。

正如Florent所指出的,屏幕截图实际上是由与浏览器接口的驱动程序(例如chromedriver)处理的,而不是由与驱动程序接口的Intern处理的。根据WebDriver规范,屏幕截图将只显示视口,而不是整个页面。JSON有线协议(WebDriver的前身)在这个主题上有点模糊。在任何情况下,不同的浏览器驱动程序在许多情况下都会有不同的行为。

任何使用WebDriver/SeSelenium管理浏览器的测试系统(大多数浏览器,尤其是流行的开源浏览器)都将受制于驱动程序的功能,可能无法开箱即用地支持此功能。然而,它可能会在测试系统中实现(比WebDriver级别更高),因此,如果值得的话,向Intern(或您可能使用的任何基于WebDriver的测试系统)提交功能请求是值得的。

最新更新