appium自动化,失败自动截图
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自动化,失败自动截图的更多相关文章
- Selenium2+python自动化67-用例失败自动截图【转载】
前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图 ...
- testng 失败自动截图
testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...
- TestNG监听器实现用例运行失败自动截图、重运行功能
注: 以下内容引自 http://blog.csdn.net/sunnyyou2011/article/details/45894089 (此非原出处,亦为转载,但博主未注明原出处) 使用Testng ...
- QTP场景恢复之用例失败自动截图
以下代码是在QC里运行QTP来执行脚本过程,当执行过程中发现用例失败后就会自动截图,然后把用例返回到最初始的状态,模拟了场景恢复的机制 Class QCImageErrorCapture Dim qt ...
- Webdriver+Testng实现测试用例失败自动截图功能
testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...
- TestNG实现用例运行失败自动截图(转载)
转载自:https://blog.csdn.net/galen2016/article/details/70193684 重写Listener的onTestFailure方法 package com. ...
- python3+Appium自动化06-屏幕截图
截图方法 save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置 driver.save_screenshot('login.png') get_screenshot_a ...
- selenium2入门 断言失败自动截图 (四)
一般web应用程序出错过后,会抛出异常.这个时候能截个图下来,当然是极好的. selenium自带了截图功能. //获取截图file File scrFile= ((TakesScreenshot)d ...
- selenium2 断言失败自动截图 (四)
一般web应用程序出错过后,会抛出异常.这个时候能截个图下来,当然是极好的. selenium自带了截图功能. //获取截图file File scrFile= ((TakesScreenshot)d ...
随机推荐
- platform型设备在/dev目录下自动创建设备节点的分析【转】
转自:http://blog.csdn.net/rockrockwu/article/details/7357648 系统启动过程中platform设备.驱动注册完毕,为什么在/dev目录下就自动创建 ...
- Mac-item+zsh
$brew cask install iterm2 $ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/m ...
- python Nosql-redis 连接、管道
非关系型数据库和关系型数据库的差别: 非关系型数据库的优势: 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高. 可扩展性同样也是因为基于 ...
- python多线程实现多任务
#转载请联系 1.什么是线程? 进程是操作系统分配程序执行资源的单位,而线程是进程的一个实体,是CPU调度和分配的单位.一个进程肯定有一个主线程,我们可以在一个进程里创建多个线程来实现多任务. --- ...
- 【C++】类内函数与内联函数
今天本来在休息,结果小伙伴问了我个问题,把我的三观都颠覆了.get到了新的知识点,这里记录一下. 内类的函数,都默认为是内联函数!! 这居然是真的.然后我就懵了.因为内联函数应该是定义在头文件里比较好 ...
- ros bashrc 无法source setup.sh
不知道什么时候开始的,莫名其妙首先是QT闪退,无法找到头文件,然后命令行进去catkin无法提示catkin_make 手动source之后就好了 问题出现在bashrc中source失败了 所以检查 ...
- Iphone安装Pinterest
由于Pinterest在中国的app store下架了,也就搜索不到该应用.所以只能上美国的app store下载. 1,下载itunes,登录vpn,注册新的apple id: 2,手机连接vpn, ...
- [BZOJ4568][Scoi2016]幸运数字 倍增+线性基
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1791 Solved: 685[Submit][Statu ...
- beijing2016
4625: [BeiJing2016]水晶 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 201 Solved: 70[Submit][Status ...
- dfs序学习总结
dfs序: 每个节点在dfs中的进出栈的时间序列. 树是非线性结构,根节点连着子节点,那么dfs序...节点进出栈的时间先后? 从根节点入栈,然后左儿子入栈,左儿子出栈,右儿子入栈,右儿子出栈,根节点 ...