2010-07-27 5 views
38

Ho bisogno di un modo per fare screenshot dei miei test funzionali. In questo momento sto usando Selenium 2 con associazioni C#. Praticamente voglio fare uno screenshot alla fine del test per assicurarmi che venga visualizzata la pagina desiderata. Ci sono degli strumenti particolari che voi conoscete che posso incorporare nel mio codice C# che attiverà uno screenshot? Non sono riuscito a trovare una soluzione di Selenium 2 integrata (senza guardarla).Il modo migliore per fare screenshot di test in Selenium 2?

risposta

55

Per fare screenshot in Selenio 2 è necessario eseguire le seguenti operazioni

driver = new FireFoxDriver(); // Should work in other Browser Drivers 
driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk"); 
Screenshot ss = ((ITakesScreenshot) driver).GetScreenshot(); 

//Use it as you want now 
string screenshot = ss.AsBase64EncodedString; 
byte[] screenshotAsByteArray = ss.AsByteArray; 
ss.SaveAsFile("filename", ImageFormat.Png); //use any of the built in image formating 
ss.ToString();//same as string screenshot = ss.AsBase64EncodedString; 

Tale codice dovrebbe funzionare, come ho subito provato in IronPython Repl. Vedere il codice di IronPython sotto

import clr 
clr.AddReference("WebDriver.Common.dll") 
clr.AddReference("WebDriver.Firefox.dll") 
from OpenQA.Selenium import * 
from OpenQA.Selenium.Firefox import * 
driver = FirefoxDriver() 
driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk") 
s = driver.GetScreenshot() 
s.AsBaseEncodedString 
# HUGE string appears in the REPL 
+0

Grazie! Quindi ho la stringa per il nome del file "C: \\ .. path .. \\ screen.png", ma non appare mai lì. – James

+1

Sostituisci questo codice sopra: "Screenshot ss = driver.GetScreenshot();" ... con questo codice: "Screenshot ss = ((ITakesScreenshot) webDriver) .GetScreenshot();" – MacGyver

+1

Se si utilizza .NET 4.0 e Selenium .NET 4.0 driver, dovrai aggiungere esplicitamente un riferimento a System.Drawing (Aggiungi riferimento> scheda .NET> System.Drawing) se hai creato il tuo progetto di libreria di classi in Visual Studio 2010 ... quindi chiama questo per salvare il file da qualche parte: "ss.SaveAsFile (@" C: \ ss.png ", System.Drawing.Imaging.ImageFormat.Png);" – MacGyver

-1

Usando il selenio c'erano due chiamate che conoscevo: captureEntirePageScreenshot e captureScreenshot. Potresti voler esaminare quelle chiamate per vedere se riusciranno a ottenere ciò che cerchi.

+5

quelle chiamate sono 1 specifico di selenio 1 – AutomatedTester

+1

la mia risposta di seguito mostra come farlo con selenio 2. P. Non ti ho votato – AutomatedTester

10

Non so se è importante, ma ho finito per dover lanciare il conducente quando scrivevo in C#.

qualcosa di simile:

 
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot(); 
26
var driver = new InternetExplorerDriver(); 
driver.Navigate().GoToUrl("http://www.google.com"); 
var ss = driver.GetScreenshot(); 
ss.SaveAsFile("ss.png", System.Drawing.Imaging.ImageFormat.Png); 
+0

rapidamente e al punto +1 – craastad

+0

@Toolkit '' 'ImageFormat''' ora è deprecato usare' '' ScreenshotImageFormat'''. – TotPeRo

2
  1. Aggiungere un riferimento di System.Drawing nella soluzione/progetto.
  2. Utilizzare lo spazio dei nomi System.Drawing.Imaging nel test.

Qui sto catturando la schermata della home page di Facebook.

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

Utilizzare System.Drawing.Imaging riferimento. Il seguente codice può essere utilizzato per scattare screenshot.

IWebDriver driver = new FirefoxDriver(); 
ITakesScreenshot screenshotDriver = driver as ITakesScreenshot; 
Screenshot screenshot = screenshotDriver.GetScreenshot(); 
String fp = "D:\\" + "snapshot" + "_"+ DateTime.Now.ToString("dd_MMMM_hh_mm_ss_tt") + ".png"; 
screenshot.SaveAsFile(fp, ImageFormat.Png); 

Note: timestamp ha due vantaggi: 1) si arriva a conoscere il DateTime perfetta quando è preso screenshot. 2) La funzione SaveAsFile sovrascrive il file esistente. Quindi, DateTime può aiutare per la creazione di file diversi.

1
public void TakeScreenshot(string saveLocation) { 
     var location = GetPath() + _name + "\\" + saveLocation + ".png"; 
     var ssdriver = _driver as ITakesScreenshot; 
     var screenshot = ssdriver.GetScreenshot(); 
     screenshot.SaveAsFile(location, ImageFormat.Png); 
    } 

Questo codice vi aiuterà a prendere screenshot

4

Basta usare il metodo di estensione TakeScreenshot() in una riga di codice.

IWebDriver driver = new InternetExplorerDriver(); 
driver.Navigate().GoToUrl("Your_Homepage_Url"); 

driver.TakeScreenshot().SaveAsFile("file_name_string", ImageFormat.Jpeg); 
+1

Si noti che il metodo 'TakeScreenshot()' è un metodo di estensione che richiede l'installazione del pacchetto NuGet 'Selenium.Support'. – thecodefish

+0

@Deeb '' 'ImageFormat''' ora è deprecato usare' '' ScreenshotImageFormat'''. – TotPeRo

0
 ScreenCaptureJob scj; 
     scj = new ScreenCaptureJob(); 
     // Specify the path & file name in which you want to save   
     scj.OutputScreenCaptureFileName = @"C:\Users\jpavankumar\Desktop\Screencaptuere\ScreenRecording4.wmv"; 
     // Start the Screen Capture Job 
     scj.Start(); scj.Stop(); 

Prova questo codice qui fuori ... spero che sia utile a voi ....!

+0

Spiega la tua risposta spiegando esattamente in che modo questo approccio raggiunge l'output desiderato e perché funzionerà. Ciò aiuterebbe davvero le conoscenze dell'OP. – Bluetree

Problemi correlati