appium自动化,失败自动截图

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

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 = AppiumDemo.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的来源

public class AppiumDemo {
    public static AppiumDriver<WebElement> driver;
    @BeforeClass
    public void setup() throws Exception{
        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 AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps){
            @Override
            public WebElement scrollTo(String text) {
                return null;
            }

            @Override
            public WebElement scrollToExact(String text) {
                return null;
            }

            public void rotate(DeviceRotation deviceRotation) {

            }

            public DeviceRotation rotation() {
                return null;
            }
        };
    }
    public static AppiumDriver getDriver()
    {
        return driver;
    }
}

  3、配置监听器

有两种配置方法

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

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

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

原文地址:https://www.cnblogs.com/fulucky/p/9240096.html

时间: 2024-08-30 07:47:35

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

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

前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图. 一.不带变量的装饰器 1.参考资料:http://www.artima.com/weblogs/viewpost.jsp?thread=240845,这里这篇讲的很好,可以看下原文 2.这个是不带变量的装饰器__init__里是初始化参数,__call__里面是原函数参数 Decorators

基于页面元素定位的操作失败自动截图

web自动化脚本运行失败,很大一部分问题出在元素定位上,博主在这里介绍一个循环定位及失败截图的方法.以方便脚本维护,定位问题. 1.以下代码是WebDriver自带的方法,封装一下,使用即可. 1 /** 2 * 截取屏幕截图并保存到指定路径 3 * 4 * @param filepath 5 * 保存屏幕截图完整文件名称及路径 6 * @return 无 7 */ 8 public void captureScreenshot(String filepath) { 9 File screenS

Python Unittest框架用例执行失败自动截图

原生的unittest框架是不支持case失败后自动截图功能,网上的解决办法,大体上分为两种: 1.加装饰器 可参考让unittest框架在fail时自动截图的装饰器.给测试用例添加多个装饰器的问题 (python unittest.TestCase) 2.封装断言 可参考Getting Python's unittest results in a tearDown() method.python 自动化测试,求助:如何判断用例断言失败后自动截图 原文地址:https://www.cnblogs

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

一般web应用程序出错过后,会抛出异常.这个时候能截个图下来,当然是极好的. selenium自带了截图功能. //获取截图file File scrFile= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //将图片移动到指定位置 FileUtils.moveFile(scrFile, new File(newFilePath)); 当然在截图之前 需要判断新路径是否合法.下面贴出整体的代码. package commo

python+selenium自动化软件测试:装饰器之用例失败后截图

对于用例失败截图,很多小伙伴都希望用例执行失败的时候能自动截图,想法是很好的,实现起来并不是那么容易,这里小编分享下最近研究装饰器,打算用装饰器来实现自动截图. 一.函数作为形参1.函数的参数也可以是另外一个函数,也就是说传的参数不仅可以是常见的字符串.数字等,也可以是一个函数.2.定义aaa为一个加法函数,bbb为减法函数.3.calculate这个函数传三个参数,第一个参数是一个函数,另外两个参数是函数的两个参数. 二.万能装饰器1.由于不知道我们被调用的函数到底有几个参数,这时候就可以写一

appium自动化基础总结

---恢复内容开始--- 断断续续学了2周appium自动化,把经常用到基础写出来吧!方便日后便于查看. appium解决中文无法输入和,启动app自动清除数据的问题.在前置代码里面加上这3句就可以解决. desired_caps = { "unicodeKeyboard": "True", # 使用unicode输入法 "resetKeyboard": "True", # 重置输入法到初始状态 "noReset&q

利用PhantomJS 自动截图Kibana ,phpmailer发送网站运营日报

如题,先来张最终效果运营日报 下面介绍下实现过程 [前期准备] kibana配置视图,并做好条件过滤视图,这里就是做介绍,可以参考博文, 视图做好后生成一个短链接,这里我们生成的是 http://10.0.0.110:5601/goto/4d641c075d7cbf2c7d70a82b16436769 1.安装配置PhantomJS # yum -y install gcc gcc-c++ make flex bison gperf ruby   openssl-devel freetype-d

App 上线时的自动截图方案

> * 原文链接 : Screenshots Through Automation * 作者 : Flavien Laurent * 译者 : chaossss * 校对者: sundroid * 状态 : 校对完成 在发布 App 到应用商店时有一件的事情不得不做,就是上传最新的高清无码截图到应用商店上.可是如果你的 App 有许多页面,那你每次发布更新都可能是一场梦魇,因为你需要一页一页地去截图.为了解决众多 App 开发者的这个痛点,我将在这篇博文中介绍一个实现自动化截图的方法: 刚到 C

Appium自动化 - 设置unicodeKeyboard: True运行脚本后,手机输入时无法调出软键盘

问题背景 做appium自动化的时候,使用了UiAutomator1驱动,然后设置了UnicodeKeyboard 执行自动化脚本之后,玩手机的时候发现平时用的输入法键盘没法调出来了 'automationName': 'UiAutomator1', 'unicodeKeyboard': True 问题原因 默认的手机输入法会被appium自动切换成Unicode IME了 解决方案 很简单,将当前输入法切换成自己原来用的就行啦! 原文地址:https://www.cnblogs.com/pol