web-dev-qa-db-fra.com

Prenez une capture d'écran avec Selenium WebDriver

Est-ce que quelqu'un sait s'il est possible de prendre une capture d'écran en utilisant Selenium WebDriver? (Remarque: pas de sélénium RC)

446
James Hollingworth

Java

Oui c'est possible. L'exemple suivant est en Java:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
459
Sergii Pozharov

Python

Chaque WebDriver a une méthode .save_screenshot(filename). Donc, pour Firefox, il peut être utilisé comme ceci:

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
browser.quit()

De manière confuse, il existe également une méthode .get_screenshot_as_file(filename) qui fait la même chose.

Il existe également des méthodes pour: .get_screenshot_as_base64() (pour l'intégration dans html) et .get_screenshot_as_png() (pour récupérer des données binaires).

notez que WebElements a une méthode .screenshot() qui fonctionne de la même manière, mais ne capture que l’élément sélectionné.

227
Corey Goldberg

C #

public void TakeScreenshot()
{
    try
    {            
        Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
        ss.SaveAsFile(@"D:\Screenshots\SeleniumTestingScreenshot.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        throw;
    }
}
94
jessica

JavaScript (sélénium-Webdriver)

driver.takeScreenshot().then(function(data){
   var base64Data = data.replace(/^data:image\/png;base64,/,"")
   fs.writeFile("out.png", base64Data, 'base64', function(err) {
        if(err) console.log(err);
   });
});
60
Moiz Raja

Rubis

require 'rubygems'
require 'Selenium-webdriver'

driver = Selenium::WebDriver.for :ie 
driver.get "https://www.google.com"   
driver.save_screenshot("./screen.png")

plus de types de fichiers et d'options sont disponibles et vous pouvez les voir dans takes_screenshot.rb

60
sirclesam

PHP (PHPUnit)

Utilise l'extension PHPUnit_Selenium version 1.2.7:

class MyTestClass extends PHPUnit_Extensions_Selenium2TestCase {
    ...
    public function screenshot($filepath) {
        $filedata = $this->currentScreenshot();
        file_put_contents($filepath, $filedata);
    }

    public function testSomething() {          
        $this->screenshot('/path/to/screenshot.png');
    }
    ...
}
32
Ryan Mitchell

Java

J'ai résolu ce problème. Vous pouvez augmenter la RemoteWebDriver pour lui donner toutes les interfaces implémentées par son pilote mandaté: 

WebDriver augmentedDriver = new Augmenter().augment(driver); 
((TakesScreenshot)augmentedDriver).getScreenshotAs(...); //works this way
32
user708910

C #

public Bitmap TakeScreenshot(By by) {
    // 1. Make screenshot of all screen
    var screenshotDriver = _Selenium as ITakesScreenshot;
    Screenshot screenshot = screenshotDriver.GetScreenshot();
    var bmpScreen = new Bitmap(new MemoryStream(screenshot.AsByteArray));

    // 2. Get screenshot of specific element
    IWebElement element = FindElement(by);
    var cropArea = new Rectangle(element.Location, element.Size);
    return bmpScreen.Clone(cropArea, bmpScreen.PixelFormat);
}
21
wsbaser

Java

public String captureScreen() {
    String path;
    try {
        WebDriver augmentedDriver = new Augmenter().augment(driver);
        File source = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE);
        path = "./target/screenshots/" + source.getName();
        FileUtils.copyFile(source, new File(path)); 
    }
    catch(IOException e) {
        path = "Failed to capture screenshot: " + e.getMessage();
    }
    return path;
}
17
SilverColt

Jython

import org.openqa.Selenium.OutputType as OutputType
import org.Apache.commons.io.FileUtils as FileUtils
import Java.io.File as File
import org.openqa.Selenium.firefox.FirefoxDriver as FirefoxDriver

self.driver = FirefoxDriver()
tempfile = self.driver.getScreenshotAs(OutputType.FILE)
FileUtils.copyFile(tempfile, File("C:\\screenshot.png"))
10
Fresh Mind

Java (cadre de robot)

J'ai utilisé cette méthode pour prendre une capture d'écran.

void takeScreenShotMethod(){
    try{
        Thread.sleep(10000)
        BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
        ImageIO.write(image, "jpg", new File("./target/surefire-reports/screenshot.jpg"));
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

Vous pouvez utiliser cette méthode si nécessaire.

8
ank

Java

Semble manquer ici - capture d'écran d'un élément spécifique à en Java:

public void takeScreenshotElement(WebElement element) throws IOException {
    WrapsDriver wrapsDriver = (WrapsDriver) element;
    File screenshot = ((TakesScreenshot) wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE);
    Rectangle rectangle = new Rectangle(element.getSize().width, element.getSize().height);
    Point location = element.getLocation();
    BufferedImage bufferedImage = ImageIO.read(screenshot);
    BufferedImage destImage = bufferedImage.getSubimage(location.x, location.y, rectangle.width, rectangle.height);
    ImageIO.write(destImage, "png", screenshot);
    File file = new File("//path//to");
    FileUtils.copyFile(screenshot, file);
}
7
Erki M.

C #

using System;
using OpenQA.Selenium.PhantomJS;
using System.Drawing.Imaging;

namespace example.com
{
    class Program
    {
        public static PhantomJSDriver driver;

        public static void Main(string[] args)
        {
            driver = new PhantomJSDriver();
            driver.Manage().Window.Size = new System.Drawing.Size(1280, 1024);
            driver.Navigate().GoToUrl("http://www.example.com/");
            driver.GetScreenshot().SaveAsFile("screenshot.png", ImageFormat.Png);
            driver.Quit();
        }
    }
}

Requiert NuGetPackages:

  1. PhantomJS 2.0.0
  2. Selenium.Support 2.48.2
  3. Selenium.WebDriver 2.48.2

Testé avec .NETFramework v4.5.2

6
userlond

Java

Je ne pouvais pas obtenir la réponse acceptée au travail, mais selon la documentation actuelle de WebDriver , les éléments suivants ont bien fonctionné pour moi avec Java 7 sur OS X 10.9:

import Java.io.File;
import Java.net.URL;

import org.openqa.Selenium.OutputType;
import org.openqa.Selenium.TakesScreenshot;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.remote.Augmenter;
import org.openqa.Selenium.remote.DesiredCapabilities;
import org.openqa.Selenium.remote.RemoteWebDriver;

public class Testing {

   public void myTest() throws Exception {
       WebDriver driver = new RemoteWebDriver(
               new URL("http://localhost:4444/wd/hub"),
               DesiredCapabilities.firefox());

       driver.get("http://www.google.com");

       // RemoteWebDriver does not implement the TakesScreenshot class
       // if the driver does have the Capabilities to take a screenshot
       // then Augmenter will add the TakesScreenshot methods to the instance
       WebDriver augmentedDriver = new Augmenter().augment(driver);
       File screenshot = ((TakesScreenshot)augmentedDriver).
               getScreenshotAs(OutputType.FILE);
   }
}
5
Steve HHH

PowerShell

Set-Location PATH:\to\Selenium

Add-Type -Path "Selenium.WebDriverBackedSelenium.dll"
Add-Type -Path "ThoughtWorks.Selenium.Core.dll"
Add-Type -Path "WebDriver.dll"
Add-Type -Path "WebDriver.Support.dll"

$driver = New-Object OpenQA.Selenium.PhantomJS.PhantomJSDriver

$driver.Navigate().GoToUrl("https://www.google.co.uk/")

# Take a screenshot and save it to filename
$filename = Join-Path (Get-Location).Path "01_GoogleLandingPage.png"
$screenshot = $driver.GetScreenshot()
$screenshot.SaveAsFile($filename, [System.Drawing.Imaging.ImageFormat]::Png)

Autres pilotes ...

$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver
$driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver
$driver = New-Object OpenQA.Selenium.IE.InternetExplorerDriver
$driver = New-Object OpenQA.Selenium.Opera.OperaDriver
4
TechSpud

Rubis

time = Time.now.strftime('%a_%e_%Y_%l_%m_%p_%M_%S')
file_path = File.expand_path(File.dirname(__FILE__) + 'screens_shot')+'/'+time +'.png'
#driver.save_screenshot(file_path)
page.driver.browser.save_screenshot file_path
4
vijay chouhan

PHP

public function takescreenshot($event)
  {
    $errorFolder = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . "ErrorScreenshot";

    if(!file_exists($errorFolder)){
      mkdir($errorFolder);
    }

    if (4 === $event->getResult()) {
      $driver = $this->getSession()->getDriver();
      $screenshot = $driver->getWebDriverSession()->screenshot();
      file_put_contents($errorFolder . DIRECTORY_SEPARATOR . 'Error_' .  time() . '.png', base64_decode($screenshot));
    }
  }
4
Arpan Buch

Rubis (concombre)

After do |scenario| 
    if(scenario.failed?)
        puts "after step is executed"
    end
    time = Time.now.strftime('%a_%e_%Y_%l_%m_%p_%M')

    file_path = File.expand_path(File.dirname(__FILE__) + '/../../../../../mlife_screens_shot')+'/'+time +'.png'

    page.driver.browser.save_screenshot file_path
end

Given /^snapshot$/ do
    time = Time.now.strftime('%a_%e_%Y_%l_%m_%p_%M')

    file_path = File.expand_path(File.dirname(__FILE__) + '/../../../../../mlife_screens_shot')+'/'+time +'.png'
    page.driver.browser.save_screenshot file_path
end
4
vijay chouhan

Python

Vous pouvez capturer l'image à partir de Windows à l'aide du pilote Web Python. Utilisez le code ci-dessous dont la page a besoin pour capturer la capture d'écran

driver.save_screenshot('c:\foldername\filename.extension(png,jpeg)')
4
Kv.senthilkumar

C #

public static void TakeScreenshot(IWebDriver driver, String filename)
{
    // Take a screenshot and save it to filename
    Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
    screenshot.SaveAsFile(filename, ImageFormat.Png);
}
3
dmeehan

Vous pouvez essayer l'API AShot. Voici le lien github pour le même. 

https://github.com/yandex-qatools/ashot

Certains des tests ici ... 

https://github.com/yandex-qatools/ashot/tree/master/src/test/Java/ru/yandex/qatools/elementscompare/tests

3
Khaja Mohammed

Java

En utilisant RemoteWebDriver, après avoir augmenté le nœud avec la capacité de capture d'écran, je stockais la capture d'écran de la manière suivante:

void takeScreenShotMethod(){
    try{
        Thread.sleep(10000);
        long id = Thread.currentThread().getId();
        BufferedImage image = new Robot().createScreenCapture(new Rectangle(
            Toolkit.getDefaultToolkit().getScreenSize()));
        ImageIO.write(image, "jpg", new File("./target/surefire-reports/"
            + id + "/screenshot.jpg"));
    }
    catch( Exception e ) {
        e.printStackTrace();
    }
}

Vous pouvez utiliser cette méthode si nécessaire. Ensuite, je suppose que vous pouvez personnaliser la feuille de style de maven-surefire-report-plugin sur surefire-reports/html/custom.css afin que vos rapports incluent le lien vers la capture d'écran correcte pour chaque test?

2
djangofan

Java

public  void captureScreenShot(String obj) throws IOException {
    File screenshotFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(screenshotFile,new File("Screenshots\\"+obj+""+GetTimeStampValue()+".png"));
}

public  String GetTimeStampValue()throws IOException{
    Calendar cal = Calendar.getInstance();       
    Date time=cal.getTime();
    String timestamp=time.toString();
    System.out.println(timestamp);
    String systime=timestamp.replace(":", "-");
    System.out.println(systime);
    return systime;
}

En utilisant ces deux méthodes, vous pouvez également prendre une capture d’écran avec la date et l’heure.

2
Raghuveer

C #

Vous pouvez utiliser l'extrait de code/la fonction suivant pour effectuer une capture d'écran avec Selenium:

    public void TakeScreenshot(IWebDriver driver, string path = @"output")
    {
        var cantakescreenshot = (driver as ITakesScreenshot) != null;
        if (!cantakescreenshot)
            return;
        var filename = string.Empty + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;
        filename = path + @"\" + filename + ".png";
        var ss = ((ITakesScreenshot)driver).GetScreenshot();
        var screenshot = ss.AsBase64EncodedString;
        byte[] screenshotAsByteArray = ss.AsByteArray;
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);
        ss.SaveAsFile(filename, ImageFormat.Png);
    }
2
Mohsin Awan

Java

String yourfilepath = "E:\\username\\Selenium_Workspace\\foldername";

// take a snapshort
File snapshort_file = ((TakesScreenshot) mWebDriver)
        .getScreenshotAs(OutputType.FILE);
// copy the file into folder

FileUtils.copyFile(snapshort_file, new File(yourfilepath));

J'espère que ceci résoudra votre problème

2
Yerram Naveen

Python - Capture d'écran de l'élément:

C'est une question assez ancienne et a de multiples réponses. Cependant, il semble que la capture d'écran d'un élément Web particulier à l'aide de Python manque ici.

emplacement

Un élément Web a sa propre position sur la page. Il est généralement mesuré en pixels x et y et est appelé coordonnées (x, y) de l'élément. Et l'objet location contient deux valeurs.

  1. emplacement [‘x’] - renvoie la coordonnée ‘x’ de l’élément
  2. emplacement [‘y’] - renvoie la coordonnée ‘y’ de l’élément

Taille

Comme pour l'emplacement, chaque élément Web a la largeur et la hauteur. Disponible en tant qu'objet de taille.

  1. size ['width'] - renvoie la ‘width’ de l’élément
  2. taille ['hauteur'] - renvoie la 'hauteur' de l'élément

En utilisant les coordonnées (x, y) et les valeurs de largeur, hauteur, nous pouvons rogner l’image et la stocker dans un fichier.

from Selenium import webdriver
from PIL import Image

driver = webdriver.Firefox(executable_path='[Browser Driver Path]');
driver.get('https://www.google.co.in');

element = driver.find_element_by_xpath("//div[@id='hplogo']");

location = element.location;
size = element.size;

driver.save_screenshot("/data/image.png");

x = location['x'];
y = location['y'];
width = location['x']+size['width'];
height = location['y']+size['height'];

im = Image.open('/data/WorkArea/image.png')
im = im.crop((int(x), int(y), int(width), int(height)))
im.save('/data/image.png')

Note: Extrait de http://allselenium.info/capture-screenshot-element-using-python-Selenium-webdriver/

2
Arun211

Selenese

captureEntirePageScreenshot | /path/to/filename.png | background=#ccffdd
2
Bernát

Java

Méthode de capture d'écran pour les échecs dans Selenium avec TestName et Timestamp ajoutés.

public class Screenshot{        
    final static String ESCAPE_PROPERTY = "org.uncommons.reportng.escape-output";
    public static String imgname = null;

    /*
     * Method to Capture Screenshot for the failures in Selenium with TestName and Timestamp appended.
     */
    public static void getSnapShot(WebDriver wb, String testcaseName) throws Exception {
      try {
      String imgpath=System.getProperty("user.dir").concat("\\Screenshot\\"+testcaseName);
      File f=new File(imgpath);
      if(!f.exists())   {
          f.mkdir();
        }   
        Date d=new Date();
        SimpleDateFormat sd=new SimpleDateFormat("dd_MM_yy_HH_mm_ss_a");
        String timestamp=sd.format(d);
        imgname=imgpath+"\\"+timestamp+".png";

        //Snapshot code
        TakesScreenshot snpobj=((TakesScreenshot)wb);
        File srcfile=snpobj.getScreenshotAs(OutputType.FILE);
        File destFile=new File(imgname);
        FileUtils.copyFile(srcfile, destFile);

      }
      catch(Exception e) {
          e.getMessage();
      }
   }
2
Anuj Teotia

Python

def test_url(self):
    self.driver.get("https://www.google.com/")
    self.driver.save_screenshot("test.jpg")

Il enregistre la capture d'écran dans le même répertoire que le script.

1
Hemant

Java

Je pensais donner ma solution complète car il y a deux manières différentes d'obtenir une capture d'écran. L'une provient du navigateur local et l'autre du navigateur distant. J'ai même incorporé l'image dans le rapport HTML

@After()
public void Selenium_after_step(Scenario scenario) throws IOException, JSONException {

    if (scenario.isFailed()){

        scenario.write("Current URL = " + driver.getCurrentUrl() + "\n");

        try{
            driver.manage().window().maximize();  //Maximize window to get full screen for chrome
        }catch (org.openqa.Selenium.WebDriverException e){

            System.out.println(e.getMessage());
        }

        try {
            if(isAlertPresent()){
                Alert alert = getAlertIfPresent();
                alert.accept();
            }
            byte[] screenshot;
            if(false /*Remote Driver flow*/) { //Get Screen shot from remote driver
                Augmenter augmenter = new Augmenter();
                TakesScreenshot ts = (TakesScreenshot) augmenter.augment(driver);
                screenshot = ts.getScreenshotAs(OutputType.BYTES);
            } else { //get screen shot from local driver
                //local webdriver user flow
                screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
            }
            scenario.embed(screenshot, "image/png"); //Embed image in reports
        } catch (WebDriverException wde) {
            System.err.println(wde.getMessage());
        } catch (ClassCastException cce) {
            cce.printStackTrace();
        }
    }

    //seleniumCleanup();
}
1
Jason Smiley

Vous pouvez créer un webdriverbacked Selenium object à l'aide de l'objet Webdriverclass, puis vous pouvez prendre une capture d'écran.

1
RosAng

Cadre robotique

Voici une solution utilisant Robot Framework avec le Selenium2Library :

*** Settings ***
Library                        Selenium2Library

*** Test Cases ***
Example
    Open Browser               http://localhost:8080/index.html     firefox
    Capture Page Screenshot

Cela permettra d'économiser une capture d'écran dans l'espace de travail. Il est également possible de fournir un nom de fichier au mot clé Capture Page Screenshot pour modifier ce comportement.

1
jotrocken

C # (API Ranorex)

public static void ClickButton()
{
    try
    {
        // code
    }
    catch (Exception e)
    {
        TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
        Report.Screenshot();
        throw (e);
    }
}
1
Benny Meade

Selenide/Java

Voici comment le projet Selenide le fait, ce qui est plus facile que n'importe quel autre moyen:

import static com.codeborne.selenide.Selenide.screenshot;    
screenshot("my_file_name");

Pour Junit:

@Rule
public ScreenShooter makeScreenshotOnFailure = 
     ScreenShooter.failedTests().succeededTests();

Pour TestNG:

import com.codeborne.selenide.testng.ScreenShooter;
@Listeners({ ScreenShooter.class})
1
djangofan

J'utilise le code suivant en C # pour prendre la page entière ou seulement une capture d'écran du navigateur

public void screenShot(string tcName)
    {
        try
        {
            string dateTime = string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
            string screenShotName = @"D:\Selenium\Project\VAM\VAM\bin" + "\\" + tcName + dateTime + ".png";
            ITakesScreenshot screen = driverScript.driver as ITakesScreenshot;
            Screenshot screenshot = screen.GetScreenshot();
            screenshot.SaveAsFile(screenShotName, System.Drawing.Imaging.ImageFormat.Png);
            if (driverScript.last == 1)
                this.writeResult("Sheet1", "Fail see Exception", "Status", driverScript.resultRowID);
        }
        catch (Exception ex)
        {
            driverScript.writeLog.writeLogToFile(ex.ToString(), "inside screenShot");
        }

    }

    public void fullPageScreenShot(string tcName)
    {
        try
        {
            string dateTime = string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
            string screenShotName = @"D:\Selenium\Project\VAM\VAM\bin" + "\\" + tcName + dateTime + ".png";
            Rectangle bounds = Screen.GetBounds(Point.Empty);
            using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
            {
                using (Graphics g = Graphics.FromImage(bitmap))
                {
                    g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
                }
                bitmap.Save(screenShotName, System.Drawing.Imaging.ImageFormat.Png);
            }
                if (driverScript.last == 1)
                this.writeResult("Sheet1", "Pass", "Status", driverScript.resultRowID);
        }
        catch (Exception ex)
        {
            driverScript.writeLog.writeLogToFile(ex.ToString(), "inside fullPageScreenShot");
        }

    }
0
Aman Sharma

Oui, il est possible de prendre un instantané d'une page Web à l'aide de Selenium WebDriver.

La méthode getScreenshotAs() fournie par l'API WebDriver fait le travail pour nous.

Syntaxe:getScreenshotAs(OutputType<X> target)

Type de retour:X

Paramètres:target - Vérifie les options fournies par OutputType

Applicabilité: Non spécifique à aucun élément DOM

Exemple:

TakesScreenshot screenshot = (TakesScreenshot) driver;
File file = screenshot.getScreenshotAs(OutputType.FILE);

Reportez-vous à l'extrait de code de travail ci-dessous pour plus de détails.

public class TakeScreenShotDemo {

    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get(“http: //www.google.com”);

        TakesScreenshot screenshot = (TakesScreenshot) driver;

        File file = screenshot.getScreenshotAs(OutputType.FILE);

        // creating a destination file
        File destination = new File(“newFilePath(e.g.: C: \\Folder\\ Desktop\\ snapshot.png)”);
        try {
            FileUtils.copyFile(file, destination);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Visitez: Instantané avec WebDriver pour obtenir plus de détails.

0
Jackin Shah

Code C #

IWebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((ITakesScreenshot)driver).GetScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
0
Rakesh Raut
import Java.io.File;
import Java.io.IOException;

import org.Apache.maven.surefire.shade.org.Apache.maven.shared.utils.io.FileUtils;
import org.openqa.Selenium.OutputType;
import org.openqa.Selenium.TakesScreenshot;
import org.openqa.Selenium.WebDriver;
/**
 * @author Jagdeep Jain
 *
 */
public class ScreenShotMaker {

    // take screen shot on the test failures
    public void takeScreenShot(WebDriver driver, String fileName) {
        File screenShot = ((TakesScreenshot) driver)
                .getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(screenShot, new File("src/main/webapp/screen-captures/" + fileName + ".png"));

        } catch (IOException ioe) {
            throw new RuntimeException(ioe.getMessage(), ioe);
        }
    }

}
0
Jagdeep

Python

webdriver.get_screenshot_as_file(filepath)

La méthode ci-dessus prend une capture d'écran et la stocke également sous la forme d'un fichier à l'emplacement indiqué en tant que paramètre.

0
Sajid Manzoor
File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
BufferedImage originalImage = ImageIO.read(scrFile);
//int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
BufferedImage resizedImage = CommonUtilities.resizeImage(originalImage, IMG_HEIGHT, IMG_WIDTH);
ImageIO.write(resizedImage, "jpg", new File(path + "/"+ testCaseId + "/img/" + index + ".jpg"));
Image jpeg = Image.getInstance(path + "/" + testCaseId + "/img/"+ index + ".jpg");
0
akhilesh gulati

Il y a plusieurs façons de prendre un capture d'écran en utilisant Selenium WebDriver

Méthodes Java

Voici les différentes méthodes Java pour prendre un capture d'écran:

  • Utilisation de getScreenshotAs() from TakesScreenshot Interface:

    • Bloc de code:

      package screenShot;
      
      import Java.io.File;
      import Java.io.IOException;
      
      import org.Apache.commons.io.FileUtils;
      import org.openqa.Selenium.OutputType;
      import org.openqa.Selenium.TakesScreenshot;
      import org.openqa.Selenium.WebDriver;
      import org.openqa.Selenium.firefox.FirefoxDriver;
      import org.openqa.Selenium.support.ui.ExpectedConditions;
      import org.openqa.Selenium.support.ui.WebDriverWait;
      
      public class Firefox_takesScreenshot {
      
          public static void main(String[] args) throws IOException {
      
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("https://login.bws.birst.com/login.html/");
              new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Birst"));
              File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
              FileUtils.copyFile(scrFile, new File(".\\Screenshots\\Mads_Cruz_screenshot.png"));
              driver.quit();
          }
      }
      
    • Capture d'écran:

 Mads_Cruz_screenshot

  • Si la page Web _ est jquery enabled, vous pouvez utiliser ashot from pazone/ashot library:

    • Bloc de code:

      package screenShot;
      
      import Java.io.File;
      import javax.imageio.ImageIO;
      import org.openqa.Selenium.WebDriver;
      import org.openqa.Selenium.firefox.FirefoxDriver;
      import org.openqa.Selenium.support.ui.ExpectedConditions;
      import org.openqa.Selenium.support.ui.WebDriverWait;
      
      import ru.yandex.qatools.ashot.AShot;
      import ru.yandex.qatools.ashot.Screenshot;
      import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
      
      public class ashot_CompletePage_Firefox {
      
          public static void main(String[] args) throws Exception {
      
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("https://jquery.com/");
              new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("jQuery"));
              Screenshot myScreenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(driver);
              ImageIO.write(myScreenshot.getImage(),"PNG",new File("./Screenshots/firefoxScreenshot.png"));
              driver.quit();
          }
      }
      
    • Capture d'écran:

 firefoxScreenshot.png

  • Utilisation de Selenium-shutterbug from assertthat/Selenium-shutterbug library:

    • Bloc de code:

      package screenShot;
      
      import org.openqa.Selenium.WebDriver;
      import org.openqa.Selenium.firefox.FirefoxDriver;
      import com.assertthat.Selenium_shutterbug.core.Shutterbug;
      import com.assertthat.Selenium_shutterbug.utils.web.ScrollStrategy;
      
      public class Selenium_shutterbug_fullpage_firefox {
      
          public static void main(String[] args) {
      
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("https://www.google.co.in");
              Shutterbug.shootPage(driver, ScrollStrategy.BOTH_DIRECTIONS).save("./Screenshots/");
              driver.quit();
          }
      }
      
    • Capture d'écran:

 2019_03_12_16_30_35_787.png

0
DebanjanB
public static void getSnapShot(WebDriver driver, String event) {

        try {
            File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            BufferedImage originalImage = ImageIO.read(scrFile);
            //int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
            BufferedImage resizedImage = CommonUtilities.resizeImage(originalImage, IMG_HEIGHT, IMG_WIDTH);
            ImageIO.write(resizedImage, "jpg", new File(path + "/"+ testCaseId + "/img/" + index + ".jpg"));
            Image jpeg = Image.getInstance(path + "/" + testCaseId + "/img/"+ index + ".jpg");
            jpeg.setAlignment(Image.MIDDLE);
            PdfPTable table = new PdfPTable(1);
            PdfPCell cell1 = new PdfPCell(new Paragraph("\n"+event+"\n"));
            PdfPCell cell2 = new PdfPCell(jpeg, false);
            table.addCell(cell1);
            table.addCell(cell2);
            document.add(table);
            document.add(new Phrase("\n\n"));
            //document.add(new Phrase("\n\n"+event+"\n\n"));
            //document.add(jpeg);
            fileWriter.write("<pre>        "+event+"</pre><br>");
            fileWriter.write("<pre>        "+Calendar.getInstance().getTime()+"</pre><br><br>");
            fileWriter.write("<img src=\".\\img\\" + index + ".jpg\" height=\"460\" width=\"300\"  align=\"middle\"><br><hr><br>");
            ++index;
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        }

}
0
akhilesh gulati