簡體   English   中英

在C#中使用Selenium Webdriver的當前窗口截圖

[英]Current window screenshot using Selenium Webdriver in C#

我正在嘗試獲取在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-有沒有一種方法可以在執行測試時截取屏幕截圖而不初始化新驅動程序?

使用帶有C#.Net,NUnit的Selenium Webdriver捕獲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;
        }
    }
}

對於找不到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:請始終張貼您看到的任何錯誤的錯誤詳細信息,以幫助我們更好地為您提供幫助。

這是我的解決方案。 我必須創建一個新的顯式驅動程序頁面,並在該頁面中添加屏幕截圖方法。 下面是我添加的方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM