如何在安全性报告中(而不只是视口中)包括整页的屏幕截图?

马里斯

这个问题是我问另一个问题的一部分但是,我已经找到了这部分的答案,并认为这对于其他人也将是有用的。我的另一个问题的一部分:

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

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

马里斯

tl; dr:使用FirefoxDriver

我联系了W3C的David Burns。他非常乐于助人,他的回答为我澄清了很多。

首先,FirefoxDriver现在仍会拍摄整个页面的屏幕截图。大卫说:

另一方面,FirefoxDriver(以及在Marionette中,我们的W3C webdriver实现)通过将文档转储到画布中并在Canvas上调用Firefox特定的API来获取屏幕截图来进行屏幕截图。由于我们转储了整个文档,因此我们可以进行全屏截图。但是,当我们开始将更多Servo代码添加到Firefox中以及访问屏幕截图的方式发生变化时,这种情况可能会发生变化。

因此,不幸的是,这将来可能会改变,但是就目前而言,这是很好的(当您使用FFdriver时)。

他还解释了为什么做出此选择,并引用了他所进行的有关网页呈现工作原理的演讲。后来在我们的谈话中,他还引用到分钟的讨论关于截图应该如何被捕获。

他的完整答案是:

你好

tl;博士; 全屏快照非常困难,因为并非所有浏览器都具有创建整个页面的屏幕截图的信息。长版:

在今年的Selenium Conf上,我谈到了#isDisplayed有时可能对您说谎的原因,原因与屏幕截图相同。为了使浏览器看起来像使网页尽可能快地加载,它们通过在CPU或GPU上进行计算来锻炼需要在视口中呈现的内容,然后呈现该内容。由于这种方法,这意味着浏览器会建立某些区域的显示列表,并创建要显示的“平铺”。它从视口开始,然后开始工作。现在,浏览器不会一次渲染整个页面,它会在上下滚动几次,并在滚动时计算余下的时间。

现在,ChromeDriver和Microsoft的EdgeDriver都从显示列表中进行屏幕截图,并具有仅向其提供视口的内部API。这是因为他们的参考测试(或供应商所知的reftest)仅在乎这一点。由于边缘情况,他们俩都不觉得为剩下的事情付出努力是不值得的。

另一方面,FirefoxDriver(以及在Marionette中,我们的W3C webdriver实现)通过将文档转储到画布中并在Canvas上调用Firefox特定的API来获取屏幕截图来进行屏幕截图。由于我们转储了整个文档,因此我们可以进行全屏截图。但是,当我们开始将更多Servo代码添加到Firefox中以及访问屏幕截图的方式发生变化时,这种情况可能会发生变化。

因为我们只知道视口信息,所以这导致我们不得不将图像缝合在一起以获得完整的页面截图。ChromeDriver和IEDriver都这样做,并且两个开发团队都认为这是一个丑陋的破解,因为它并不总是正确的,而且他们也无能为力。

我希望这会有所帮助,并能很好地解释。在解释渲染和布局引擎如何在浏览器中工作时,建议您观看我的演讲

大卫

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Hashmap中删除重复的键值对?-不只是重复的键或值

来自分类Dev

如何在Hashmap中删除重复的键值对?-不只是重复的键或值

来自分类Dev

如何回声不只是在cronjob中回声?

来自分类Dev

对Symfony安全注释的响应不只是错误页面

来自分类Dev

多态性不只是继承的副作用吗?

来自分类Dev

Nautilus-如何在文件名上应用Zoom?不只是缩略图

来自分类Dev

Nautilus-如何在文件名上应用Zoom?不只是缩略图

来自分类Dev

在Kotlin的Injekt库中,如何注入函数而不只是值?

来自分类Dev

具有模型列表而不只是Java中的模型时如何获取类

来自分类Dev

不只是更多吗?

来自分类Dev

如何使CMake打印* all *命令而不只是构建命令?

来自分类Dev

如何在Quarkus中禁用安全性

来自分类Dev

如何在Spring中覆盖安全性访问?

来自分类Dev

异步函数返回异步元数据(包括结果),而不只是结果

来自分类Dev

YouTube数据API-如何将所有视频(而不只是50个)放到播放列表中?

来自分类Dev

那么Android兼容性库不只是为了兼容性吗?

来自分类Dev

获取属性值,而不只是ID

来自分类Dev

不只是简单的嵌套形式

来自分类Dev

如何在Xcode中设置屏幕截图?

来自分类Dev

如何在Flutter中拍摄屏幕截图?

来自分类Dev

如何在python中截取屏幕截图?

来自分类Dev

如何在Xcode中设置屏幕截图?

来自分类Dev

如何使strace打印字符串参数的地址而不只是它们的值?

来自分类Dev

如何检查Android GPS是否仍在扫描或位置固定?不只是检查是否启用

来自分类Dev

Google Apps脚本HTML-如何从整个文档(而不只是按钮)触发键盘事件?

来自分类Dev

VIM-如何使用Django HTML语法而不只是HTML语法打开.html文件?

来自分类Dev

如何将整个用户(不只是进程)限制为少于cpu的10%?

来自分类Dev

如何使用Expect脚本而不只是登录进行更多操作

来自分类Dev

如何更改列排序以对整个工作表(而不只是一列)进行排序?

Related 相关文章

  1. 1

    如何在Hashmap中删除重复的键值对?-不只是重复的键或值

  2. 2

    如何在Hashmap中删除重复的键值对?-不只是重复的键或值

  3. 3

    如何回声不只是在cronjob中回声?

  4. 4

    对Symfony安全注释的响应不只是错误页面

  5. 5

    多态性不只是继承的副作用吗?

  6. 6

    Nautilus-如何在文件名上应用Zoom?不只是缩略图

  7. 7

    Nautilus-如何在文件名上应用Zoom?不只是缩略图

  8. 8

    在Kotlin的Injekt库中,如何注入函数而不只是值?

  9. 9

    具有模型列表而不只是Java中的模型时如何获取类

  10. 10

    不只是更多吗?

  11. 11

    如何使CMake打印* all *命令而不只是构建命令?

  12. 12

    如何在Quarkus中禁用安全性

  13. 13

    如何在Spring中覆盖安全性访问?

  14. 14

    异步函数返回异步元数据(包括结果),而不只是结果

  15. 15

    YouTube数据API-如何将所有视频(而不只是50个)放到播放列表中?

  16. 16

    那么Android兼容性库不只是为了兼容性吗?

  17. 17

    获取属性值,而不只是ID

  18. 18

    不只是简单的嵌套形式

  19. 19

    如何在Xcode中设置屏幕截图?

  20. 20

    如何在Flutter中拍摄屏幕截图?

  21. 21

    如何在python中截取屏幕截图?

  22. 22

    如何在Xcode中设置屏幕截图?

  23. 23

    如何使strace打印字符串参数的地址而不只是它们的值?

  24. 24

    如何检查Android GPS是否仍在扫描或位置固定?不只是检查是否启用

  25. 25

    Google Apps脚本HTML-如何从整个文档(而不只是按钮)触发键盘事件?

  26. 26

    VIM-如何使用Django HTML语法而不只是HTML语法打开.html文件?

  27. 27

    如何将整个用户(不只是进程)限制为少于cpu的10%?

  28. 28

    如何使用Expect脚本而不只是登录进行更多操作

  29. 29

    如何更改列排序以对整个工作表(而不只是一列)进行排序?

热门标签

归档