Meilleure façon de prendre des screenshots de tests dans Selenium 2?

j'ai besoin d'un moyen de prendre des captures d'écran de mes tests fonctionnels. En ce moment, J'utilise du sélénium 2 avec des fixations C#. Je veux à peu près prendre une capture d'écran à la fin du test pour m'assurer que la page désirée est affichée. Y a-t-il des outils particuliers que vous connaissez et que je peux intégrer dans mon code C# qui déclencheront une capture d'écran? Je n'ai pas pu trouver de solution intégrée pour le sélénium 2 (sans le chercher).

39
demandé sur Phillip 2010-07-27 21:04:28

12 réponses

pour faire des screenshots dans Selenium 2 vous devez faire ce qui suit

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;

ce code devrait fonctionner, comme je l'ai rapidement testé dans IronPython Repl. Voir le code IronPython ci-dessous

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
57
répondu AutomatedTester 2016-04-07 23:35:49
var driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.google.com");
var ss = driver.GetScreenshot();   
ss.SaveAsFile("ss.png", System.Drawing.Imaging.ImageFormat.Png);
26
répondu Toolkit 2017-05-23 14:35:52

Je ne sais pas si c'est important, mais j'ai fini par avoir à lancer le pilote quand j'écrivais en c#.

quelque chose comme:

Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
11
répondu user800612 2011-06-17 01:06:10

il suffit d'utiliser la méthode d'extension TakeScreenshot() dans une ligne de code.

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

driver.TakeScreenshot().SaveAsFile("file_name_string", ImageFormat.Jpeg);
4
répondu Deeb 2015-12-04 16:44:14
  1. Ajouter une référence de System.Drawing dans votre solution / projet.
  2. Utiliser System.Drawing.Imaging namespace dans votre test.

ici je capture la capture d'écran de la page D'accueil 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;
        }
    }
}
2
répondu Avinash Pande 2015-07-13 07:04:48
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);
    }

ce code vous aidera à prendre screen shot

1
répondu Shekhar 2015-11-25 12:09:03

Utiliser Le Système.Dessin.Référence d'imagerie. Le code suivant peut être utilisé pour la capture d'écran.

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

Notes: Le Timestamp a deux avantages: 1) vous apprendrez à connaître la date parfaite quand screenshot est prise. 2) la fonction SaveAsFile écrase le fichier existant. Ainsi, DateTime peut aider pour la création de différents fichiers.

0
répondu Kalpesh Bhupta 2015-10-01 14:06:18
        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();

Essayez ce code ici ... espérons qu'il sera utile pour vous .... !

0
répondu J S V G Pavan Kumar 2017-11-20 11:25:10

driver.Url = "https://www.amazon.in/";

// Stocker l'image dans le dossier bin ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("CurrentPage.png");

// Stocker l'image dans le lecteur D ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(@"D:\CurrentPage.png");

0
répondu Balaji Dinakaran 2018-03-14 16:18:32

JAVA

protected void fullPageScreenshot(String testname) {
            String timeStamp = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss").format(Calendar.getInstance().getTime());
            String imageName = testname + "-" + timeStamp + ".png";
            Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(2000))
                    .takeScreenshot(DriverManager.getDriver());
            try {
                ImageIO.write(screenshot.getImage(), "PNG", new File("./FullPage_Screenshots/" + imageName));
            } catch (Exception e) {
                System.out.println("Capturing FullPage Screenshot failed");
            }
        }

Utilisez la bibliothèque Ashot pour prendre des screenshots pleine page-même lorsque les pages doivent être scrollées https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot/1.5.4

0
répondu Rahul Rana 2018-03-15 10:16:04

Définir dans ce code :

var counter = DateTime.Now.Ticks.ToString();

((ITakesScreenshot)driver).GetScreenshot().SaveAsFile((snap +counter + ".jpg").ToString(), OpenQA.Selenium.ScreenshotImageFormat.Jpeg);
test.Log(LogStatus.Fail, "Snapshot below: " + test.AddScreenCapture(snap + counter + ".jpg"));
0
répondu Priyanka 2018-03-21 11:08:14

Utilisation du sélénium il y a eu deux appels que je connaissais bien:captureEntirePageScreenshot et captureScreenshot. Vous pourriez vouloir regarder dans ces appels pour voir s'ils accompliront ce que vous êtes après.

-1
répondu Bobby B 2010-07-27 17:17:51