WebDriver中实现对特定的Web区域截图方法
用过WebDriver的同学都知道,WebDriver可以对浏览器中的页面进行截图。例如:
publicbyte[]takeScreenshot()throwsIOException{
TakesScreenshottakesScreenshot=(TakesScreenshot)driver;
returntakesScreenshot.getScreenshotAs(OutputType.BYTES);
}
这样产生的图片是整个网页。但有时候我们并不需要整个网页,只需要某些特定的WebElement,以避免一些干扰。
虽然WebDriver本身没有提供这样的API,不过我们可以自己来,就是在全屏的截图中再进行裁剪,如下:
publicBufferedImagecreateElementImage(WebElementwebElement)
throwsIOException{
//获得webElement的位置和大小。
Pointlocation=webElement.getLocation();
Dimensionsize=webElement.getSize();
//创建全屏截图。
BufferedImageoriginalImage=
ImageIO.read(newByteArrayInputStream(takeScreenshot()));
//截取webElement所在位置的子图。
BufferedImagecroppedImage=originalImage.getSubimage(
location.getX(),
localtion.getY(),
size.getWidth(),
size.getHeight());
returncroppedImage;
}
其中ImageIO和BufferedImage分别来自javax.imageio和java.awt.image。
这种方法可以很好的削减截图的大小,也避免了一些不确定因素(比如日期时间等),是测试中保存截图的很好的方式。
注:如果测试的网页中含有iframe,则需要使用更复杂的方式计算WebElement的位置,详见:计算网页中某个元素的位置。