1、创建监听器类TestNGListener,重写onTestFailure方法,里面定义了 监听的driver ,截图文件路径和名称

package utils;

import cases.AppiumBasic;
import io.appium.java_client.AppiumDriver;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter; import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date; public class TestNGListener extends TestListenerAdapter{ @Override
public void onTestFailure(ITestResult tr){
try {
super.onTestFailure(tr);
//调用屏幕截图方法
captureScreenShot(tr,tr.getMethod().getMethodName());
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
} public void captureScreenShot(ITestResult result,String name) {
AppiumDriver driver = AppiumBasic.getDriver();
File srcFile = driver.getScreenshotAs(OutputType.FILE);

String filepath = "E:\\appimage\\education_test";
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
try {
FileUtils.copyFile(srcFile, new File(filepath + File.separator +name+"-"+ dateFormat.format(new Date()) + ".png"));
} catch (IOException e1) {
e1.printStackTrace();
}
} }

2、driver的来源

package cases;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeClass; import java.net.MalformedURLException;
import java.net.URL; public class AppiumBasic {
public static AndroidDriver driver; @BeforeClass
public void beforeClass() throws MalformedURLException {
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(CapabilityType.BROWSER_NAME,"");
caps.setCapability("platformName","Android"); //测试平台
caps.setCapability("deviceName","127.0.0.1:62025"); //指定测试机的ID
caps.setCapability("appPackage","ai.avatec.android"); //被测APP包名
caps.setCapability("appActivity","ai.avatec.android.ui.main.view.MainActivity"); //被测APP入口activity
caps.setCapability("appWaitActivity","ai.avatec.android.ui.main.view.MainActivity");
caps.setCapability("noSign",true); //noSign表示不重签名,设置为true表示不重签名app
caps.setCapability(AndroidMobileCapabilityType.NO_SIGN,true);
//UNICODE_KEYBOARD表示unicode输入法,支持中文输入,支持键盘隐藏
caps.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD,true);
//重置输入法为设备原来的
caps.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD,true);
caps.setCapability("automationName", "UiAutomator2");
//每次启动时覆盖session,否则第二次后运行会报错不能新建session
caps.setCapability("sessionOverride",true);
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);
} public static AppiumDriver getDriver()
{
return driver;
}

}

3、配置监听器

有两种配置方法

(1)有两种配置方法在需要捕捉的类上方

(2)在testng.xml里配置监听器

 
两种方式的差别在于,类上方配置,只能抓获这个类报错的截图。

appium自动化,失败自动截图的更多相关文章

  1. Selenium2+python自动化67-用例失败自动截图【转载】

    前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图 ...

  2. testng 失败自动截图

    testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...

  3. TestNG监听器实现用例运行失败自动截图、重运行功能

    注: 以下内容引自 http://blog.csdn.net/sunnyyou2011/article/details/45894089 (此非原出处,亦为转载,但博主未注明原出处) 使用Testng ...

  4. QTP场景恢复之用例失败自动截图

    以下代码是在QC里运行QTP来执行脚本过程,当执行过程中发现用例失败后就会自动截图,然后把用例返回到最初始的状态,模拟了场景恢复的机制 Class QCImageErrorCapture Dim qt ...

  5. Webdriver+Testng实现测试用例失败自动截图功能

    testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...

  6. TestNG实现用例运行失败自动截图(转载)

    转载自:https://blog.csdn.net/galen2016/article/details/70193684 重写Listener的onTestFailure方法 package com. ...

  7. python3+Appium自动化06-屏幕截图

    截图方法 save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置 driver.save_screenshot('login.png') get_screenshot_a ...

  8. selenium2入门 断言失败自动截图 (四)

    一般web应用程序出错过后,会抛出异常.这个时候能截个图下来,当然是极好的. selenium自带了截图功能. //获取截图file File scrFile= ((TakesScreenshot)d ...

  9. selenium2 断言失败自动截图 (四)

    一般web应用程序出错过后,会抛出异常.这个时候能截个图下来,当然是极好的. selenium自带了截图功能. //获取截图file File scrFile= ((TakesScreenshot)d ...

随机推荐

  1. bayer转dng实现过程记录

    前言 项目中需要将imx185出来的raw数据转成dng格式,一开始认为很简单的事情,后面才发现还是挺复杂的!!!首先考虑的是不写任何代码,直接用adobe提供的转换工具来转,结果发现,不仅是adob ...

  2. 嵌入式上 iscsi实现

    前言 去年公司设备(haisi3516)上需要提供iscsi的功能,于是花了几天时间探究了下.linux内核(2.6.xx)支持iscsi,只是我发现当时我们设备的内核编译时没有选上,于是重新编译了内 ...

  3. appium===安卓SDK下载很慢的解决办法

    方法一:http://www.apkbus.com/forum.php?mod=viewthread&tid=240851 方法二:http://www.androiddevtools.cn/

  4. Linux下安装php环境并且配置Nginx支持php-fpm模块[www]

    Linux下安装php环境并且配置Nginx支持php-fpm模块 http://www.cnblogs.com/freeweb/p/5425554.html 5分钟搭建 nginx +php --- ...

  5. iOS设计模式 —— KV0

    刨根问底KVO KVO 全称 Key-Value Observing.中文叫键值观察.KVO其实是一种观察者模式,观察者在键值改变时会得到通知,利用它可以很容易实现视图组件和数据模型的分离,当数据模型 ...

  6. 【 Ngnix 】配置路径转发至后端Apache多台虚拟主机

    一.安装apache并开启端口 [root@server ~]# netstat -ntplu | grep httpd tcp /httpd tcp /httpd 二.nginx配置 locatio ...

  7. Unicode(UTF-8, UTF-16)令人混淆的概念----我看完了 不错

    来自:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html ---------------------------------- ...

  8. 使用 gulp 编译 Sass

    无论是 node-sass 还是 ruby-sass 使用 npm 安装都非常的慢,甚至会装不上.及其不利于团队协作.建议使用 less 作为 css 预处理器. 如果因为 less 不支持自定义函数 ...

  9. C# 用程序读写另一个控制台程序

    一. using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.W ...

  10. (3)java运行

    java文件后后缀名为 .java 一个java文件的运行需要分为两个阶段,编译阶段和运行阶段 编译阶段 检查java源代码的语法是否错误 生成对应平台的.class文件 例如 :有个A.java的文 ...