selenium自动化-java-封断言类2

封装断言类

 1 package streamax.com;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import org.testng.Assert;
 7  /*
 8   * 断言类
 9   * 被調用判斷
10   *
11   */
12 public class Assertion {
13
14     public static boolean flag = true;
15
16     public static List<Error> errors = new ArrayList<Error>();
17
18     public static void verifyEquals(Object actual, Object expected){
19         try{
20             Assert.assertEquals(actual, expected);
21         }catch(Error e){
22             errors.add(e);
23             flag = false;
24         }
25     }
26
27     public static void verifyEquals(Object actual, Object expected, String message){
28         try{
29             Assert.assertEquals(actual, expected, message);
30         }catch(Error e){
31             errors.add(e);
32             flag = false;
33         }
34     }
35
36 }

2 监听类

 1 package streamax.com;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import org.testng.ITestResult;
 7 import org.testng.TestListenerAdapter;
 8  /*
 9   * 监听类
10   */
11 public class AssertionListener extends TestListenerAdapter {
12
13     @Override
14     public void onTestStart(ITestResult result) {
15         Assertion.flag = true;
16         Assertion.errors.clear();
17     }
18
19     @Override
20     public void onTestFailure(ITestResult tr) {
21         this.handleAssertion(tr);
22     }
23
24     @Override
25     public void onTestSkipped(ITestResult tr) {
26         this.handleAssertion(tr);
27     }
28
29     @Override
30     public void onTestSuccess(ITestResult tr) {
31         this.handleAssertion(tr);
32     }
33
34     private int index = 0;
35
36     private void handleAssertion(ITestResult tr){
37         if(!Assertion.flag){
38             Throwable throwable = tr.getThrowable();
39             if(throwable==null){
40                 throwable = new Throwable();
41             }
42             StackTraceElement[] traces = throwable.getStackTrace();
43             StackTraceElement[] alltrace = new StackTraceElement[0];
44             for (Error e : Assertion.errors) {
45                 StackTraceElement[] errorTraces = e.getStackTrace();
46                 StackTraceElement[] et = this.getKeyStackTrace(tr, errorTraces);
47                 StackTraceElement[] message = new StackTraceElement[]{new StackTraceElement("message : "+e.getMessage()+" in method : ", tr.getMethod().getMethodName(), tr.getTestClass().getRealClass().getSimpleName(), index)};
48                 index = 0;
49                 alltrace = this.merge(alltrace, message);
50                 alltrace = this.merge(alltrace, et);
51             }
52             if(traces!=null){
53                 traces = this.getKeyStackTrace(tr, traces);
54                 alltrace = this.merge(alltrace, traces);
55             }
56             throwable.setStackTrace(alltrace);
57             tr.setThrowable(throwable);
58             Assertion.flag = true;
59             Assertion.errors.clear();
60             tr.setStatus(ITestResult.FAILURE);
61         }
62     }
63
64     private StackTraceElement[] getKeyStackTrace(ITestResult tr, StackTraceElement[] stackTraceElements){
65         List<StackTraceElement> ets = new ArrayList<StackTraceElement>();
66         for (StackTraceElement stackTraceElement : stackTraceElements) {
67             if(stackTraceElement.getClassName().equals(tr.getTestClass().getName())){
68                 ets.add(stackTraceElement);
69                 index = stackTraceElement.getLineNumber();
70             }
71         }
72         StackTraceElement[] et = new StackTraceElement[ets.size()];
73         for (int i = 0; i < et.length; i++) {
74             et[i] = ets.get(i);
75         }
76         return et;
77     }
78
79     private StackTraceElement[] merge(StackTraceElement[] traces1, StackTraceElement[] traces2){
80         StackTraceElement[] ste = new StackTraceElement[traces1.length+traces2.length];
81         for (int i = 0; i < traces1.length; i++) {
82             ste[i] = traces1[i];
83         }
84         for (int i = 0; i < traces2.length; i++) {
85             ste[traces1.length+i] = traces2[i];
86         }
87         return ste;
88     }
89 }
时间: 2024-12-23 01:59:01

selenium自动化-java-封断言类2的相关文章

selenium自动化-java-封装断言

