一、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. Yii2设计模式——工厂方法模式

    应用举例 yii\db\Schema抽象类中: //获取数据表元数据 public function getTableSchema($name, $refresh = false) { if (arr ...

  2. 去除inline-block元素间的间距

    一.现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或者空格隔开的情况下会有间距,这是因为浏览器在解析时,会将换行等读取成一个空格导致. 二.移出空格的方法 ① 我们可以去掉元 ...

  3. HTML 练习滑动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. ArcGIS Engine 笔记-控件类型

    控件 MapControl Map         地图控件 PageLayouControl      布局地图控件 TOCControl                目录控件 ToolbarCo ...

  5. Dynamics Business Central-如何配置VS Code连接BC环境

    最近在研究Business Central,也就是以前的Dynamics NAV,需要配置Visual Studio Code连接BC环境,以下是配置的具体步骤. 1. VS Code下载,这个不多说 ...

  6. sql的基本语法

    一. 数据库 1.查询服务器上有哪些数据库 show databases; 2.新建数据库 create database TestSqlSugar; 3.进入数据库 use TestSqlSugar ...

  7. Flask python初期九九乘法表

    from  flask import Flask    #导入 app = Flask(__name__) @app.route('/') def index(): res=" " ...

  8. .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

  9. GetTypes Unable to load one or more of the requested types

    重新生成项目,更新反射类的dll文件

  10. 强化学习(十)Double DQN (DDQN)

    在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...