Appium-测试失败后屏幕截图的

本文参考:http://www.cnblogs.com/hexianl/p/4958556.html

使用testng测试框架进行管理测试

1.创建监听,代码如下:

import io.appium.java_client.AppiumDriver;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import com.globalegrow.test.Screenshot;

public class ScreenshotListener extends TestListenerAdapter{
    @Override
    public void onTestFailure(ITestResult tr){
        AppiumDriver driver = Screenshot.getDriver();
        File location = new File("screenshots1");
        String screenShotName = location.getAbsolutePath()+File.separator+tr.getMethod().getMethodName()+".png";
        File screenShot = driver.getScreenshotAs(OutputType.FILE);
        try{
            FileUtils.copyFile(screenShot, new File(screenShotName));
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
}

2.创建测试类,代码如下:

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Screenshot {

    static AppiumDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName","Android");
        capabilities.setCapability("deviceName","192.168.35.102:5555");
        capabilities.setCapability("platformVersion", "5.1");
        capabilities.setCapability("browserName", "Chrome");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(6, TimeUnit.SECONDS);
    }

    @Test
    public void testExample() throws InterruptedException{

        driver.get("http://wap-sammydress.com.trunk.s1.egomsl.com/");
        driver.findElement(By.id("js_top_cate")).click();
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#nav > div > ul > li:nth-child(2) > p")).click();
        Thread.sleep(5000);
        driver.findElement(By.cssSelector("#header > div.top.on > a.icon_tag.top_user.isnoLogin")).click();
        Thread.sleep(2000);
        driver.findElement(By.id("email")).sendKeys("[email protected]");
        driver.findElement(By.id("passwordsignl")).sendKeys("xxxx");
        driver.findElement(By.id("js_signInBtn")).click();

        Thread.sleep(2000);
    }

    @AfterClass
    public void tearDown(){
        driver.quit();;
    }

    public static AppiumDriver getDriver(){
        return driver;
    }    

}

tesng的xml文件配置监听如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test">
    <!-- 配置testng监听器 -->
    <listeners>
         <listener class-name="com.xxx.ScreenshotListener" />
    </listeners>
    <test name="version" preserve-order="true">
        <classes>
            <class name="com.xxx.test.Screenshot">
                <methods>
                    <include name="testExample" />
                </methods>
            </class>
        </classes>
    </test>
</suite>

运行测试,testExample运行失败后截图如下:

时间: 2024-10-29 10:46:21

Appium-测试失败后屏幕截图的的相关文章

执行用例失败后重新运行

场景: • 测试失败后要重新运行n次,要在重新运行之间添加延迟时 间,间隔n秒再运行. • 执行: • 安装:pip install pytest-rerunfailures • • pytest -v - -reruns 5 --reruns-delay 1   ---每次等1秒 重试5次 pip3 install pytest-assume   断言后继续执行,但要修改断言 @pytest.mark.parametrize(('x', 'y'), [(1, 1), (1, 0), (0, 1

【亲测】Appium测试Android混合应用时,第二次切换到WebView失败

要解决的问题:Appium测试Android混合应用时,第二次切换到WebView时失败 原因分析:在用Appium测试Android混合应用时,当程序第一次切换到WebView时,可以正常进行自动化测试.可是当程序第二次切换到WebView时,Appium会自动找到到第一次打开的Html页面,那么这时Appium就无法定位我们第二次打开的Html页面中的元素. Appium第一次切换到Html页面时,会新生成一个Chromedriver:当第二次切换到Html时,会使用已经存在的Chromed

微信现金红包接口本地测试成功,服务器上失败后的解决办法

本地测试成功后,基本上确定代码还是可用的. 那么本地跟服务器就剩下配置上的区别了. 现金红包接口api 是需要带证书的.所以呢,iis配置有所不同. asp.net 4.0 + iis 8.0  配置环境 1 打开iis   点击 应用程序池 2 点击最右侧的  右上角   设置应用程序池默认设置 3 设置 里面的参数,把 加载用户配置文件 项  改为  true 重启下 iis  再试试  服务器上的接口是否变得正常了呢.

删除Windows中隐藏的物理网卡和网络虚拟化失败后的虚拟网卡

Windows环境下,在更换硬件服务器主板和网卡等硬件.恢复操作系统或者网络虚拟化失败后,可能会出现网卡方面的问题.例如,设备管理器中多了不应该存在的网卡:因命名冲突无法重命名当前网络连接:IP地址冲突却找不到那个与之冲突的网卡:网络虚拟化失败后出现无法删除的虚拟网卡等等.下面我们就来总结一下如何删除这些可见或不可见的Ghost一样的网卡. 一.识别各类网络设备和网络连接 由于网络虚拟化会在物理机上新增许多虚拟网络设备(包括虚拟网卡),情况会变得复杂,因而首先我们需要分清他们.当然如果没有进行网

SQL Server 2008 R2中配置作业失败后邮件发送通知

SQL Server日常维护中难免会遇到作业失败的情况.失败后自然需要知道它失败了,除了例行检查可以发现出错以外,有一个较实时的监控还是很有必要的.比较专业的监控系统比如SCOM虽然可以监控作业执行情况在出错时进行报警,但对于DBA来说可能可定制性不高,最主要的是负责监控的人员在看到报警后一般都需要立刻联系DBA来解决,对于一些重要性不高的作业失败了,大半夜把你叫起来,感觉肯定是不爽的.SQL Server 本身支持发送数据库邮件,结合发送邮件的功能,在作业失败后将出错情况通过邮件通知DBA,这

Oracle 数据库 JOB 失败后的重试规律解密

由于官方文档上没有找到相关的说明,所以这里进行了如下测试,为了找到oracle数据库中 job 失败后重试时间的规律. 数据库版本:11.2.0.3 测试说明:这里创建了一个日志表以及一个运行时必定出错的procedure,用于job的运行.这里只要记录下每次job执行时视图user_jobs 中的 next_date就可以推断出job 执行失败后的重试规律. 为了测试job的重试规律我做了如下工作 日志表以及序列: create table job_exec_logs (id number ,

c++ new失败后做了什么?

一直以来我都在写着这样的代码 char* buf = new char[1024]; if(NULL == buf){ printf("new failure\n"); } 可new失败以后真的会返回NULL吗?写了个例子测试一下: #include <stdlib.h> #include <stdio.h> #define BUF_SIZE (100*1024*1024) int main(int argc,char** argv){ int i = 0; f

解决android SDK不能更新,appium测试混合app无法返回webview问题

问题:1.connection to the server is unsuccessful(file:///www/asset/index.html)(原因:android系统问题,需要更新)2.appium测试混合app,没有返回webview(原因:主要由于android版本问题,需要原生系统android4.4)3.android SDK不能更新package 4.android SDK中extra文件更新失败问题 解决:一.更新sdk,步骤如下:1.修改hosts文件打开c:/windo

聊聊数据库乐观锁和悲观锁,乐观锁失败后重试

在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制. 数据锁分为乐观锁和悲观锁,那么它们使用的场景如下: 1. 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回. 2. 悲观锁适用于写多读少的情景,这种情况也相当于JAVA的synchronized,reentrantLock等,大量数据过来的时候,只有一条数据可以被写入,其他的数据需要等待.执行完成后下一条数据可以继续. 他们实现的方式上有所