testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题
1.首先定义一个截图类:
package com.rrx.utils;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
public class ScreenShort {
public WebDriver driver;
public ScreenShort(WebDriver driver) {
this.driver = driver;
}
public void takeScreenshot(String screenPath){
try {
File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(screenPath));
} catch (IOException e) {
System.out.println("Screen shot error: " + screenPath);
}
}
public void takeScreenshot(){
String screenName=String.valueOf(new Date().getTime()+".jpg");
File file=new File("C://Users//Administrator//workspace//Selenium"+File.separator+"test-output");
//System.out.println(File.separator);//就是一个/
if (!file.exists())
file.mkdirs();
String screenPath = file.getAbsolutePath() + "\\" + screenName;
this.takeScreenshot(screenPath);
}
}
2.实现testng的listener接口并重写OnTestFailure方法
package com.rrx.utils;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class Listener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult tr){
try {
ScreenShort sc=new ScreenShort(DriverFactory.getDriver());
sc.takeScreenshot();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
3.加上监听
@Listeners
({ DotTestListener.
class
})
或者直接在testNG配置文件中添加
<listeners>
<listener class-name="com.rrx.utils.Listener" />
</listeners>