selenium+java,实现一部分截图功能,针对单个元素的截图
有时候需要元素的截图,不需要整个截图。整理一个针对元素的截图的方法。
创建一个Java类,实现截取元素的方法
package com.lozz.utils; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import org.openqa.selenium.OutputType; import org.openqa.selenium.Point; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebElement; import org.openqa.selenium.internal.WrapsDriver; /** * @Title: CreateElementScreenshot.java * @Package com.lozz.utils * @Description: TODO(使用WebDriver对特定的WebElement截图) * @date 2017年7月28日 下午4:20:46 * @version V1.0 */ public class CreateElementScreenshot { public static File captureElement(WebElement element) throws Exception { // TODO Auto-generated method stub WrapsDriver wrapsDriver = (WrapsDriver) element; // 截图整个页面 File screen = ((TakesScreenshot) wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE); BufferedImage img = ImageIO.read(screen); // 获得元素的高度和宽度 int width = element.getSize().getWidth(); int height = element.getSize().getHeight(); // 创建一个矩形使用上面的高度,和宽度 Rectangle rect = new Rectangle(width, height); // 得到元素的坐标 Point p = element.getLocation(); BufferedImage dest = img.getSubimage(p.getX(), p.getY(), rect.width, rect.height); // 存为png格式 ImageIO.write(dest, "png", screen); return screen; } }
在方法中调用此方法实现截取元素的功能
获取到的截图:
可以把相关的截图放置在测试报告中:
(我这使用的是testNG+extentreports生成的报告,具体的extentReports使用方法,使用的第一种方法,可以参照这里)
转载注明来源
- 1楼月夜归醉
- 大神,可以提供下源码吗?
- Re: Lozz
- @月夜归醉,FileUtils.copyFile(CreateElementScreenshot.captureElement(adminpage.mailFolder_lnk()),new File(quot;D:\seleniumproject\com.lozz.SeleniumProject\Screenshot\quot;+ adminpage.mailFolder_lnk().getText() + quot;.pngquot;));,调用这个方法,保存元素的截图,----------------------------------------------------,extest.log(LogStatus.INFO, extest.addScreenCapture(quot;D:\seleniumproject\com.lozz.SeleniumProject\Screenshot\quot;+ adminpage.mailFolder_lnk().getText() + quot;.pngquot;));,这样在你的报告中添加刚才的截图,就好了