如何获得顶级浏览上下文的初始视口的大小?

时间:2017-12-13 18:52:38

标签: javascript image selenium-webdriver

我正在尝试进行图像比较,当我使用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"将整页图像拼接在一起,就此而言,绘制不符合窗口大小的元素矩形?

1 个答案:

答案 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的屏幕截图,否则通过当前无法实现实施方法。