在C#中使用Selenium Webdriver的当前窗口截图

时间:2013-09-30 22:26:09

标签: c# selenium selenium-webdriver

我试图在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窗口,然后弹出错误。我的目标是获取现有运行脚本的屏幕截图。我应该做些什么改变才能实现这一目标?

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

3 个答案:

答案 0 :(得分:3)

使用Selenium Webdriver使用C#.Net,NUnit捕获ScreenShot。

// 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;
        }
    }
}

答案 1 :(得分: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:\ root上保存文件时,您可能还会遇到权限问题,因此请将屏幕截图保存在子目录中。

以下代码应该有效:

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

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

答案 2 :(得分: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);
}