2013-09-30 199 views
0

我想在C#中的Selenium WebDriver中執行一個測試的屏幕截圖。我正在使用Gallio來運行我的測試。下面是我的截圖代碼:在C#中使用Selenium Webdriver的當前窗口屏幕截圖#

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窗口,然後彈出一個錯誤。我的目標是採取現有運行腳本的屏幕截圖。我應該做些什麼才能做到這一點?

附: - 有沒有一種方法可以在執行測試的同時拍攝屏幕截圖,而無需初始化新的驅動程序?

+0

您運行的是哪個版本的Chrome?你正在運行什麼版本的ChromeDriver?在構建測試之後發佈「Debug」文件夾的屏幕截圖。 – Arran

回答

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:始終張貼,你看到我們可以幫助你更好的任何錯誤的錯誤的詳細信息。

+0

我得到的錯誤是「文件」C:\ SeTests \ bin \ Debug \ chromedriver.exe不存在。該驅動程序可以在http://code.google.com/p/chromium/downloads/list上下載「.. – user2434600

+0

問題是我在一個大型框架上工作,頁面在一個類中被初始化,執行發生在另一個類,我需要的是發生執行的頁面,selenium應該存儲屏幕截圖。 – user2434600

+0

總是很好,以獲取錯誤消息的詳細信息:)爲此,您需要將chromedriver.exe文件複製到您的輸出目錄。已經更新了答案 – Faiz

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

捕獲使用硒的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; 
     } 
    } 
} 
+0

'''ImageFormat'''現在已被棄用,而不是使用'''ScreenshotImageFormat'''。 – TotPeRo