用过 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 的位置,详见:
如对本文有疑问, 点击进行留言回复!!
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论