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的位置,详见:计算网页中某个元素的位置。