java自动化将用例和截图一起执行测试放入world中直接生成测试报告【搬代码】

1.首先我们得用例写好之后放入文档中,把不用的案例类型、前置条件去掉之后,如图:
1
放到桌面后,先看执行结果:
在这里插入图片描述

直接上代码

package com.znzdh.qitagongju;

import jxl.Sheet;
import jxl.Workbook;
import org.apache.commons.io.FileUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;

public class Eworld3 {

    public static Logger log= Logger.getAnonymousLogger();
    // 创建新的Word文档对象
    public static final XWPFDocument document = new XWPFDocument();
    public static void main(String[] args) {
        try{

            // 添加段落内容,也就是标题
            XWPFParagraph p = document.createParagraph();
            p.setStyle("标题4");//设置标题2
            p.setFontAlignment(2);//字体对齐方式:1左对齐 2居中3右对齐
            XWPFRun run = p.createRun();
            run.setText("xxx测试报告");//添加标题



            //urlexcel,这个地址是你用例的地址
            String path="D:\\桌面\\Eworld1.xls";
            //解析路径
           Workbook workbook=Workbook.getWorkbook(new File(path));
            //获取第一张表
            Sheet sheet = workbook.getSheet(0);


            //循环获取第一行数据,因为默认第一行为标题行,我们可以从1开始循环,如果需要读取标题行,从0开始
            for (int i = 1; i <sheet.getRows() ; i++) {
                //获取第一行的第i行信息 sheet.getcell(列,行);下标从0开始
                String name = sheet.getCell(0, i).getContents();
                System.out.println("标题::"+name);
                //获取第二行的第i行信息
                String miaoshu = sheet.getCell(1,i).getContents();
                System.out.println("描述::"+miaoshu);
                //获取第三行的第i行信息
                String buzhou = sheet.getCell(2,i).getContents();
                System.out.println("步骤:"+buzhou);
                //获取第四行的第i行信息
                String yuqi = sheet.getCell(3,i).getContents();
                System.out.println("预期结果:"+yuqi);
                System.out.println("===========================");
                //将获取到每行的内容放到数组中
                String data[]={name,miaoshu,buzhou,yuqi};


                // 添加段落内容,也就是标题
                XWPFParagraph paragraph1 = document.createParagraph();
                paragraph1.setStyle("标题4");//设置标题2
                paragraph1.setFontAlignment(1);//字体对齐方式:1左对齐 2居中3右对齐
                XWPFRun run1 = paragraph1.createRun();
                run1.addBreak();//换行
                run1.setText(data[0]);//添加第一行段落文本


                // 添加表格 1行3列
                XWPFTable table = document.createTable(1,3);
                // 设置表格的行高和列宽
                table.setWidth(9000);// 设置列宽
                table.getRow(0).getCell(0).setWidth("3000");//设置获取第一行1列设置宽度
                table.getRow(0).getCell(1).setWidth("3000");//设置获取第一行2列设置宽度
                table.getRow(0).getCell(2).setWidth("3000");//设置获取第一行3列设置宽度
                int rowCount = 1;
                int colCount = 3;

                    for (int a = 0; a < rowCount; a++) {
                        XWPFTableRow row = table.getRow(a);

                        if (row == null) {
                            row = table.createRow();
                        }

                        for (int j = 0; j < colCount; j++) {

                            XWPFTableCell cell = row.getCell(j);

                            
                            if (cell == null) {
                                cell = row.addNewTableCell();
                            }
                            if (j==0){
                                XWPFParagraph cellPara = cell.getParagraphArray(0);
                                XWPFRun cellRun = cellPara.createRun();
                                cellRun.setText(data[1]);
                            }else if (j==1){
                                XWPFParagraph cellPara = cell.getParagraphArray(0);
                                XWPFRun cellRun = cellPara.createRun();
                                cellRun.setText(data[2]);
                            }else if (j==2){
                                XWPFParagraph cellPara = cell.getParagraphArray(0);
                                XWPFRun cellRun = cellPara.createRun();
                                cellRun.setText(data[3]);

                            }

                        }
                        }
//放测试截图
                //放测试用例代码,一张完美的自动化测试报告就产生了
                if (data[0].equals("修改商户费率-001")){
                    //TimesUntil.Screen();
                    test002();


                }else if (data[0].equals("修改商户费率-002")){
                    test002();

                }
                    }

        // 保存为Word文件
            FileOutputStream outStream = new FileOutputStream("output.docx");
            document.write(outStream);
            outStream.close();

            System.out.println("成功生成Word文件!");
        }catch (Exception e){
            e.printStackTrace();
        }
    }



