Selenium Webdriver 仅截取视口的屏幕截图

Selenium Webdriver take screenshot of viewport only

我只需要当前视口的屏幕截图,尤其是关于滚动位置的屏幕截图。基本上是当前 Chrome 驱动程序所做的。

从我读到的内容来看,这似乎是完全可能的,但出于某种原因,屏幕截图命令总是力求截取完整的文档屏幕截图。事实上,IE 驱动程序拍摄了多个视口照片,然后将它们拼接在一起。

我正在使用 Ruby 网络驱动程序,但无论如何我都看不到只截取视口的屏幕截图。可能吗?

在处理 WebDriver 时,"screenshot" 有两个相互矛盾的定义。第一个是开源项目使用的定义,其中屏幕截图被定义为加载页面的整个 DOM 的图像。在这种情况下,自 2010 年以来,IE 驱动程序和 Firefox 驱动程序都按照项目的定义执行正确的操作。WebDriver 的 Chrome 实现在返回仅可见视口的图像时不正确。

另一方面,W3C WebDriver specification 将屏幕截图定义为仅当前视口的屏幕截图。这与当前开源项目的驱动程序实现(IE 和 Firefox)不一致,预计将来会发生变化。一旦规范达到 "Candidate Recommendation" 状态,这些驱动程序可能会更新。

顺便说一句,需要注意的是IE驱动绝不会使用"scroll-and-stitch"方法来创建它的截图。它 将浏览器 window 调整得足够大以显示整个 DOM,根据请求屏幕截图时的计算结果,并为其拍照。但是,请注意,IE 10 和 11 在生成这些完整的 DOM 屏幕截图时存在问题,具体取决于 bit-ness of your operating system 和您使用的 IEDriverServer 可执行文件。

目前,您需要使用 WebDriver 外部的工具来获取 IE 和 Firefox 的仅视口屏幕截图。

这是一个经常变化的问题..

AFAIK 现在 Chrome- 和 IEDriver 都只捕获视口的屏幕截图,而 FFDriver 捕获 full-page 屏幕截图(FF 将来会改变这一点)。另见