testng 异常 截图

发表于:2018-11-02 11:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:岁月无言成追忆    来源:51testing采编

#
TestNG
分享:
  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),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号