2010-07-27 16 views
38

Necesito una forma de tomar capturas de pantalla de mis pruebas funcionales. En este momento estoy usando Selenium 2 con enlaces C#. Bastante quiero tomar una captura de pantalla al final de la prueba para asegurarme de que se muestre la página deseada. ¿Hay alguna herramienta en particular que ustedes conozcan que pueda incorporar a mi código C# que activará una captura de pantalla? No pude encontrar una solución integrada de Selenio 2 (sin examinarlo).¿La mejor manera de tomar capturas de pantalla de pruebas en Selenium 2?

Respuesta

55

Para hacer capturas de pantalla en Selenio 2 que tiene que hacer lo siguiente

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; 

Ese código debería funcionar, lo más rápidamente lo probé en IronPython Sust. Ver el código IronPython continuación

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

¡Gracias! Así que tengo la cadena para el nombre de archivo "C: \\ .. ruta ... \\ pantalla.png", pero nunca aparece allí. – James

+1

Reemplace este código de arriba: "Captura de pantalla ss = driver.GetScreenshot();" ... con este código: "Captura de pantalla ss = ((ITakesScreenshot) webDriver) .GetScreenshot();" – MacGyver

+1

Si usa .NET 4.0 y Selenium .NET 4.0 controladores, deberá agregar explícitamente una referencia a System.Drawing (Agregar referencia> pestaña .NET> System.Drawing) si creó su proyecto de biblioteca de clase en Visual Studio 2010 ... luego llame para guardar el archivo en alguna parte: "ss.SaveAsFile (@" C: \ ss.png ", System.Drawing.Imaging.ImageFormat.Png);" – MacGyver

-1

Usando selenio había dos llamadas con las que estaba familiarizado: captureEntirePageScreenshot y captureScreenshot. Es posible que desee examinar esas llamadas para ver si lograrán lo que busca.

+5

esas llamadas son específicas de Selenium 1 – AutomatedTester

+1

mi respuesta a continuación muestra cómo hacerlo con Selenium 2. P. No te voté – AutomatedTester

10

No sé si es importante, pero terminé tener que emitir el conductor cuando estaba escribiendo en C#.

algo como:

 
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

rápido y al punto +1 – craastad

+0

@Toolkit '' 'ImageFormat''' ahora está en desuso, use' '' ScreenshotImageFormat''' en su lugar. – TotPeRo

2
  1. agregar una referencia de System.Drawing en su solución/proyecto.
  2. Use System.Drawing.Imaging espacio de nombres en su examen.

Aquí estoy capturando la captura de pantalla de la página de inicio de 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

Usar System.Drawing.Imaging reference. El siguiente código se puede usar para tomar una captura de pantalla.

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

Notas: Marca de tiempo tiene dos ventajas: 1) Tendrá la oportunidad de conocer el DateTime perfecta cuando se toma pantalla. 2) La función SaveAsFile sobrescribe el archivo existente. Entonces, DateTime puede ayudar a crear archivos diferentes.

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

Este código le ayudará a tomar Tiro de pantalla

4

Sólo tiene que utilizar el método de extensión TakeScreenshot() en una sola línea de código.

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

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

Tenga en cuenta que el método 'TakeScreenshot()' es un método de extensión que requiere que se instale el paquete 'Selenium.Support' NuGet. – thecodefish

+0

@Deeb '' 'ImageFormat''' ahora está obsoleto use en su lugar' '' 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(); 

Prueba este código aquí ... espero que sea útil para usted ....!

+0

Explique su respuesta que cubre exactamente cómo este enfoque logra el resultado deseado y por qué funcionará. Esto realmente ayudaría al conocimiento del OP. – Bluetree

Cuestiones relacionadas