一、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. 11个不常被提及的JavaScript小技巧

    这次我们主要来分享11个在日常教程中不常被提及的JavaScript小技巧,他们往往在我们的日常工作中经常出现,但是我们又很容易忽略. 1.过滤唯一值 Set类型是在 ES6中新增的,它类似于数组,但 ...

  2. Android之Material Dialogs详解

    文章大纲 一.什么是Material Dialogs二.Material Dialogs实战三.项目源码下载   一.什么是Material Dialogs   Material Dialogs是一个 ...

  3. PHP Socket编程(转)

    [PHPsocket编程专题(理论篇)]初步理解TCP/IP.Http.Socket.md [PHPsocket编程专题(实战篇①)]php-socket通信演示 [PHPsocket编程专题(实战篇 ...

  4. window系统下如何查看so库的信息

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10458388.html  linux系统下能够直接用命令行查看so库的信息,但是window系统下咋办好 ...

  5. STM32的IAP实现

    STM32的IAP实现 2014年07月28日 16:31:06 Stylesen 阅读数:556   IAP,全称是“In-Application Programming”,中文解释为“在程序中编程 ...

  6. .Net MVC+NPOI实现下载自定义的Word文档

    我们浏览很多网站时都会看到下载文件的功能(图片.word文档等),好巧不巧的是贫道近日也遇到了这个问题,于是写一篇博客记录一下. 技术点:MVC.NPOI.Form表单. 具体如何实现,待贫道喝一口水 ...

  7. Flask python初期九九乘法表

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

  8. AI - TensorFlow - 张量(Tensor)

    张量(Tensor) 在Tensorflow中,变量统一称作张量(Tensor). 张量(Tensor)是任意维度的数组. 0阶张量:纯量或标量 (scalar), 也就是一个数值,例如,\'Howd ...

  9. 从一道面试题探究 Integer 的实现

    记得有次面试,面试官问我: 如何写一个方法交换两个 Integer 类型的值? 当时心里一惊,这是把我当小白了呀!交换两个数的值还不容易么,最简单的直接搞一个中间变量,然后就可以交换了… … 面试官随 ...

  10. 网络协议 3 - 从物理层到 MAC 层

        在上一篇博文中,我们见证了 IP 地址的诞生,机器一旦有了 IP,就可以在网络的环境里和其他的机器展开沟通了.     今天,我们来认识下 物理层 和 MAC 层.     日常生活中,身为 ...