一、NuGet安装Selenium.Chrome.WebDriver和Selenium.WebDriver

二、将packages\Selenium.Chrome.WebDriver.2.45\driver下的chromedriver.exe文件,复制到程序的bin目录下

三、截图工具类

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.ComponentModel.Design;
using System.Drawing;
using System.IO;
using System.Threading; namespace Comon
{
public class ScreenshotUtil : IDisposable
{
/// <summary>
/// 锁
/// </summary>
private static readonly object LockObject = new object(); private static IWebDriver _webDriver; public ScreenshotUtil(string url, int windowWidth, int windowHeight)
{
if (_webDriver == null)
{
lock (LockObject)
{
if (_webDriver == null)
{
ChromeOptions options = new ChromeOptions();
options.AddArgument($"--window-size={windowWidth},{windowHeight}");
options.AddArgument("start-fullscreen");
_webDriver = new ChromeDriver(options);
}
}
}
if (_webDriver.Url != url)
{
_webDriver.Navigate().GoToUrl(url);
}
} public void Dispose()
{
_webDriver?.Quit();
_webDriver = null;
} public static void Quit()
{
lock (LockObject)
{
_webDriver?.Quit();
_webDriver = null;
}
} public void ShotThenSave(string targetFileName, TimeSpan waitTime, Func<IWebDriver, IWebElement> condition)
{
if (!File.Exists(targetFileName))
{
lock (LockObject)
{
if (string.IsNullOrWhiteSpace(targetFileName))
{
throw new ArgumentNullException(nameof(targetFileName));
}
if (condition != null)
{
WebDriverWait webDriverWait = new WebDriverWait(_webDriver, waitTime);
webDriverWait.Until(condition);
} Thread.Sleep(); ITakesScreenshot screenshotDriver = (ITakesScreenshot)_webDriver;
if (screenshotDriver != null)
{
Screenshot screenshot = screenshotDriver.GetScreenshot();
string directoryName = Path.GetDirectoryName(targetFileName);
if (directoryName == null)
{
throw new ArgumentException(nameof(targetFileName));
}
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
ClearOldImage(directoryName); screenshot.SaveAsFile(targetFileName);
}
}
}
} private static void ClearOldImage(string directoryName)
{
DirectoryInfo folder = new DirectoryInfo(directoryName);
FileInfo[] existFileInfos = folder.GetFiles();
if (existFileInfos.Length > )
{
foreach (var file in existFileInfos)
{
if (file.CreationTime < DateTime.Today)
{
try
{
file.Delete();
}
catch (Exception e)
{
LogUtil.LogException(e);
} }
}
}
}
}
}

ChromeDriver截图的更多相关文章

  1. java实现网页截图

    使用工具 java+selenium+phantomjs /chromedriver /firefox 1.分别是 phantomjs插件 google截图插件 和 firefox火狐浏览器截图插件2 ...

  2. selenium web driver 实现截图功能

    在验证某些关键步骤时,需要截个图来记录一下当时的情况 Webdriver截图时,需要引入 import java.io.File; import java.io.IOException; import ...

  3. selenium截图对比校验方法

    /**对比图片进行校验是否成功**/package com.allin.pc;import java.awt.image.BufferedImage;import java.awt.image.Dat ...

  4. [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图

    前两篇文章介绍了安装,此篇文章算是一个简单的进阶应用吧!它是在Windows下通过Selenium+Python实现自动访问Firefox和Chrome并实现搜索截图的功能.        [Pyth ...

  5. selenium遇到异常自动截图

    最近要在框架中添加case失败时,要自动截图,主要又两种方式,思想都是在抛异常的时候,捕获到异常,并作页面截图处理.今天坐下总结. 一.第一种方式,重写onException方法 只针对webdriv ...

  6. Selenium2学习-035-WebUI自动化实战实例-033-页面快照截图应用之三 -- 区域截图(专业版)

    之前有写过两篇博文讲述了 WebUI 自动化测试脚本中常用的截图方法,敬请参阅如下所示链接: 浏览器显示区域截图 浏览器指定区域截图 那么当需要截取的区域不在浏览器显示窗口范围之内时,之前的方法显然无 ...

  7. Selenium2学习-033-WebUI自动化实战实例-031-页面快照截图应用之二 -- 区域截图

    我在之前的文章中曾给出浏览器显示区域截图的方法,具体请参阅 .或许,有些小主已经想到了,每次都获取整个显示区域的截图存储,那么经过一段时间后,所使用的图片服务器的容量将会受到极大的挑战,尤其是在产品需 ...

  8. selenium 利用testNG对异常进行自动截图

    哈哈哈,很久没写博客了,懒了. 因为一些原因最近需要把监听事件重新整理一下,开始没细想,直接copy网上的,其实结果发现报错很多,或者是达不到效果,然后把之前的代码翻出来,仔细看了一下.下面给一些需要 ...

  9. 关于在selenium 中 webdriver 截图操作

    package prictce; import java.io.File; import java.io.IOException; import org.junit.After; import org ...

随机推荐

  1. 前端vue系列-起始篇 vue的基本认知

    hi,大家伙,我是佛系大大,很高兴与你们一起沟通,学习,进步. 很久不更新博客了,现在回来再写博客,尽然是有些怀念的感觉,幸福的感觉.因为写博客,内心会很宁静,沉浸在自己的世界中,是很幸福的一件事.当 ...

  2. Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

  3. 好代码是管出来的——使用Jenkins搭建CI服务器

    Jenkins是一个开源的跨平台的CI工具,它可以部署在Windows.Linux等平台上,并且Jenkins提供了非常丰富的插件来帮助完成编译.测试.部署等工作. 本文将介绍在Windows平台上使 ...

  4. 【Teradata SQL】一个字段为空即取另外一个字段(连续取4个字段)-case when

    目标:如果col1为空则取col2的值,如果col2也为空则取col3的值,如果col3还为则取col4的值,如果四个字段均为空则取默认值 1.数据准备 create multiset table t ...

  5. java使用SSH连接Linux系统

    SSH连接linux系统使我们在开发项目中常用到的,现在留下来,做个记录 package com.log; import java.io.BufferedReader; import java.io. ...

  6. mapbox.gl源码解析——基本架构与数据渲染流程

    加载地图 Mapbox GL JS是一个JavaScript库,使用WebGL渲染交互式矢量瓦片地图和栅格瓦片地图.WebGL渲染意味着高性能,MapboxGL能够渲染大量的地图要素,拥有流畅的交互以 ...

  7. Hadoop系列006-HDFS概念及命令行操作

    本人微信公众号,欢迎扫码关注! HDFS概念及命令行操作 一.HDFS概念 1.1 概念 HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件:其次,它是分布式的,由很多服务器联合起来实现其 ...

  8. AI - TensorFlow - 过拟合(Overfitting)

    过拟合 过拟合(overfitting,过度学习,过度拟合): 过度准确地拟合了历史数据(精确的区分了所有的训练数据),而对新数据适应性较差,预测时会有很大误差. 过拟合是机器学习中常见的问题,解决方 ...

  9. python-图像处理之PIL库的使用

    1.先看一段英文代码The Python Imaging Library (PIL) adds image processing capabilities to your Python interpr ...

  10. height:auto 火狐没边框

    css高度设置为auto后,设置的边框 ie正常 火狐 就没有边框了,解决方法 之前是这样写的 #right_bottom { width: 790px; height:auto; border: # ...