在有了Position类和接口类之后,我们是不是立刻就要着手开始写实现类了呢?按照一般的顺序是这样。但是,我们这里先停一下。原因有二:

1)既然是写一个框架,我们希望总体的功能上是全面的。实现类中,我们需要设计和实现各种具体的操作方法。那么,如果中间出了问题,我们希望能够有所记录(log),所以需要有一个Log类。

2)既然是需要记录,我们希望能够在每次测试的测试报告中,体现该次测试操作的记录。那么,就需要对所做的测试进行监听,所以我们也需要一个监听(Listener)的类。

  在写log类之前,我们需要在项目中导入log4j的jar包,具体的下载地址:https://mvnrepository.com/artifact/log4j/log4j

  在导入log4j-1.2.17.jar的包后,我们开始着手写Log类。

package webui.xUtils;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties; import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator; public class logUtil {
  private final Class<?> clazz;
  private Logger logger;   //这里是定义logUtil的构造函数,因为不明确需要记录log的类是什么样子的,所以使用泛型Class<?> clazz
  public logUtil(Class<?> clazz) {
    this.clazz = clazz;
    this.logger = Logger.getLogger(this.clazz);
    logUtil.initlog4j();
  }   //定义记录log的方法
  private static void initlog4j() {
    //创建Propderties对象
    Properties prop = new Properties();
    /*Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
    这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!级别后面是输出端*/
    prop.setProperty("log4j.rootLogger", "INFO,CONSOLE,E,F");
    prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
    prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
    prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");     //设置日志输出的路径
    String src = "test-output/log";
    //设置日期格式
    SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
    //获取当前日期,并根据当前的日期建立文件夹,将生成的.log文件放入当前日期的文件夹。
    String date=dateFormat.format(new Date()).toString();
    File dir = new File(src+"/"+date);
    if (!dir.exists()){
      dir.mkdirs();
    }
    String filepath=dir.getAbsolutePath()+"/"+"log_"+date+".log";     prop.setProperty("log4j.appender.E","org.apache.log4j.FileAppender");
    prop.setProperty("log4j.appender.E.file",filepath);
    prop.setProperty("log4j.appender.E.layout","org.apache.log4j.PatternLayout");
    prop.setProperty("log4j.appender.E.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
    prop.setProperty("log4j.appender.F","org.apache.log4j.FileAppender");
    prop.setProperty("log4j.appender.file.encoding","UTF-8");
    //生成Html格式的日志,并将生成的.html的日志文件放入当前日期的文件夹。
    String filepathHtml=dir.getAbsolutePath()+"/"+"log_"+date+".html";
    prop.setProperty("log4j.appender.F.file",filepathHtml);
    prop.setProperty("log4j.appender.F.layout","org.apache.log4j.HTMLLayout");
    //prop.setProperty("log4j.appender.F.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
    PropertyConfigurator.configure(prop);
    }   public void info(String message) {
    logger.info(message);
  }   public void debug(String message) {
    logger.debug(message);
  }   public void error(String message) {
    logger.error(message);
  }   public void trace(String message) {
    logger.trace(message);
  }
}

到此,log类就算完成了。在使用的时候,直接定义一个实例来调用相应的方法即可。例如: logUtil logs = new logUtil(X.class);

 另外,除了logUtil中定义的样式,在需要记录的地方,可以调用该类中相应的方法,比如logs.info("测试开始"),那么在执行相应程序的时候,这段话就会被记录在log文件中。这样,就方便我们自己定义log的内容了。

基于Java+Selenium的WebUI自动化测试框架(三)------记录LOG的更多相关文章

  1. 基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器

    对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是, ...

  2. 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample

    到目前为止,我们所写的东西,都是集中在如何使用Selenium和Java来定位和读取元素.那么,到底如何具体开展测试,如何实现参数化,如何实现判定呢?下面,我们来看看Java应用程序的测试框架吧. 当 ...

  3. 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)

    我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...

  4. 基于Java+Selenium的WebUI自动化测试框架(六)---浏览器初始化

    本篇我们来讨论,如何写一个浏览器初始化的类.在写之前,先思考一下,我们需要一个什么样的初始化? 先来看看使用原生的Java + selenium是怎么做的.(以firefox为例) System.se ...

  5. 基于Java+Selenium的WebUI自动化测试框架(十三)-----基础页面类BasePage(Excel)

    前面,我们讲了如何使用POI进行Excel的“按需读取”.根据前面我们写的BasePageX,我们可以很轻松的写出来基于这个“按需读取”的BasePage. package webui.xUtils; ...

  6. 基于Java+Selenium的WebUI自动化测试框架(十一)-----读取Excel文件(POI)(1)

    上一篇说了利用JXL的jar包来读取Excel的代码.在Java中,还可以用另外一种jar包来读取Excel的内容,那就是Apache的POI. 这里和之前一样,需要导入POI的jar包,建议导入这三 ...

  7. 基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)

    之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类.下面,我们来进行一些扩展,通过Excel来读取页面元素. Excel的使用,大多数人应该都不陌生.那么Java读取Exce ...

  8. 基于Java+Selenium的WebUI自动化测试框架(九)-----基础页面类(BasePage)

    上篇我们写了java读取xml文件的类,实现了可以从xml文件读取元素的方式.那么,接下来我们需要考虑一个问题.我们拿了这些元素之后怎么去操作呢? 先来看看我们手工测试的时候是怎么进行的. 双击浏览器 ...

  9. 基于Java+Selenium的WebUI自动化测试框架(五)------页面操作实现类

    在编写完Log类和监听类之后,终于要回到正轨上来了.我们继续开始写UIExcutor的实现类. PS:如果你想让你的报告更加美观一些.推荐使用reportNG这个jar包. 在项目中导入reportn ...

