7、實現指令碼執行失敗 時自動截圖並儲存出錯資訊到檔案中
阿新 • • 發佈:2018-11-08
自動化指令碼如果失敗了,憑藉什麼去快速定位呢?當然是截圖和出錯資訊了,這裡就來實現這兩個功能。
方法是重寫TestListenerAdapter中的onTestFailure和onTestSkipped方法,在方法中新增截圖和儲存出錯資訊到文字的方法。
新建一個webtestListener.java檔案:
程式碼如下:
package framework;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class webtestListener extends TestListenerAdapter{
public static WebDriver driver;
@Override
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
takeScreenShot(tr);
savelog(tr);
}
@Override
public void onTestSkipped(ITestResult tr) {
super.onTestSkipped(tr);
takeScreenShot(tr);
savelog(tr);
}
public void takeScreenShot(ITestResult tr){
String dir = tr.getName();
System.out.println("------------>testName="+dir);
String filename = path + dir;
System.out.println("---------->filename="+filename);
File f = new File(filename);
if(!f.exists()){
f.mkdir();
}
File f1 = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(f1, f2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void savelog(ITestResult tr){
String path = System.getProperty("user.dir") + "\\runlog\\";
String dir = tr.getName();
System.out.println("------------>testName="+dir);
String filename = path + dir;
System.out.println("---------->filename="+filename);
File f = new File(filename);
if(!f.exists()){
f.mkdir();
}
File f1 = new File(filename + "\\log.txt");
try {
PrintWriter pw = new PrintWriter(f1);
Throwable t = tr.getThrowable();
t.printStackTrace();
t.printStackTrace(pw);
pw.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
重點在於: