सेलेनियम वेबड्राइवर के साथ स्क्रीनशॉट कैसे लें


499

किसी को पता है कि क्या सेलेनियम वेबड्राइवर का उपयोग करके स्क्रीनशॉट लेना संभव है? (नोट: सेलेनियम आरसी नहीं)


वेबड्राइवर वायर प्रोटोकॉल के साथ ऐसा करने का केवल एक ही तरीका है, लेकिन कोई भी सीधे इस प्रोटोकॉल का उपयोग नहीं करता है। इसके बजाय, लोग विभिन्न भाषा बाइंडिंग / लाइब्रेरी का उपयोग करते हैं जो निम्न-स्तरीय प्रोटोकॉल को लपेटते हैं। भाषा के बंधनों का भार है, इसलिए आपको यह कहने की आवश्यकता है कि आप किसका उपयोग करना चाहते हैं। अन्यथा, बहुत सारे उत्तर हैं।
oberlies

आप किस प्रोग्रामिंग भाषा का उपयोग कर रहे हैं?
रिपन अल वसीम

क्या आप पूरे पृष्ठ का स्क्रीनशॉट लेना चाहते हैं या एक विशिष्ट तत्व?
रिपन अल वसीम

हां, स्क्रीनशॉट को पूरे पृष्ठ पर या सेलेनियम वेबड्राइवर के साथ एक विशिष्ट तत्व के लिए लेना संभव है
रिपन अल वसीम

जवाबों:


506

जावा

हाँ यह संभव है। निम्नलिखित उदाहरण जावा में है:

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

30
फ़ाइल का नाम बदलने के बजाय उसे कॉपी करना एक अच्छा विचार है, अगर ऐसा कोई मौका हो जो स्रोत और गंतव्य एक ही फाइल सिस्टम पर न हो। आप फ़ाइल सिस्टम सीमाओं (यूनिक्स पर, कम से कम) में नाम नहीं बदल सकते। ध्यान दें कि /tmpइसका अपने फाइल सिस्टम पर होना आम बात है , और FirefoxDriver स्क्रीनशॉट को लिखता है /tmp
टॉम एंडरसन

9
क्या केवल असफल मामलों के लिए ऐसा करने का कोई तरीका है?
some_other_guy 5

6
यह ध्यान देने योग्य है कि HtmlUnitDriverलागू ड्राइवरों की सूची के लिए लागू नहीं होता है TakesScreenshot( selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/… देखें )। लेकिन आप HTML के रूप में सहेज सकते हैं।
वर्नट

7
FileUtils वर्ग का उपयोग करने के लिए क्या पैकेज की आवश्यकता है?
रिपन अल वसीम

7
@ रिपनअवसिम शायदorg.apache.commons.io.FileUtils
बेन

269

अजगर

प्रत्येक WebDriver में एक .save_screenshot(filename)विधि है। तो फ़ायरफ़ॉक्स के लिए, यह इस तरह से इस्तेमाल किया जा सकता है:

from selenium import webdriver

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

भ्रामक रूप से, एक .get_screenshot_as_file(filename)विधि भी मौजूद है जो समान कार्य करती है।

इसके लिए भी तरीके हैं: .get_screenshot_as_base64()(html में एम्बेड .get_screenshot_as_png()करने के लिए ) और (बाइनरी डेटा प्राप्त करने के लिए)।

और ध्यान दें कि WebElements में एक .screenshot()विधि है जो समान रूप से काम करती है, लेकिन केवल चयनित तत्व को पकड़ती है।


अन्य ब्राउज़रों के लिए, वेबड्राइवर उदाहरण का आदान-प्रदान करें। यदि आप राज्य सहित अपनी वेबसाइट के स्क्रीनशॉट चाहते हैं, तो Usersnap पर एक नज़र डालें
ग्रेगोर

@ DavidRöthlisberger सभी महान है, लेकिन आपकी टिप्पणी का मेरे जवाब से कोई लेना-देना नहीं है
कोरी गोल्डबर्ग

एक पूर्ण पृष्ठ का एक स्क्रेनशॉट बनाने के लिए, केवल दृश्य क्षेत्र ही नहीं, मेरे उत्तर से मेरे अजगर कोड का उपयोग यहां करें stich: stackoverflow.com/questions/37906704/…
Fabian Thommen

