testNG里有一个异常监听类,失败时会执行类里的相关方法
DriverBase 截图类
TestngListenerScreen 异常监听类
Test1 测试类
1.DriverBase类
package com.cmall.screenshot; import com.cmall.appium.DriverFactory; import com.cmall.appium.Helper; import com.cmall.jdjr.pages.Modules.Integration.HomePage; import com.cmall.utils.LogUtil; import com.cmall.utils.PropertyUtil; import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.pagefactory.AppiumFieldDecorator; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.support.PageFactory; import org.testng.annotations.Test; import java.io.File; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.concurrent.TimeUnit; public class DriverBase { private static AndroidDriver<MobileElement> driver = null; private Helper helper; private LogUtil log = new LogUtil(DriverBase.class); /** * 获取driver * */ public AndroidDriver<MobileElement> getDriver() { return Test1.mdriver; } /** * 自动截图 * */ public void takeScreenShot(String methodName) { SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); String dateStr = sf.format(date);//上面几行代码的意思都是获取时间,并且格式化,用来作为图片的名称 String path = this.getClass().getSimpleName() + "_" + methodName + "_" + dateStr + ".png"; //因为我们截图是需要用到driver的,所以这里需要获取driver,这个driver是获取的当前对象的driver takeScreenShot((TakesScreenshot) this.getDriver(), path); } /** * 传入参数截图 * */ public void takeScreenShot(TakesScreenshot drivername, String path) { String currentPath = PropertyUtil.getString("screenPic_dir"); File scrFile = drivername.getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(scrFile, new File(currentPath + "\\" + path)); } catch (Exception e) { e.printStackTrace(); } finally { log.error("<a href=" + currentPath + " target=_blank>Failed Screen Shot</a>"); System.out.println("截图成功"); } } public void setDriver(AndroidDriver<MobileElement> driver){ this.driver = driver; } } |
2.TestngListenerScreen类
package com.cmall.screenshot; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class TestngListenerScreen extends TestListenerAdapter { @Override public void onTestSuccess(ITestResult tr) { super.onTestSuccess(tr); } // 主要是用到这个方法了,当你报错时他会监听到,然后就会执行截图操作 @Override public void onTestFailure(ITestResult tr) { super.onTestFailure(tr); System.out.println("####################################################"); System.out.println(tr); System.out.println("####################################################"); takeScreenShot(tr,tr.getMethod().getMethodName());//第二个参数表示哪个类产生的异常 } @Override public void onTestSkipped(ITestResult tr) { super.onTestSkipped(tr); } @Override public void onTestStart(ITestResult result) { super.onTestStart(result); } @Override public void onStart(ITestContext testContext) { super.onStart(testContext); } @Override public void onFinish(ITestContext testContext) { super.onFinish(testContext); } private void takeScreenShot(ITestResult tr,String methodName) { DriverBase driverBase = (DriverBase) tr.getInstance(); driverBase.takeScreenShot(methodName); } } |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。