用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代码

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

  1. DEVOPS技术实践_23:判断文件下载成功作为执行条件

    在实际生产中,我们经常会需要通过判断一个结果作为一个条件去执行另一个内容,比如判断一个文件是否存在,判官一个命令是否执行成功等等 现在我们选择其中一个场景进行实验,当某个目录下存在,则执行操作 1. ...

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

    from: http://blog.csdn.NET/zhtsuc/article/details/2938614 关于C++ fstream的一个容易使用出错的地方 关于c++ 中 文件流的两个类, ...

  3. socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto

    socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ...

  4. 第8课 Thinkphp 5 update判断修改成功与失败 Thinkphp5商城第四季

    没有修改数据时,判断修改成功与失败 如果提交时的数据库里之前的数据一样(即没有修改就提交表单),会返回0,此时 判断修改成功用$save !== false 这样才会提示修改成功. $save=db( ...

  5. LODOP判断没成功发送任务-重打一下

    一般情况下打印执行了PRINT()或PRINTA(),就会加入打印机队列,如果打印机脱机,就会在队列里排队,当打印机连上并取消脱机的时候,正在排队的任务就会打出,所以一般建议用是否加入队列来判断打印成 ...

  6. xcopy拷贝判断是否成功 robocopy排除子目录

    xcopy \\172.16.22.65\server\*.* C:\Inetpub\wwwroot\Server /h /r /s /yif %errorlevel% neq 0 echo copy ...

  7. Request 获取根据页面获取用户输入判断登陆成功或者失败

    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.serv ...

  8. selenium 校验文件下载成功

    转自: http://www.seleniumeasy.com/selenium-tutorials/verify-file-after-downloading-using-webdriver-jav ...

  9. node安装express时找不到pakage.json文件;判断安装成功?

    正常安装命令:express install express --save 报错如下:no such file or directory,open 'C:\Users\Administrator\pa ...

随机推荐

  1. java数据结构之(堆)栈

    (堆)栈概述栈是一种特殊的线性表,是操作受限的线性表栈的定义和特点•定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈•特点:先进后出(FILO)或后进先出(L ...

  2. C/C++ -- Gui编程 -- Qt库的使用 -- Qt5试用

    1.头文件<QtGui>变成了<QtWidgets> 相应<QtGui/***>变成了<QtWidgets/***> 2.QTextCodec::set ...

  3. 自然语言处理--Word2vec(一)

    一.自然语言处理与深度学习 自然语言处理应用 深度学习模型                       为什么需要用深度学习来处理呢 二.语言模型 1.语言模型实例: 机器翻译 拼写纠错        ...

  4. @RestController和@Controller注解的区别

    @RestController是@ResponseBody和@Controller注解的结合,当你return一个页面时,使用@Controller注解返回的是相应页面,使用@RestControll ...

  5. Linux网络子系统

    再Linux的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Linux系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作.下面我们揭示Linux网络子系统的秘密 sockfs ...

  6. firefox native extension -- har export trigger

    这两天想学习下如何在运行自动化脚本时去capture http traffic,google看到一篇博客介绍用browser mob proxy或者firefox+firebug+netexport, ...

  7. 记录一次读取memcache缓存的优化

    我们是用mvc做web,大部分数据都用memcache做了缓存 有2台memcache缓存服务器 数据并不大. 某页面响应较慢,大概在4s左右. 页面本身很简单只是显示一个表单. 但是layout相对 ...

  8. 哪个类可用于处理 Unicode?

    A. InputStreanReader的构造函数: InputStreamReader(InputStream in)          创建一个使用默认字符集的 InputStreamReader ...

  9. ajax对服务器返回xml的处理过程

    客户端:<script type="text/javascript">    function getXml(){        var name = $(" ...

  10. Spring学习手札(四)谈谈Spring Bean的生命周期及作用域

    在Spring中,那些组成应用程序的主体以及由Spring IoC容器所管理的对象,被称之为Bean.Bean与应用程序中其他对象(比如自己创建类)的区别就是,Bean是由IoC容器创建于销毁的.在S ...