1
@CoreyGoldberg सच, आपके जवाब से कोई लेना देना नहीं। लेकिन मेरी पुरानी स्क्रिप्ट में एक पुराने FF का उपयोग किया गया था और इसने व्यूपोर्ट ही नहीं, बल्कि पूरे पृष्ठ को ले लिया था। बाद में उन्होंने इसे मानक में बदल कर अब केवल व्यूपोर्ट बना दिया। इसलिए मैं किसी को भी यही समस्या होने में मदद करना चाहता था। और हाँ, निश्चित तत्व स्क्रॉल / स्टिच में एक वास्तविक दर्द है!
फेबियन थोमेन

1
एक और बात जिसने मुझे बहुत मदद की, यदि आपको छवि आयाम बदलने की आवश्यकता है, तो बस स्नैपशॉट का उपयोग करने से पहले विंडो का आकार निर्धारित करें driver.set_window_size(1366, 728)
SpoiledBrat

110

सी#

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

9
अच्छी तरह से काम। कैविएट: स्क्रीन शॉट लेता है न कि पेज शॉट।
ljgww

क्या आपका मतलब यह डेस्कटॉप और सब कुछ हो जाता है? या आप मतलब है कि यह सिर्फ viewport हो जाता है?
vtortola

यह केवल वही मिलेगा जो चालक के दायरे में है, यह कई समानांतर परीक्षण करने की अनुमति देता है। ध्यान दें कि यदि आपके ड्राइवर की मुख्य विंडो में स्क्रॉलबार है या यदि यह एक पृष्ठ से अधिक है तो यह ज़ूम आउट नहीं करेगा।
बेन

3
SaveAsFile (स्ट्रिंग पथ, ScreenshotImageFormat प्रारूप) ScreenshotImageFormat.Jpeg करने के लिए अद्यतन
कीरन

1
यह मेरे लिए काम किया! मैं ग्राफिक्स नामस्थान से CopyFromScreen का उपयोग कर रहा था। उपरोक्त समाधान का लाभ यह है कि यह तब काम करता है जब कोड को टीएफएस से हेडलेस तरीके से कहा जाता है। मेरे पुराने CopyFromScreen पद्धति ने केवल Visual Studio से सेलेनियम परीक्षण चलाने पर काम किया, लेकिन मेरे TFS रन परीक्षणों के लिए कभी काम नहीं किया।
इवान

74

जावास्क्रिप्ट (सेलेनियम-वेबड्राइवर)

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

3
कैसे Browserstack यह वर्णन करने के लिए समान: browserstack.com/automate/node#enhancements-screenshots
माइक क़सूरवार

data.replace में वास्तव में आप कोष्ठक में क्या कर रहे हैं?
जॉन डेमेट्रीओ

@JohnDemetriou, डेटा उस ऑब्जेक्ट या चर का नाम है जिसे आप कॉल करते समय बनाया जाएगा। var1आप चाहें तो इसे यू कह सकते हैं । U को यह देखने के लिए takeScreenshot()फ़ंक्शन को देखना चाहिए कि यह वास्तव में क्या है। शायद कैनवास का उपयोग करके जावास्क्रिप्ट से प्रदान की गई एक द्विआधारी छवि। यह रेंडर होने से पहले यह डोम हो सकता है। इस पर गौर करें।
m3nda

66

माणिक

require 'rubygems'
require 'selenium-webdriver'

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

अधिक फ़ाइल प्रकार और विकल्प उपलब्ध हैं और आप उन्हें take_screenshot.rb में देख सकते हैं


सेलेनियम ग्रिड का उपयोग करके मेरे लिए ठीक काम किया गया 2. ओएस एक्स स्नो लेपर्ड पर चलने वाला स्क्रिप्ट और हब; Xvfb के तहत फ़ायरफ़ॉक्स 3.6.18 के साथ RedHat EL 4 पर नोड चल रहा है।
मार्क डेस

1
क्या पूर्ण पृष्ठ स्क्रीनशॉट लेने का कोई तरीका है, न कि केवल दृश्य क्षेत्र?
अरिहंत गोधा

2
पूरा पृष्ठ डिफ़ॉल्ट रूप से लिया जाता है। कम से कम उपयोग headlessऔरFirefox
एशले

35

जावा

मुझे यह मुद्दा हल हो गया। आप RemoteWebDriverइसे अपने सभी अनुमानित ड्राइवर के इम्प्लेसेस को देने के लिए संवर्धित कर सकते हैं :

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

यदि आप ऐसा करते हैं, तो आपको स्क्रीनशॉट्स को थ्रेडनेम के साथ फाइलनाम पर कॉपी करने की आवश्यकता नहीं है ताकि आप यह बता सकें कि आपके ड्राइवर के कौन से थ्रेड / इंस्टेंस ने स्क्रीनशॉट को फेंक दिया है? अन्यथा, एक ग्रिड नोड पर एक ब्राउज़र के कई उदाहरण एक दूसरे के स्क्रीनशॉट को अधिलेखित कर देंगे?
djangofan

