Selenium 如何在我的serenity报告中包括整个页面的屏幕截图(而不仅仅是视口)?

Selenium 如何在我的serenity报告中包括整个页面的屏幕截图(而不仅仅是视口)?,selenium,webdriver,screenshot,fullscreen,Selenium,Webdriver,Screenshot,Fullscreen,这个问题是问题的一部分。然而,我已经找到了这一部分的答案,并且认为它对其他人也会有用。 我的另一个问题的一部分: 我正在将serenity与cucumber结合使用进行自动屏幕测试,并希望在我的serenity报告中包含完整页面的屏幕截图。报告中的屏幕截图通常只是视口的捕获。但是,这通常不能提供足够的信息,因为这只是屏幕的一部分 我发现捕获serenity屏幕截图是驱动程序实现的一部分。由于大多数驱动程序符合W3C的屏幕截图定义,因此这些驱动程序只捕获当前视口 tl;使用FirefoxDrive

这个问题是问题的一部分。然而,我已经找到了这一部分的答案,并且认为它对其他人也会有用。 我的另一个问题的一部分:

我正在将serenity与cucumber结合使用进行自动屏幕测试,并希望在我的serenity报告中包含完整页面的屏幕截图。报告中的屏幕截图通常只是视口的捕获。但是,这通常不能提供足够的信息,因为这只是屏幕的一部分

我发现捕获serenity屏幕截图是驱动程序实现的一部分。由于大多数驱动程序符合W3C的屏幕截图定义,因此这些驱动程序只捕获当前视口


tl;使用FirefoxDriver

我联系了W3C的David Burns。他很有帮助,他的回答使我明白了很多

首先,FirefoxDriver目前仍在拍摄整个页面的截图。大卫说:

另一方面,FirefoxDriver和我们的W3C webdriver实现通过将文档转储到画布中并在画布上调用特定于Firefox的API来获得屏幕截图。因为我们转储了整个文档,所以我们可以进行全页截图。然而,当我们开始将更多的伺服代码放入Firefox中,并且我们访问屏幕截图的方式发生变化时,这种情况可能会改变

所以不幸的是,这在将来可能会改变,但现在使用FFdriver是件好事

他还解释了为什么会做出这样的选择,并提到了一次关于网页呈现工作原理的演讲。 稍后在我们的谈话中,他还提到了关于如何捕获屏幕截图的讨论

他的完整回答是:

tl;博士全屏截图真的很难,因为不是所有的浏览器都有信息来创建整个页面的截图。 长版本:

在今年的Selenium Conf上,我做了一个关于isDisplayed有时会对你撒谎的演讲,原因与截图相同。为了使浏览器看起来能使网页尽可能快地加载,他们在查看端口中计算出需要渲染的内容,然后通过在CPU或GPU上进行计算来渲染。 由于这种方法,这意味着浏览器建立特定区域的显示列表,并创建要渲染的平铺。它从视口开始计算。现在,浏览器不会一次呈现整个页面,它会在滚动时准备好上面和下面的几次,并在滚动时计算其余部分

现在ChromeDriver和微软的EdgeDriver都从显示列表中截图,并且都有只提供视口的内部API。这是因为供应商所知的参考测试或参考测试只关心这一点。由于边缘案例,他们都觉得做剩下的事情不值得

另一方面,FirefoxDriver和我们的W3C webdriver实现通过将文档转储到画布中并在画布上调用特定于Firefox的API来获得屏幕截图。因为我们转储了整个文档,所以我们可以进行全页截图。然而,当我们开始将更多的伺服代码放入Firefox中,并且我们访问屏幕截图的方式发生变化时,这种情况可能会改变

因为我们只知道视口信息,所以我们必须将图像拼接在一起才能得到一张完整的屏幕截图。无论是ChrimError还是IeDever都这样做,两个开发团队都认为这是一个丑陋的黑客,因为它不总是正确的,而且他们做不到什么使它正确。

我希望这有助于并很好地解释这一点。我建议在我解释渲染和布局引擎如何在浏览器中工作时,看看我的

大卫


tl;使用FirefoxDriver

我联系了W3C的David Burns。他很有帮助,他的回答使我明白了很多

首先,FirefoxDriver目前仍在拍摄整个页面的截图。大卫说:

另一方面,FirefoxDriver和我们的W3C webdriver实现通过将文档转储到画布中并在画布上调用特定于Firefox的API来获得屏幕截图。因为我们转储了整个文档,所以我们可以进行全页截图。然而,当我们开始将更多的伺服代码放入Firefox中,并且我们访问屏幕截图的方式发生变化时,这种情况可能会改变

所以不幸的是,这在将来可能会改变,但现在使用FFdriver是件好事

他还解释了为什么会做出这样的选择,并提到了一次关于网页呈现工作原理的演讲。 稍后在我们的谈话中,他还提到了关于如何捕获屏幕截图的讨论

他的完整回答是:

tl;博士全屏截图真的很难,因为不是所有的浏览器都有信息来创建整个页面的截图。 长版本 :

在今年的Selenium Conf上,我做了一个关于isDisplayed有时会对你撒谎的演讲,原因与截图相同。为了使浏览器看起来能使网页尽可能快地加载,他们在查看端口中计算出需要渲染的内容,然后通过在CPU或GPU上进行计算来渲染。 由于这种方法,这意味着浏览器建立特定区域的显示列表,并创建要渲染的平铺。它从视口开始计算。现在,浏览器不会一次呈现整个页面,它会在滚动时准备好上面和下面的几次,并在滚动时计算其余部分

现在ChromeDriver和微软的EdgeDriver都从显示列表中截图,并且都有只提供视口的内部API。这是因为供应商所知的参考测试或参考测试只关心这一点。由于边缘案例,他们都觉得做剩下的事情不值得

另一方面,FirefoxDriver和我们的W3C webdriver实现通过将文档转储到画布中并在画布上调用特定于Firefox的API来获得屏幕截图。因为我们转储了整个文档,所以我们可以进行全页截图。然而,当我们开始将更多的伺服代码放入Firefox中,并且我们访问屏幕截图的方式发生变化时,这种情况可能会改变

因为我们只知道视口信息,所以我们必须将图像拼接在一起才能得到一张完整的屏幕截图。无论是ChrimError还是IeDever都这样做,两个开发团队都认为这是一个丑陋的黑客,因为它不总是正确的,而且他们做不到什么使它正确。

我希望这有助于并很好地解释这一点。我建议在我解释渲染和布局引擎如何在浏览器中工作时,看看我的

大卫