随机推荐

  1. InstallerProjects打包

    C#—使用InstallerProjects打包桌面应用程序   前言 打包桌面应用程序实在是一个不常使用的东西,偶尔使用起来经常会忘东忘西的耽误时间,因此,这篇文章多以图片记录过程,也是用于备忘. ...

  2. mui弹出二维码示例

    <div id="tap_popover" class="box mui-popover mui-popover-action mui-popover-bottom ...

  3. 洛谷 题解 P1772 【[ZJOI2006]物流运输】

    题目描述 物流公司要把一批货物从码头\(A\)运到码头\(B\).由于货物量比较大,需要\(n\)天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过 ...

  4. JVM(一) 内存结构

    JVM内存结构 方法区(JDK8以上叫元空间)和堆为线程共享区,虚拟机栈.本地方法栈及程序计数器为线程独占区,  还有一个没有在下图中体现的叫做直接内存(Direct Memory),不受JVM GC ...

  5. 使用plotrix做韦恩图

    color <- c("#E41A1C","#377EB8","#FDB462") color_transparent <- a ...

  6. vue打包静态资源后显示空白及static文件路径报错

    1.打包之后打开dist的页面显示空白: 这个是打包项目比较常见的一个错误 改一下config下面的index.js中bulid模块导出的路径.因为打包后的index.html里边的内容都是通过scr ...

  7. [C++] 习题 2.14 用队列实现桶排序

    目录 前置技能 队列(已在上篇提到栈的时候顺便提到了,不再赘述) 桶排序 具体实现 由用户输入n个10以内的数,每输入i(0≤i≤9),就把它插入第i号队列中,最后把10个队列中的非空队列,按队列号从 ...

  8. Django开发常用方法及面试题

    目录 1.对Django的认识? 2.Django .Flask.Tornado的对比 3.什么是wsgi,uwsgi,uWSGI? 4. django请求的生命周期? 5. 简述什么是FBV和CBV ...

  9. PAT(B) 1093 字符串A+B(Java和C)

    题目链接:1093 字符串A+B (20 point(s)) 题目描述 给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集.要求先输出 A,再输出 B,但重复的字符必须被剔除. 输 ...

  10. PAT(B) 1042 字符统计(Java)字符串 正则表达式 统计

    题目链接:1042 字符统计 (20 point(s)) 题目描述 请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 A ...