0

我正在尝试截取在 C# 中的 Selenium WebDriver 中执行的测试的屏幕截图。我正在使用 Gallio 运行我的测试。下面是我的截图代码:

public void TakeScreenshot(IWebDriver driver, string saveLocation)
{
    ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;
    Screenshot screenshot = screenshotDriver.GetScreenshot();
    screenshot.SaveAsFile(saveLocation, ImageFormat.Png);
}

我在测试中使用以下代码截取屏幕截图:

IWebDriver driver = new ChromeDriver();
TakeScreenshot(driver, @"C:\screenshot.png");

问题是在执行时,该语句会打开一个新的 chrome 窗口,然后弹出一个错误。我的目标是截取现有运行脚本的屏幕截图。我应该做哪些改变来实现这一点?

PS - 有没有办法在不初始化新驱动程序的情况下执行测试时截取屏幕截图?

4

3 回答 3

3

使用 Selenium Webdriver 和 C#.Net、NUnit 捕获屏幕截图。

// 1- Add a reference of System.Drawing in your solution/project.
// 2- use system.Drawing.Imaging namespace in your test.

// Here I am capturing the screen shot of Facebook Home page.

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using NUnit.Framework;
using System.IO;
using System.Collections;
using System.Drawing.Imaging;

namespace FacebookRegistrationUsingC_Sharp
{
    [TestFixture]
    public class ScreenShot
    {
        IWebDriver driver = null;
        IWebElement element = null;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver("G:\\Selenium_Csharp\\Jar\\chromedriver_win32");           
            driver.Navigate().GoToUrl("https://www.Facebook.com");
            driver.Manage().Window.Maximize();

        }
        [Test]
        public void TestScreenShot()
        {           

            Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
            ss.SaveAsFile("e:\\pande", System.Drawing.Imaging.ImageFormat.Jpeg);
        }

        [TearDown]
        public void TearDown()
        {
            driver = null;
            element = null;
        }
    }
}
于 2015-06-04T10:57:57.537 回答
0

这是我的解决方案。我必须创建一个新的、显式的驱动程序页面并在该页面中添加屏幕截图方法。以下是我添加的方法:

public Screenshot GetScreenshot()
{
    // Get the screenshot as base64. 
    Response screenshotResponse = this.Execute(DriverCommand.Screenshot, null);
    string base64 = screenshotResponse.Value.ToString();

    // ... and convert it. 
    return new Screenshot(base64);
}
于 2013-10-02T20:25:43.857 回答
0

对于找不到 chromedriver.exe 的错误,请将 chromedriver.exe 文件添加到您的 Visual Studio 解决方案中,并在属性窗口中将“复制到输出目录”设置为“始终复制”。

您需要在截屏之前导航到一个页面 - 如果 chrome 中的默认页面为空白,那么您将看到错误

unknown error: cannot take screenshot
from unknown error: Cannot access contents of url "about:blank". Extension manifest must request permission to access this host.

如果没有,在 C:\ 根目录下保存文件时,您可能还会遇到权限问题,因此请将屏幕截图保存在子目录中。

以下代码应该可以工作:

        IWebDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl("http://www.google.com");
        TakeScreenshot(driver, @"C:\devtest\screenshot.png");

PS:始终发布您看到的任何错误的错误详细信息,以帮助我们更好地为您提供帮助。

于 2013-10-01T00:48:05.560 回答