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
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
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.
quelle chiamate sono 1 specifico di selenio 1 – AutomatedTester
la mia risposta di seguito mostra come farlo con selenio 2. P. Non ti ho votato – AutomatedTester
Non so se è importante, ma ho finito per dover lanciare il conducente quando scrivevo in C#.
qualcosa di simile:
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
var driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.google.com");
var ss = driver.GetScreenshot();
ss.SaveAsFile("ss.png", System.Drawing.Imaging.ImageFormat.Png);
- Aggiungere un riferimento di
System.Drawing
nella soluzione/progetto. - 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;
}
}
}
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.
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
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);
Si noti che il metodo 'TakeScreenshot()' è un metodo di estensione che richiede l'installazione del pacchetto NuGet 'Selenium.Support'. – thecodefish
@Deeb '' 'ImageFormat''' ora è deprecato usare' '' ScreenshotImageFormat'''. – TotPeRo
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 ....!
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
Grazie! Quindi ho la stringa per il nome del file "C: \\ .. path .. \\ screen.png", ma non appare mai lì. – James
Sostituisci questo codice sopra: "Screenshot ss = driver.GetScreenshot();" ... con questo codice: "Screenshot ss = ((ITakesScreenshot) webDriver) .GetScreenshot();" – MacGyver
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