我正在尝试进行图像比较,当我使用Webdriver捕获图像时,由于以下原因,它们的大小与预期不同:
" WebDriver提供Take Screenshot命令来捕获顶级浏览上下文的初始视口" "根据截屏的当前定义(由开源项目定义),屏幕截图应该是完整的DOM,与窗口大小无关。"
https://github.com/seleniumhq/selenium/issues/1067
我正在使用:
js = 'return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);'
通过将图像拼接在一起来获得总页面高度,但由于上述原因,这不起作用。
我如何使用"完整的DOM"将整页图像拼接在一起,就此而言,绘制不符合窗口大小的元素矩形?
答案 0 :(得分:1)
目前WebDriver W3C Candidate Recommendation 30 November 2017
明确提到以下内容:
<强>
The Take Screenshot command takes a screenshot of the top-level browsing context’s viewport.
强>
因此,通过任何兼容的浏览器和实施方法获得 Full DOM
的屏幕截图是不值得的。
我不确定它提到的任何开源规范:
Under the current definitions for taking screenshots (as defined by the open source project), screenshots should be of the full DOM, irrespective of window size.
通过 Protractor
上下文来看https://github.com/seleniumhq/selenium/issues/1067这个问题恰恰相反:
Resulting image in the case of a width x height = 367 x 667 , was turned into 800x1190
虽然@JimEvans的回答是:
根据截屏的当前定义(由开源项目定义),屏幕截图应该是完整的DOM,无论窗口大小如何。但是,有两点需要注意。首先,Chrome有一个突出的问题,它只创建可见视图端口的屏幕截图。其次,W3C WebDriver规范仅将屏幕截图定义为当前视图端口。目前尚未发布的驱动程序实现符合规范。
因此,我们可以得出结论,除非 WebDriver
变体实施完整DOM的屏幕截图,否则通过当前无法实现实施方法。