欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WebDriver中实现对特定的Web区域截图方法

程序员文章站 2024-03-05 08:33:36
用过 webdriver 的同学都知道,webdriver 可以对浏览器中的页面进行截图。例如: public byte[] takescreenshot() t...

用过 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 的位置,详见: