• testng失败截图,注解方式调用。


    今天一整天都在研究testng失败截图的方法,参考网上的前辈们的资料,加上自己的理解,终于搞出来了。

    package com.dengnapianhuahai;
    /**
     * 自定义注释
     * 
     */
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(value = ElementType.METHOD)
    public @interface MyAnnotation {
    
    }
    package com.dengnapianhuahai;
     * 测试类
     */
    import org.testng.Assert;
    import org.testng.annotations.Test;
    //这里继承MyDriver类是因为MyDriver类里面实例化了driver,这里只是拿来用。
    //MyDriver的作用就是生成一个全局变量的driver。
    //Info 与 MyTestListener只是在用这个在MyDriver中定义好的WebDriver类型的变量driver而已。
    public class Info extends MyDriver {
        @Test
        @MyAnnotation
        public void open() {
            driver.manage().window().maximize();
            driver.get("http://www.baidu.com");
            driver.getTitle();
            Assert.assertEquals(driver.getTitle(), "百度一下,..你就知道");
    
        }
    }
    package com.dengnapianhuahai;
    
    import java.io.File;
    import java.lang.reflect.Method;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.commons.io.FileUtils;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.WebDriver;
    import org.testng.ITestResult;
    import org.testng.TestListenerAdapter;
    
    public class MyTestListener extends TestListenerAdapter {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
        String mDateTime = formatter.format(new Date());
    
        @Override
        public void onTestFailure(ITestResult result) {
            super.onTestFailure(result);
    
            try {
              //用getInstance()方法生产实例然后强制转换为需要的类型(MyDriver),以获得全局变量driver;
                WebDriver driver = ((MyDriver) result.getInstance()).getMyDriver();
              //result.getMethod().getConstructorOrMethod().getMethod();之所以用三个个体getMethod()方法,是因为类型与等号左边的不一致。
                Method method = result.getMethod().getConstructorOrMethod().getMethod();
    
                if (method.isAnnotationPresent(MyAnnotation.class)) {
    
                    File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
    
                    FileUtils.copyFile(scrFile, new File("e:\" + mDateTime + ".png"));
                }
            } catch (Exception e) {
                e.printStackTrace();
    
            }
        }
    }
    package com.dengnapianhuahai;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    /**
     * 
     * @author 等那片花海
     * 
     *作为一个全局变量driver
     */
    public class MyDriver {
        
        WebDriver driver = new FirefoxDriver();
    
        public WebDriver getMyDriver() {
            return this.driver;
        }
    }
    <suite name="TestNGSuite">
    <listeners>
            <listener class-name="com.dengnapianhuahai.MyTestListener" />
        </listeners>
        <test name="test1">
        <classes>
            <class name="com.dengnapianhuahai.Info" />
            
            </classes>
        </test>
    </suite>
  • 相关阅读:
    PB调用.NET类库详解
    一个游标的性能问题
    WCF实例与并发的一些测试
    PB调用.NET代码的两个入口函数
    SQL数据库表防JS木马注入
    Atitit 收入理论大总结 4位一体 4象限理论 财政收入理论 6位一体
    Atitit 融资 之道 圈钱之道 attilax总结
    Atitit 组织架构的如何划分 划分方法attilax大总结
    Atitit 每个人都应该实施的互联网金融战略 attilax总结
    Atitit 研发组织与个人如何gdp计算法 attilax总结
  • 原文地址:https://www.cnblogs.com/dengnapianhuahai/p/5699123.html
Copyright © 2020-2023  润新知