WebDriver中实现对特定的Web区域截图方法
用过 WebDriver 的同学都知道,WebDriver 可以对浏览器中的页面进行截图。例如:
public byte[] takeScreenshot() throws IOException {
TakesScreenshot takesScreenshot = (TakesScreenshot) driver;
return takesScreenshot.getScreenshotAs(OutputType.BYTES);
}
这样产生的图片是整个网页。但有时候我们并不需要整个网页,只需要某些特定的 WebElement,以避免一些干扰。
虽然 WebDriver 本身没有提供这样的 API,不过我们可以自己来,就是在全屏的截图中再进行裁剪,如下:
public BufferedImage createElementImage(WebElement webElement)
throws IOException {
// 获得webElement的位置和大小。
Point location = webElement.getLocation();
Dimension size = webElement.getSize();
// 创建全屏截图。
BufferedImage originalImage =
ImageIO.read(new ByteArrayInputStream(takeScreenshot()));
// 截取webElement所在位置的子图。
BufferedImage croppedImage = originalImage.getSubimage(
location.getX(),
localtion.getY(),
size.getWidth(),
size.getHeight());
return croppedImage;
}
其中 ImageIO 和 BufferedImage 分别来自 javax.imageio 和 java.awt.image。
这种方法可以很好的削减截图的大小,也避免了一些不确定因素(比如日期时间等),是测试中保存截图的很好的方式。
注:如果测试的网页中含有 iframe,则需要使用更复杂的方式计算 WebElement 的位置,详见:计算网页中某个元素的位置。
相关文章
JavaIO BufferedReader和BufferedWriter使用及说明
这篇文章主要介绍了JavaIO BufferedReader和BufferedWriter使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12
全网最全最细的jmeter接口测试教程以及接口测试流程(入门教程)
本文主要介绍了全网最全最细的jmeter接口测试教程以及接口测试流程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-11-11
java 中的instanceof用法详解及instanceof是什么意思(推荐)
instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。接下来通过本文给大家介绍java 中的instanceof用法详解及instanceof是什么意思,需要的朋友参考下吧2017-11-11
教你从头开始用JAVA创建一个自己的简单API并实现第三方调用
在日常开发的时候,经常会遇到需要调用别人的接口的场景,下面这篇文章主要给大家介绍了关于如何从头开始用JAVA创建一个自己的简单API并实现第三方调用的相关资料,需要的朋友可以参考下2023-12-12


最新评论