专题五:脚本run的过程中,出现异常时,实现自动截图。
场景:在执行
自动化测试过程中,难免会出现异常的时候。这个时候,若能把当时的图截取下来,这对我们对问题现象的分析很有帮助。
思路:在网上搜了很多资料后,发现很多人提到这个(cause instance of ScreenshotException),下面我也会给出相关代码。但目前本人才疏学浅,还没很好的弄明白,什么时候出现的异常属于ScreenshotException。所以现在实现的截图,是只要出现异常就截图,而不会再判断是否匹配instance of ScrrenshotException。
脚本:(JAVA语言实现)
public class EventListener extends AbstractWebDriverEventListener{
@Override
public void onException(Throwable throwable,WebDriver driver){
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
Strubg dateString =formatter.format(new Date());
String imgDir=System.getProperty("user.dir");
// System.out.println("imgDir::"+imgDir);
try{
//截图并保存在D盘下
File screenShotFile=((TakeScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenShotFile,new File(imgDir+dateString+".jpg"));
// System.out.println("开始截图");
}
catch(IOException e){
System.out.println(Fail to capture screenshot:" +e.getMessage());
}
}
}
封装driver的脚本
public class pageSourceFiles{
private static WebDriver driver;
protected static WebDriver getDriver(){
if(driver==null){
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTROUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
driver = new InternetExplorerDriver(ieCapabilities);
WebDriverEventListener eventListener = new EventListener();
driver = new EventFiringWebDriver(driver);
((EventFiringWebDriver)driver).register(eventListener);
}
return driver;
}
另给出cause instance of ScreenshotException 对应的脚本:
private String extractScreenShot(Throwable ex){
Throwable cause=ex.getCause();
if(cause instanceof ScreenshotException){
return ((ScreenshotException)cause).getBase64EncodedScreenshot();
}
return null;
}