it-swarm.com.de

Machen Sie einen Screenshot mit Selenium WebDriver

Weiß jemand, ob es möglich ist, einen Screenshot mit Selenium WebDriver aufzunehmen? (Hinweis: nicht Selenium RC)

446

Java

Ja, es ist möglich. Das folgende Beispiel ist in 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

Jeder WebDriver verfügt über eine .save_screenshot(filename)-Methode. Für Firefox kann es so verwendet werden:

from Selenium import webdriver

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

Verwirrenderweise existiert auch eine .get_screenshot_as_file(filename)-Methode, die dasselbe tut.

Es gibt auch Methoden für: .get_screenshot_as_base64() (zum Einbetten in HTML) und .get_screenshot_as_png() (zum Abrufen von Binärdaten).

und Beachten Sie, dass WebElements über eine .screenshot()-Methode verfügt, die ähnlich funktioniert, aber nur das ausgewählte Element erfasst.

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 (Selenium-Webtreiber)

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

Rubin

require 'rubygems'
require 'Selenium-webdriver'

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

es stehen weitere Dateitypen und Optionen zur Verfügung, die Sie in takes_screenshot.rb sehen können

60
sirclesam

PHP (PHPUnit)

Verwendet die PHPUnit_Selenium-Erweiterungsversion 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

Ich habe dieses Problem gelöst. Sie können die RemoteWebDriver erweitern, um alle Schnittstellen mit ihrem Proxy-Treiber zu versehen: 

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 (Roboter-Framework)

Ich habe diese Methode für die Aufnahme von Screenshots verwendet.

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

Sie können diese Methode bei Bedarf verwenden.

8
ank

Java

Scheint hier zu fehlen - Screenshot eines spezifischen Elements in 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();
        }
    }
}

Benötigt NuGetPackages:

  1. PhantomJS 2.0.0
  2. Selen.Unterstützung 2.48.2
  3. Selen.WebDriver 2.48.2

Getestet mit .NETFramework v4.5.2

6
userlond

Java

Ich konnte die akzeptierte Antwort nicht erhalten, aber laut der aktuellen WebDriver-Dokumentation funktionierte Folgendes mit Java 7 unter 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

Power Shell

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)

Andere Fahrer ...

$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

Rubin

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

Rubin (Gurke)

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

Sie können das Bild mit Python-Web-Treiber von Windows aufnehmen. Verwenden Sie den Code unten, auf welcher Seite der Screenshot aufgenommen werden muss

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

Sie können die AShot-API ausprobieren. Hier ist der Github-Link für das gleiche. 

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

Einige der Tests hier ... 

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

3
Khaja Mohammed

Java

Nachdem Sie den Knoten mit RemoteWebDriver um die Screenshot-Funktion erweitert haben, würde ich den Screenshot wie folgt speichern:

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

Sie können diese Methode bei Bedarf verwenden. Dann gehe ich davon aus, dass Sie das Stylesheet von maven-surefire-report-plugin unter surefire-reports/html/custom.css so anpassen können, dass Ihre Berichte den Link zum richtigen Screenshot für jeden Test enthalten.

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

Mit diesen beiden Methoden können Sie auch einen Screenshot mit Datum und Uhrzeit erstellen.

2
Raghuveer

c #

Mit dem folgenden Code-Snippet/dieser Funktion können Sie Screenshots mit dem Selenium aufnehmen:

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

Hoffe, das löst dein Problem

2
Yerram Naveen

Python - Screenshot von Element:

Dies ist eine ziemlich alte Frage und hat mehrere Antworten. Es scheint jedoch, dass ein Screenshot eines bestimmten Webelements mit Python hier fehlt.

Standort

Ein Webelement hat seine eigene Position auf der Seite und wird im Allgemeinen in x- und y-Pixeln gemessen und als (x, y) -Koordinaten des Elements bezeichnet. Ein Standortobjekt enthält zwei Werte.

  1. location ["x"] - gibt die "x" -Koordinate des Elements zurück
  2. location ["y"] - Gibt die "y" -Koordinate des Elements zurück