封装的断言. 1 package com.baidu.www; 2 3 import org.testng.Assert; 4 /* 5 * 封装断言 6 */ 7 public class assertion { 8 static boolean flog = true; 9 10 public static void verifyassert(Object actual, Object expected) { 11 try { 12 Assert.assertEquals(actual, e

python + selenium自动化环境常见问题小结

python + selenium自动化环境常见问题小结 (1)操作Windows窗口有三种方法,一是使用AutoIT软件生成exe程序,再用系统命令调用:二是使用SendKeys类模拟键盘操作(只能定位当前的焦点):三是使用pywinauto组件(win32gui) (2)pywinauto包只支持到python2.6版本.SendKeys包在python3.0版本上也无法安装成功. (3)执行完用例进行断言校验时,一般会获取元素的text属性,有时候在页面上查看元素有text值,而获取的为空

Python+selenium自动化公共逻辑步骤封装

开篇 个人博客"Python+selenium的GUI自动化实现"提到的chrome与IE浏览器调用插件已上传至51CTO下载,对应链接分别为:chrome,http://down.51cto.com/data/2171584:IE,http://down.51cto.com/data/2171585:有需要的直接下载即可:  正文 关于自动化,其实质就是用机器操作代替手工执行,从而减少人力投入.节约项目运营成功.优秀的自动化框架,可能的一个发展过程,前期自动化用例写作实现过程,可能需

Selenium TestNG Java环境搭建过程中所遇问题汇总

[问题一]运行时报Unalbe to connect to host 127.0.0.1 on port 7855 [问题分析]Selenium版本与火狐版本不一致,需要下载对应的版本 [解决方式]根据Selenium版本下载对应的火狐版本,版本具体对应方式可以查看官网相关说明(http://www.seleniumhq.org/download/) [问题二]运行时报Main函数错误 [问题分析]由于当前运行JAVA版本为JDK1.6,版本较低,需要高版本的JDK [解决方式]卸载JDK1.6

利用Selenium自动化web测试

简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 Selenium 是一个健壮的工具集合,跨很多平台支持针对基于 web 的应用程序的测试自动化的敏捷开发.它是一个开源的.轻量级的自动化工具,很容易集成到各种项目中,支持多种编程语言,比如 .NET.Perl.Python.Ruby 和 Java? 编程语言. 利用 Selenium 测试 Aja

Selenium 自动化测试之道--学习总结-WebDriver

最近正在看Ping++测试团队编著的<Selenium 自动化测试之道>,非常非常好的一本书,不仅仅是工具的介绍使用,还有非常珍贵的实践总结,自己的公司也在做自动化,由于是基于B/S,要考虑到硬件环境,而且主要使用的是RobotFramework去构建自动化脚本验证系统的可靠性. 之前自己也学习过关于Selenium的知识,但是总感觉知识很零散,自己在网上搜了很长时间,买了这本书,发现自己还欠缺很多,很庆幸能读到这本书,下面开始一点点的搭建自己的知识框架. 一.工作原理 Selenium We

如何写好Python+Selenium自动化?

哈喽,各位客官好,今天我给大家讲讲如何使用Python+Selenium做自动化测试,楼主在做开发测试之前做得java开发,由于种种原因,楼主转成了开发测试,接着又自学了脚本语言linux和python,对于这两门脚本,我是非常的喜欢,为什么呢,因为用起来效率太高了,所以楼主弃java转python,至于为什么,不做多解释,你懂得.接下来我将给各位讲讲如何用python+selenium自动化 1,什么是selenium selenium是一个开源的自动化测试框架,主要适用WEB测试,可以支持多

Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)

Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: 1 /** 2 * Get Object of return from js 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoSeleniumDemo main.aaron.sele.core SeleniumCore.java execJSR, 2015-8-9

Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)

在自动化脚本编写过程中,操作元素之前,需要对元素进行高亮显示(通过修改元素的边框样式),同时进行截图,以记录操作的元素对象.在实际应用中较为少见,通常用于演示,或者发生错误时的屏幕截图捕捉,用于错误报告分析. 直接上码了...... 1 /** 2 * 3 * @function height light the element 4 * 5 * @author Aaron.ffp 6 * @version V1.0.0: autoUISelenium main.java.aaron.sele.c