在使用Selenium进行Web测试时,获取当前装载页面的屏幕快照是有益的。下面以C#为例给出获取屏幕快照的方法。
1、定义实用静态帮助器类和扩展方法
using System;
using OpenQA.Selenium;
using System.Drawing.Imaging;
namespace SeleniumTest
{
public static class SeleniumUtils
{
/// <summary>
/// 以指定的图像格式存储当前加载页面的屏幕快照到指定文件,如果文件已经存在则覆盖此文件
/// </summary>
/// <param name="driver">IWebDriver实例,如FirefoxDriver或InternetExplorerDriver</param>
/// <param name="imageFilePath">保存快照的完整路径和文件名称</param>
/// <param name="imageFormat">保存图像的格式</param>
public static void SaveScreenShot(this IWebDriver driver, string imageFilePath, ImageFormat imageFormat)
{
(driver as ITakesScreenshot).GetScreenshot().SaveAsFile(imageFilePath, imageFormat);
}
}
}
2、使用示例:
// IWebDriver driver = new FirefoxDriver();
// 使用静态方法调用
SeleniumUtils.SaveScreenShot(driver, "C:\\SeleniumTestImages\\YourImageName.jpg", ImageFormat.Jpeg);
或
// 使用扩展方法调用
driver.SaveScreenShot("C:\\SeleniumTestImages\\YourImageName.jpg", ImageFormat.Jpeg);
注释:
1、帮助器方法的定义方式是灵活的,是否使用也不是必须的
2、一般不需要保存所有测试过程屏幕的快照,仅在Assert断言失败时保存屏幕快照,因此可以
try
{
// 使用测试框架,如NUnit的断言方法,如果失败将抛出异常
Assert.AreEqual(excepted, actual);
}
catch
{
driver.SaveScreenShot("C:\\SeleniumTestImages\\YourImageName.jpg", ImageFormat.Jpeg);
}