1. 程式人生 > >7、實現指令碼執行失敗 時自動截圖並儲存出錯資訊到檔案中

7、實現指令碼執行失敗 時自動截圖並儲存出錯資訊到檔案中

自動化指令碼如果失敗了,憑藉什麼去快速定位呢?當然是截圖和出錯資訊了,這裡就來實現這兩個功能。

方法是重寫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 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 = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
File f2 = new File(filename + "\\" + "fail.png");
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();
}
}

}


重點在於: