TestNG 判断文件下载成功

用WatchService写一个方法放在onTestStart()方法里监听文件夹的变化. 但是判断下载成功还需要写一个方法, 用来判断什么时候文件从.xlsx.rcdownload改成.xlsx才行 (TODO).

package com.tcemo.ui.bean;

import static com.tcemo.ui.bean.ScreenShotOnFailure.SCREEN_SHOT_NAME;
import static com.tcemo.ui.bean.ScreenShotOnFailure.SCREEN_SHOT_PATH;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

public class TestngRetryListener implements ITestListener{
    private WatchService watchService;
    public void onTestFailure(ITestResult result) {
        try {
            ScreenShotOnFailure.takeScreenShot();
            System.out.println(result.getMethod().getMethodName()+"failed, the screenshot saved in "
                    + SCREEN_SHOT_PATH +" screenshot name: "
                    + SCREEN_SHOT_NAME);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onTestStart(ITestResult result) {
        // TODO Auto-generated method stub
         // 需要监听的文件目录(只能监听目录)
        String path = "E:\\smartesterlocal\\download";

        try {
            watchService = FileSystems.getDefault().newWatchService();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        Path p = Paths.get(path);
        try {
            p.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY,
                    StandardWatchEventKinds.ENTRY_DELETE,
                    StandardWatchEventKinds.ENTRY_CREATE);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }  

        Thread thread = new Thread(() -> {
            try {
                while(true){
                    WatchKey watchKey = watchService.take();
                    List<WatchEvent<?>> watchEvents = watchKey.pollEvents();
                    for(WatchEvent<?> event : watchEvents){
                        //TODO 根据事件类型采取不同的操作。。。。。。。
                        System.out.println("["+path+"/"+event.context()+"]文件发生了["+event.kind()+"]事件");
                    }
                    watchKey.reset();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        thread.setDaemon(false);
        thread.start();

        // 增加jvm关闭的钩子来关闭监听
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            try {
                watchService.close();
            } catch (Exception e) {
            }
        }));
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTestSkipped(ITestResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStart(ITestContext context) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onFinish(ITestContext context) {
        // TODO Auto-generated method stub

    }
}

/**
*@author: Created by QianHJ
*@date:   2018年4月20日
*@problem:
*@answer:
*@action:
*/

已完成的监听方法

package com.tcemo.ui.bean;

import static com.tcemo.ui.bean.AntBrowser.browser;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;

public class ScreenShotOnFailure {
    public static final String SCREEN_SHOT_PATH = "test-output/screen-shot";
    public static String SCREEN_SHOT_NAME = null;

    public static void takeScreenShot() throws IOException {
        File screenshotDir = new File(SCREEN_SHOT_PATH);
        if(!screenshotDir.exists()) {
            screenshotDir.mkdirs();
        }

        SimpleDateFormat smf = new SimpleDateFormat("yyyyMMddHHmmss");
        SCREEN_SHOT_NAME = String.valueOf(smf.format(new Date())) + ".jpg";
        FileUtils.copyFile(((TakesScreenshot)browser.getWebDriver()).getScreenshotAs(OutputType.FILE),
                new File(SCREEN_SHOT_PATH + "/"+ SCREEN_SHOT_NAME));
    }
}

/**
*@author: Created by QianHJ
*@date:   2018年4月20日
*@problem:
*@answer:
*@action:
*/

Screenshot代码

原文地址:https://www.cnblogs.com/cheese320/p/9152583.html

时间: 2024-10-30 04:21:25

TestNG 判断文件下载成功的相关文章

用函数实现登陆功能(三次机会),然后在主函数中根据调用后的结果判断 登陆成功与否。

/*3.用函数实现登陆功能(三次机会),然后在主函数中根据调用后的结果判断登陆成功与否.*/#include <string.h>int numb(char use[] ,char password[] ){ if((strcmp(use,"zhouyi")==0)&&(strcmp(password,"nb")==0)) { return 1; } else { return 0; } } #include <stdio.h>

fstream 中判断是否成功打开文件

from: http://blog.csdn.NET/zhtsuc/article/details/2938614 关于C++ fstream的一个容易使用出错的地方 关于c++ 中 文件流的两个类,ifstream 和ofstream,大家也许并不陌生. 其负责c++的文件输入流 和 文件输出流.基本上所以语言都会提供类似的文件输入流 和文件输出流类. 但当大家学习了Java,或者c#后,大家就很容易用错这个类,把三种语言混淆. 在java 和 c#中,关于打开输入文件流,或者输出流,都是通过

我纠结的sql返回受影响行数与判断是否成功的问题

比如:deleteSQLWhere="delete TableA where ID in(1,2,3,4,5)"; try { int i = sqlHelper.ExecuteNonQuery(CommandType.Text, deleteSQLWhere); if (i > 0) { return true; } } catch (Exception ex) { LogMsg.WriteLog(ex.ToString()); return false; } return f

判断文件下载完全

1,使用MD5,本地文件下载完后去文件的md5值与服务器的该文件md5进行比对,一致证明下载完全. 2,比较文件的size,文件长度,下载完成取下File.length,与服务器的文件长度比对,一致则下载完全. 3,文件命名法,开始下载时,把文件命名为宜别名如xxx.tmp,下载完成后再把文件名称修改过来.只要正式的文件名存在,则是下载完全的. http://blog.csdn.net/zhiying201039/article/details/8653130

selenium 校验文件下载成功

转自: http://www.seleniumeasy.com/selenium-tutorials/verify-file-after-downloading-using-webdriver-java It is very important to verify if the file is downloaded successful or not. Most of the cases we just concentrate on clicking the downloaded button.

怎么判断域名解析成功?

我们在注册一个域名之后,如果要使用这个域名,就需要对这个域名进行解析.那么,在域名管理面板中对域名进行解析操作之后,要怎么知道域名是否解析成功?这里提供两种方法:域名解析成功一.直接ping网站域名.打开操作系统中的运行,输入cmd,在打开的窗口中输入ping www.cnaaa.com(ping空格域名) ,将其中的域名换成自己的域名即可,然后回车,查看返回信息.如果返回的信息是time out,说明域名解析还没有生效,如果返回的信息是网站所在服务器IP和响应时间,则说明域名已经解析成功.二.

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

接口测试(java+testng+ant+jenkins)第二篇testng

1.testng是什么? 是一种测试框架,可以更方便的执行测试用例. 2.如何安装? Eclipse--Help--Install New Software work with输入:http://beust.com/eclipse 等待几秒钟,,选中Testng,一路next window--preferences 能看到testng,就是安装成功了. 3.项目右键--Build Path --Add libraries--TestNG--finish 4.在包com.lx上,右键--new--

Service实现文件下载

首先在Activity中声明Intent对象,启动Service: //生成Intent对象 Intent intent = new Intent(); //将文件名对象存入到intent对象当中 intent.putExtra("name", filename); intent.setClass(this, DownloadService.class); //启动Service startService(intent); DownloadService定义如下: public cla