  //这里是编写测试用例执行代码地方
    public static void test002() throws IOException, InvalidFormatException, InterruptedException {
        ChromeDriver driver = new ChromeDriver();
        System.setProperty("webdriver.chrome.bin","C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");
        System.setProperty("webdriver.chrome.driver","C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");

        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        String screen = Screen(driver);//调用方法,将截图的时间获取到,放入插入图片那里

//        创建一个段落对象。
        XWPFParagraph paragraph=document.createParagraph();
//        创建一个run。run具体是什么,我也不知道。但是run是这里面的最小单元了。
        XWPFRun run=paragraph.createRun();
//        插入图片,将screen时间截图的时间获取到,放入插入图片这里
        run.addPicture(new FileInputStream("E:/idear/idearxm/jiekou/test-output/images/"+screen+".png"),
                XWPFDocument.PICTURE_TYPE_PNG,
                screen+".png",
                Units.toEMU(400),
                Units.toEMU(200));
        }

        //截图放起来,并且返回一个截图时间
    public static String  Screen(ChromeDriver driver) throws IOException {

        File file=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //直接添加E:/idear/idearxm/jiekou,前面没有。。
        String times = times();
        FileUtils.copyFile(file,new File("E:/idear/idearxm/jiekou/test-output/images/"+times+".png"));
        driver.quit();
        return times;//把截图时间也返回去
    }