Größe

Wie der Standort hat jedes WebElement Breite und Höhe. Verfügbar als Größenobjekt.

  1. größe ["Breite"] - gibt die "Breite" des Elements zurück
  2. size ["height"] - gibt die "Höhe" des Elements zurück

Mit (x, y) -Koordinaten und Breiten- und Höhenwerten können wir das Bild zuschneiden und in einer Datei speichern.

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

Hinweis: aus http://allselenium.info/capture-screenshot-element-using-python-Selenium-webdriver/

2
Arun211

Selenese

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

Java

Methode zur Erfassung des Screenshots für die Fehler in Selenium mit angefügtem TestName und Zeitstempel.

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

Screenshot wird in demselben Verzeichnis gespeichert, in dem das Skript gespeichert wird.

1
Hemant

Java

Ich dachte, ich würde meine volle Lösung geben, da es zwei Möglichkeiten gibt, einen Screenshot zu machen. Eines stammt aus dem lokalen Browser und eines aus dem Remote-Browser. Ich habe das Bild sogar in den HTML-Bericht eingebettet

@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

Sie können einen webdriverbacked Selenium object mit dem Webdriverclass-Objekt erstellen und dann einen Screenshot machen.

1
RosAng

Roboter-Rahmen

Hier ist eine Lösung mit Robot Framework mit der Selenium2Library :

*** Settings ***
Library                        Selenium2Library

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

Dadurch wird ein Screenshot im Arbeitsbereich gespeichert. Es ist auch möglich, einen Dateinamen für das Schlüsselwort Capture Page Screenshot anzugeben, um dieses Verhalten zu ändern.

1
jotrocken

C # (Ranorex-API)

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

So macht es das Selenide Projekt und macht es einfacher als alle anderen Möglichkeiten:

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

Für Junit:

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

Für TestNG:

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

Ich verwende den folgenden Code in C #, um die gesamte Seite oder nur einen Browser-Screenshot zu erstellen

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

Ja, es ist möglich, mit Selenium WebDriver einen Schnappschuss einer Webseite zu erstellen.

Die von der WebDriver API bereitgestellte getScreenshotAs()-Methode erledigt die Arbeit für uns.

Syntax:getScreenshotAs(OutputType<X> target)

Rückgabetyp:X

Parameters:target - Überprüfen Sie die von OutputType bereitgestellten Optionen.

Anwendbarkeit: Nicht spezifisch für ein DOM-Element

Beispiel:

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

Weitere Informationen finden Sie im folgenden Code für das Funktionscode.

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

    }
}

Besuchen Sie: Momentaufnahme mit WebDriver , um weitere Informationen zu erhalten.

0
Jackin Shah

C # -Code

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)

Die obige Methode macht einen Screenshot und speichert ihn auch als Datei an dem als Parameter angegebenen Ort.

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

Es gibt mehrere Möglichkeiten, einen Screenshot mit Selenium WebDriver aufzunehmen.

Java-Methoden

Im Folgenden sind die verschiedenen Java-Methoden zum Erstellen eines Screenshot aufgeführt:

  • Verwenden von getScreenshotAs() from TakesScreenshot Interface:

    • Code Block:

      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();
          }
      }
      
    • Bildschirmfoto:

 Mads_Cruz_screenshot

  • Wenn die Webseitejquery aktiviert ist, können Sie ashot from pazone/ashot library verwenden:

    • Code Block:

      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();
          }
      }
      
    • Bildschirmfoto:

 firefoxScreenshot.png

  • Verwenden von Selenium-Shutterbug from behauptet, dass/Selenium-Shutterbug library:

    • Code Block:

      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();
          }
      }
      
    • Bildschirmfoto:

 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