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




selenium-webdriver screenshot (20)

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

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


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

अजगर

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

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

अजगर

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

from selenium import webdriver

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

.get_screenshot_as_file(filename) , a .get_screenshot_as_file(filename) विधि भी मौजूद है जो वही काम करती है।

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

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


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

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

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

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


जावा

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

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

जावा

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

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

जावा

सोचा था कि मैं अपना पूरा समाधान दूंगा क्योंकि स्क्रीन शॉट प्राप्त करने के दो अलग-अलग तरीके हैं। एक स्थानीय ब्राउज़र से है, और एक दूरस्थ ब्राउज़र से है। मैं छवि को एचटीएमएल रिपोर्ट में भी एम्बेड करता हूं

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

जावा

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

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

जावा

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

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


जावा

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

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

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

माणिक

require 'rubygems'
require 'selenium-webdriver'

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

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


माणिक

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

शक्ति कोशिका

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

सी # (रानोरैक्स एपीआई)

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

सी#

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

सी#

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

सेलेनाइड / जावा

यहां बताया गया है कि Selenide प्रोजेक्ट यह कैसे करता है, इसे करने के किसी भी अन्य तरीके से आसान बनाता है:

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

जुनीट के लिए:

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

टेस्टएनजी के लिए:

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





screenshot