1
मैं यह बताना चाहूंगा कि केवल इस समाधान ने मेरे लिए हेडलेस क्रोमड्राइवर का उपयोग करके काम किया
गेब्रियललाडो

34

PHP (PHPUnit)

PHPUnit_Selenium एक्सटेंशन संस्करण 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');
    }
    ...
}

daaaamn! मैं इस बारे में अधिक जानना चाहता हूं, सेलेनियम मेरे लिए नया है और मैं दृश्य परीक्षण करने के लिए कई ब्राउज़रों और ओएस पर स्क्रीनशॉट बनाने के लिए एक क्ली समाधान की तलाश कर रहा हूं
pythonian29033

25

सी#

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

18

जावा

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

आपने किस ड्राइवर का उपयोग किया? नया ऑगमेंटर ()। वृद्धि (ड्राइवर);
kozla13

12

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

9

जावा (रोबोट फ्रेमवर्क)

मैंने स्क्रीन शॉट लेने के लिए इस विधि का उपयोग किया।

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

जहाँ भी आवश्यकता हो आप इस विधि का उपयोग कर सकते हैं।


आपका ध्यान हर समय ब्राउज़र पर रहना चाहिए, बाकी जो भी वर्तमान में केंद्रित है, उसका स्नैपशॉट लेता है।
कुशाल .11

8

जावा

यहाँ याद आ रहा है - जावा में एक विशिष्ट तत्व का स्क्रीनशॉट लेना :

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

मुझे नहीं लगता कि यह दृष्टिकोण वास्तविक काम कर सकता है, क्योंकि स्क्रीनशॉट और वास्तविक ब्राउज़र में अलग-अलग संकल्प हैं। तो अपनी छवि पर सेलेनियम द्वारा प्राप्त समन्वय स्थान का उपयोग करते समय आप java.awt.image.RasterFormatException में चलना सुनिश्चित करते हैं: (y + ऊँचाई) रेखापुंज के बाहर है
Ichwardort

क्या आपने कोड की कोशिश की? जब मैंने आखिरी बार कोशिश की तो यह काम कर गया।
एरकी एम।

1
यह पूरी तरह से ठीक काम करता है जब तक आप एक तत्व को कैप्चर करने की कोशिश करते हैं जो स्क्रॉल किए बिना दिखाई देता है। जब आपको इसे कैप्चर करने के लिए किसी तत्व को स्क्रॉल करने की आवश्यकता होती है, तो पृष्ठ के शीर्ष से y ऑफ़सेट की गणना की जाती है, जो तब फ़ुल-स्क्रीन छवि की सीमाओं से अधिक हो जाती है। तो सबसे आसान उपाय या तो स्क्रीन साइज़ को codeबढ़ाना है। इस driver.manage ()। Window ()। SetSize (नया आयाम (1680, 1050)); या सीएसएस के माध्यम से किसी भी गैर आवश्यक तत्वों को हटाने के लिए। स्क्रॉलिंग से y- ऑफसेट की गणना करने के लिए उचित समाधान होगा।
इचवर्डोर्ट

1
में Firefoxकाम करता है ठीक उस पर आयाम आधारित पूर्ण छवि से तत्व स्क्रीन फसलों के रूप में। में Chromeअगर तत्व उस दृश्य भाग छवि से स्क्रॉल बाहर के साथ दृश्य भाग में उपलब्ध है यह तत्व ठीक कैप्चर करता है। यदि हम document.documentElement.clientHeightक्लाइंट को दो बार स्क्रॉल करने के बाद स्क्रीनशॉट लेना चाहते (location.y)-2*clientHeightहैं तो सटीक एलिमेंट स्क्रीनशॉट प्राप्त करने के लिए उपयोग करें। इस पोस्ट के लिए धन्यवाद क्योंकि यह मेरी मदद करता है ...
यश

6

सी#

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

NuGetPackages की आवश्यकता है:

  1. फैंटमज 2.0.0
  2. सेलेनियम।सुपोर्ट 2.48.2
  3. सेलेनियम.वेबड्राइव 2.48.2

.NETFramework v4.5.2 के साथ परीक्षण किया गया


5

जावा

मुझे काम करने के लिए स्वीकृत उत्तर नहीं मिला, लेकिन वर्तमान वेबड्राइवर प्रलेखन के अनुसार , निम्नलिखित ने मेरे लिए OS X 10.9 पर जावा 7 के साथ ठीक काम किया:

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

