隐藏

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

发布:2020/9/25 11:51:56作者:管理员 来源:本站 浏览次数:1109

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

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

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

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

问题是在执行时,该语句将打开一个新的chrome窗口,然后弹出一个错误。 我的目的是拍摄现有运行脚本的屏幕截图。 我应该做些什么改变才能做到这一点?

附言 -是否可以在执行测试时截取屏幕截图而不初始化新驱动程序?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 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
2
3
4
5
6
7
8
9
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);
}

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

您需要先导航到页面然后再截屏-如果chrome中的默认页面为空白,那么您将看到错误

1
2
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:根目录时,您可能还会遇到权限问题,因此请将屏幕快照保存在子目录中。

下面的代码应该工作:

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