    //创建时间
    public static String times(){
        Date date = new Date();
        String format = String.format("%tF", date);
        String hour = String.format("%tH", date);
        String mintus = String.format("%tM", date);
        String secound = String.format("%tS", date);
        String t=format+hour+mintus+secound;
        return t;
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/319270.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

了解集群,以及集群是什么?

每个集群即一个独立运行的文档数据库&#xff0c;分片集群架构由路由&#xff08;mongos&#xff09;、配置&#xff08;config&#xff09;和分片&#xff08;shard&#xff09;组成。 数据读写请求经mongos分发&#xff0c;通过查询config信息&#xff0c;并行分配到相应sha…

C语言之字符串和指针

目录 用数组实现的字符串和用指针实现的字符串 █用数组实现的字符串str █用指针实现的字符串ptr 注意 用数组和指针实现字符串的不同点 字符串数组 用数组实现的字符串的数组——二维数组 用指针实现的字符串数组——指针数组 注意 字符串和指针有着紧密的联系&#…

力扣(105. 从前序与中序遍历序列构造二叉树,106. 从中序与后序遍历序列构造二叉树)

题目1链接 题目1&#xff1a; 思路&#xff1a;使用前序确定根&#xff0c;使用中序分左右子树&#xff0c;分治法。 难点&#xff1a;如何控制递归确定左右子树。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* T…

【STM32】FLASH闪存

1 FLASH闪存简介 本节所指STM32内部闪存&#xff0c;即下载程序的时候&#xff0c;程序存储的地方。&#xff08;非易失性&#xff09; STM32F1系列的FLASH包含程序存储器、系统存储器&#xff08;bootloader&#xff0c;不允许修改&#xff09;和选项字节三个部分&#xff0…

华西建筑智能化寻找志同道合的创业团队

我今天四十多了&#xff0c;之前也创过业&#xff0c;做软件开发系统集成的。 19年进入华西建筑装饰工程有限公司负责机电安装及弱电智能化版块。后公司成立建筑智能化事业部&#xff0c;我负责。现在想全身心打造施工企业项目管理平台&#xff0c;同时进军智慧康养领域。我想…

1.5矩阵元素的引用

通过下标来引用矩阵的元素 A(3, 2)表示A矩阵第3行第2列的元素。 >> arr [1,2,3;4,5,6]; >> arr(4, 5) 10arr 1 2 3 0 04 5 6 0 00 0 0 0 00 0 0 0 10>> 如果引用元素超过矩阵的大小将自…

Windows下面基于pgsql15的备份和恢复

一、基础备份 1.创建一个文件用来存储备份数据 2.备份指令 $CurrentDate Get-Date -Format "yyyy-MM-dd" $OutputDirectory "D:\PgsqData\pg_base\$CurrentDate" $Command "./pg_basebackup -h 127.0.0.1 -U postgres -Ft -Pv -Xf -z -Z5 -D $O…

Navicat 16 for MySQL:打造高效数据库开发管理工具

随着数据的快速增长和复杂性的提升&#xff0c;数据库成为了现代应用开发中不可或缺的一部分。而在MySQL数据库领域&#xff0c;Navicat 16 for MySQL作为一款强大的数据库开发管理工具&#xff0c;正受到越来越多开发者的青睐。 Navicat 16 for MySQL拥有丰富的功能和直观的界…

功能权限篇

文章目录 1. 如何设计一套权限系统1.1 目标1.2 权限模型1.2.1 模型一RBAC1.2.2 模型二ABAC 2.如何实现菜单的创建&#xff1f;2.1 表结构2.2 前端实现2.3 后端实现 3. 如何实现角色的创建&#xff1f;4.如何给用户分配权限 —— 将菜单赋予角色&#xff1f;5.如何给用户分配权限…

sqlilabs第五十三五十四关

Less-51(GET - GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 单引号闭合&#xff0c;和上一关一样堆叠注入解决 自动注入 和上一关一样 Less-52(GET - challenge - Union- 10 queries allowed -Variation 1) 手工注入 这一关开始后面的可以看…

设计模式之备忘录模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

QT上位机开发(函数运行时间分析)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件除了功能开发、debug之外&#xff0c;另外一个很重要的部分就是软件的优化和提高。这里面的优化&#xff0c;当然就是希望软件能够处理更多的数…

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…

在ubuntu平台上安装minecraft

一、获取minecraft启动器安装包 登陆minecraft官网Welcome to the Minecraft Official Site | Minecraft&#xff0c;使用已经购买minecraft的microsoft或者mojang账号登陆。 点击Download Launcher 对于ubuntu系统&#xff0c;使用点击debian版本 此后便会自动下载Minecraft.…

基于pyradiomics影像组学特征提取

基于pyradiomics影像组学特征提取 特征提取&#xff1a;1 pyradiomics的使用&#xff1a;1.1&#xff0c;在python环境下安装pyradiomics:1.2,设置特征提取器&#xff0c;获得想要特征&#xff1a;1.2.1 图像类型1.2.2 目标特征设置1.2.3 特征提取器设置 2 代码示例;参考&#…

关于提高IDEA运行速度的说明

1.作者IDEA软件版本和计算机内存 Ultimate 2022.1.2版 2.修改配置提高IDEA运行速度的误区 很多文章会教调内存&#xff0c;但大多是让你调高堆内存&#xff0c;-Xms -Xmx 是最小堆内存和最大堆内存。堆内存越高&#xff0c;说明堆区可放入新对象的数量越多&#xff0c;由于…

关闭免费版pycharm社区版双击shift时出现的搜索框

Pycharm 在双击 shift 的时候总是弹出搜索框&#xff0c;但作为中国玩家&#xff0c;经常需要双击 shift 循环切换中英文。这就很困恼。 下面就解决这个问题。单独关闭双击shift的功能。 步骤 1.左上角 File -> Settings 2. 如图&#xff0c;输入‘advan’ 找到高级设置&…

分享从零开始学习网络设备配置--任务4.4 使用动态路由OSPFv3实现网络连通

任务描述 由于RIPng不适用于复杂的网络&#xff0c;考虑到公司的未来发展&#xff0c;需要不断扩大网络规模。某公司在企业网络升级时&#xff0c;选择 OSPFv3路由协议实现网络连通&#xff0c;降低网络拓扑变化引发的人工维护工作量并加快网络收敛的速度。 公司内部的所有设…

Leetcode26——引出c++ vector中erase()的内部原理

erase是对数组中某个元素进行删除的操作&#xff0c;实际的时间复杂度为O(n) 预备知识 数组在内存中是连续存储的&#xff0c;删除某个位置的时候不能直接删除&#xff0c;只能用后序的元素覆盖 以nums数组为例&#xff0c;target为需要删除的目标数据 方法&#xff1a; ①…

Windows无法登录管理路由器故障排查

问题描述 家里的路由器使用拨号上网&#xff0c;路由器DHCP分发IP的范围是192.168.1.0/24。默认使用192.168.1.1管理路由器。然后拨号上网成功后&#xff0c;修改了私网IP的分发范围&#xff1a;192.168.5.1-192.168.5.10。为了防止有人蹭网&#xff0c;只分配的10个IP地址。修…