4

रूबी (ककड़ी)

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

यह कौनसी भाषा है?
codygman

यह किसी भी विशिष्ट वेब चालक का उपयोग नहीं करते हुए रूबी में अपनी तरह दिखता है
जेम्स

4

माणिक

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

पीएचपी

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

facebook / webdriver के वर्तमान संस्करण में विधि isScreenshot () है और यह फ़ाइल को सहेजने से पहले base64_encode () आउटपुट के लिए आवश्यक नहीं है।
3

1
क्या आप कृपया अपने उदाहरण में कोड जोड़ सकते हैं जो दिखाता है कि इस takescreenshotफ़ंक्शन को कैसे कॉल करें ? विशेष $eventरूप से चर कहाँ से आता है? मैं पूरी तरह सेलेनियम नॉब हूँ इसलिए इस सवाल का जवाब है कि पूर्व सेलेनियम ज्ञान ग्रहण नहीं करता है बहुत सराहना की जाएगी!
केनी 83

4

शक्ति कोशिका

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)

अन्य ड्राइवर ...

$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

शायद नामस्थान की [OpenQA.Selenium.ScreenshotImageFormat]::Pngतुलना में उपयोग करने के लिए बेहतर है System.Drawing
आदर्श

4

अजगर - तत्व का स्क्रीनशॉट:

यह एक बहुत पुराना प्रश्न है और इसके कई उत्तर हैं। हालाँकि ऐसा लगता है कि पायथन का उपयोग करने वाला एक विशेष वेब तत्व का स्क्रीनशॉट यहां गायब है।

स्थान

एक वेब तत्व की पृष्ठ पर अपनी स्थिति है और आम तौर पर इसे x और y पिक्सेल में मापा जाता है और तत्व के (x, y) सह-निर्देश के रूप में जाना जाता है। और स्थान ऑब्जेक्ट में दो मान होते हैं।

  1. स्थान ['x'] - 'x' तत्व का समन्वय करता है
  2. स्थान ['y'] - 'y' तत्व का समन्वय करता है

आकार

स्थान की तरह, प्रत्येक WebElement की चौड़ाई और ऊंचाई है; आकार वस्तु के रूप में उपलब्ध है।

  1. आकार ['चौड़ाई'] - तत्व की 'चौड़ाई' लौटाता है
  2. आकार ['ऊँचाई'] - तत्व की 'ऊँचाई' लौटाता है

(X, y) सह-निर्देशांक और चौड़ाई, ऊंचाई मान का उपयोग करके हम छवि को क्रॉप कर सकते हैं और इसे एक फ़ाइल में संग्रहीत कर सकते हैं।

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

नोट: http://allselenium.info/capture-screenshot-element-using-python-selenium-webdriver/ से लिया गया


अर्धविराम के साथ क्या है?
Maikflow

3

के माध्यम से कई तरीके हैं की तथा स्क्रीनशॉट लेने के लिए क्लाइंट उपयोग करके


जावा के तरीके

स्क्रीनशॉट लेने के लिए विभिन्न जावा तरीके निम्नलिखित हैं :

  • TakesScreenshot इंटरफ़ेस getScreenshotAs()से उपयोग करना :

    • कोड ब्लॉक:

      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();
          }
      }
      
    • स्क्रीनशॉट:

Mads_Cruz_screenshot

  • यदि वेबपेज है jQuery सक्षम आप उपयोग कर सकते हैंसे pazone / Ashot पुस्तकालय:

    • कोड ब्लॉक:

      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();
          }
      }
      
    • स्क्रीनशॉट:

firefoxScreenshot.png

  • का उपयोग करते हुए से / सेलेनियम-शटरबग assertthat पुस्तकालय:

    • कोड ब्लॉक:

      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();
          }
      }
      
    • स्क्रीनशॉट:

2019_03_12_16_30_35_787.png


अजगर के तरीके

स्क्रीनशॉट लेने के लिए विभिन्न पायथन तरीके निम्नलिखित हैं :

  • save_screenshot()विधि का उपयोग:

    • कोड ब्लॉक:

      from selenium import webdriver
      
      driver = webdriver.Chrome(r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get("http://google.com")
      driver.save_screenshot('./Screenshots/save_screenshot_method.png')
      driver.quit()
      
    • स्क्रीनशॉट:

save_screenshot_method.png

  • get_screenshot_as_file()विधि का उपयोग:

    • कोड ब्लॉक:

      from selenium import webdriver
      
      driver = webdriver.Chrome(r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get("http://google.com")
      driver.get_screenshot_as_file('./Screenshots/get_screenshot_as_file_method.png')
      driver.quit()
      
    • स्क्रीनशॉट:

get_screenshot_as_file_method.png

  • get_screenshot_as_png()विधि का उपयोग:

    • कोड ब्लॉक:

      from selenium import webdriver
      
      driver = webdriver.Chrome(r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get("http://google.com")
      screenPnG = driver.get_screenshot_as_png()
      #Crop it back to the window size (it may be taller)
      box = (0, 0, 1366, 728)
      im = Image.open(BytesIO(screenPnG))
      region = im.crop(box)
      region.save('./Screenshots/get_screenshot_as_png_method.png', 'PNG', optimize=True, quality=95)
      driver.quit()
      
    • स्क्रीनशॉट:

get_screenshot_as_png_method.png


2

अजगर

आप अजगर वेब ड्राइवर का उपयोग करके खिड़कियों से छवि को कैप्चर कर सकते हैं। स्क्रीनशॉट को कैप्चर करने के लिए नीचे दिए गए कोड का उपयोग करें

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

4
यह उत्तर एक डुप्लिकेट है जिसे मूल पायथन उत्तर के कई वर्षों बाद पोस्ट किया गया था।
कोरी गोल्डबर्ग

3
यह भी, यह जवाब पथ के नाम से पीछे नहीं हटता है .. जो एक त्रुटि का कारण बनेगा
कोरी गोल्डबर्ग

इसके अलावा, यह सेटअप कोड गायब है, यह लाइन अपने आप काम नहीं करेगी।
गतिविधि

2

जावा

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

इन दो तरीकों का उपयोग करके आप तारीख और समय के साथ एक स्क्रीन शॉट भी ले सकते हैं।


2

जावा

RemoteWebDriver का उपयोग करना, स्क्रीनशॉट क्षमता के साथ नोड को बढ़ाने के बाद, मैं स्क्रीनशॉट को इस तरह संग्रहीत करूंगा:

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

जहाँ भी आवश्यकता हो आप इस विधि का उपयोग कर सकते हैं। फिर, मुझे लगता है कि आप अचूक-रिपोर्ट / html / custom.css पर मावेन-अचूक-रिपोर्ट-प्लगइन की शैली शीट को अनुकूलित कर सकते हैं ताकि आपकी रिपोर्ट में प्रत्येक परीक्षण के लिए सही स्क्रीनशॉट का लिंक शामिल हो?


आजकल मैं इसे इस तरह से नहीं करूंगा। मैं शायद सेलेनाइड जैसे ढांचे का उपयोग करूंगा।
djangofan

2

जावा

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

आशा है इससे तुम्हारी समस्या का समाधान हो गया होगा


2

सी#

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


2

सी#

आप सेलेनियम के साथ स्क्रीनशॉट लेने के लिए निम्नलिखित कोड स्निपेट / फ़ंक्शन का उपयोग कर सकते हैं:

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

"System.Drawing.Imaging का उपयोग करना;" सभा।
अरनंब

मुझे इस लाइन को SaveAsFile कॉल में उपयोग करना था: ss.SaveAsFile (फ़ाइल नाम, स्क्रीनशॉटइमॉर्टरफ़ .Png); मैं पथ + @ "\" पर Path.Combine (फ़ोल्डर, फ़ाइल नाम) का उपयोग करना पसंद करता हूं, क्योंकि यह बेहतर तरीके से पढ़ता है, और मुझे लगता है कि यह फ़ोल्डर / फ़ाइल नाम स्वरूपण .variations की अधिक क्षमा हो सकती है। केवल व्यक्तिगत प्राथमिकता। तो वह रेखा बन जाती है: फ़ाइल नाम = Path.Combine (पथ, फ़ाइल नाम + ".Png");
डेवलपर


2

जावा

टेस्टनाम और टाइमस्टैम्प के साथ सेलेनियम में विफलताओं के लिए स्क्रीनशॉट कैप्चर करने का तरीका।

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

यदि आपको यह (या कोई भी) उत्तर उपयोगी लगा हो, तो कृपया इसे लाइक करें। यदि यह आपके प्रश्न का उत्तर देता है, तो कृपया इसे स्वीकृत उत्तर के रूप में चिह्नित करें। धन्यवाद!
अनुज तेवतिया

1

C # (Ranorex API)

public static void ClickButton()
{
    try
    {
        // code
    }
    catch (Exception e)
    {
        TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
        Report.Screenshot();
        throw (e);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.