সেলেনিয়াম ওয়েবড্রাইভার দিয়ে কীভাবে স্ক্রিনশট নেবেন


499

সেলেনিয়াম ওয়েবড্রাইভার ব্যবহার করে স্ক্রিনশট নেওয়া সম্ভব কিনা তা কি কেউ জানেন? (দ্রষ্টব্য: সেলেনিয়াম আরসি নয়)


ওয়েবড্রাইভার ওয়্যার প্রোটোকল দিয়ে এটি করার একমাত্র উপায় আছে তবে সরাসরি এই প্রোটোকলটি কেউ ব্যবহার করে না। পরিবর্তে, লোকেরা বিভিন্ন ভাষার বাইন্ডিং / লাইব্রেরি ব্যবহার করে যা নিম্ন-স্তরের প্রোটোকলটি মোড় করে। ভাষার বাইন্ডিং প্রচুর পরিমাণে রয়েছে, তাই আপনি কোনটি ব্যবহার করতে চান তা আপনাকে বলতে হবে। অন্যথায়, কেবলমাত্র অনেকগুলি উত্তর রয়েছে।
ওবল্লিস

আপনি কোন প্রোগ্রামিং ভাষা ব্যবহার করছেন?
রিপন আল ওয়াসিম

আপনি কি পুরো পৃষ্ঠার স্ক্রিনশট বা একটি নির্দিষ্ট উপাদান নিতে চান?
রিপন আল ওয়াসিম

হ্যাঁ, পুরো পৃষ্ঠাতে বা সেলেনিয়াম ওয়েবড্রাইভারের সাথে কোনও নির্দিষ্ট উপাদানটির জন্য স্ক্রিনশট নেওয়া সম্ভব
রিপন আল ওয়াসিম

উত্তর:


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এটির নিজস্ব ফাইল সিস্টেমে থাকা সাধারণ, এবং ফায়ারফক্সড্রাইভার এতে স্ক্রিনশট লিখে /tmp
টম অ্যান্ডারসন

9
এটি ব্যর্থ করার জন্য কি কোনও উপায় আছে?
কিছু_ অন্য_গুই

6
এটি কার্যকর করার মতো বিষয় যা HtmlUnitDriverকার্যকর করা হয়নি TakesScreenshot( সমর্থিত ড্রাইভারের তালিকার জন্য selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/… দেখুন )। তবে আপনি এইচটিএমএল হিসাবে সংরক্ষণ করতে পারেন।
ওয়ার্নাইট

7
ফাইল ইউটিলস ক্লাস ব্যবহারের জন্য কোন প্যাকেজটি আমদানি করতে হবে?
রিপন আল ওয়াসিম

7
@ রিপনআলওয়াসিম সম্ভবতorg.apache.commons.io.FileUtils
বেন

269

পাইথন

প্রতিটি ওয়েবড্রাইভারের একটি .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()(এইচটিএমএল এম্বেড করার জন্য ) এবং .get_screenshot_as_png()(বাইনারি ডেটা পুনরুদ্ধারের জন্য)।

এবং নোট করুন যে ওয়েবএলিমেন্টগুলির একটি .screenshot()পদ্ধতি রয়েছে যা একইভাবে কাজ করে তবে কেবলমাত্র নির্বাচিত উপাদানটি ক্যাপচার করে।


অন্যান্য ব্রাউজারগুলির জন্য ওয়েবড্রাইভার উদাহরণটি বিনিময় করুন। আপনি শুধু রাষ্ট্র সহ আপনার ওয়েবসাইটের স্ক্রিনশট চান তবে কটাক্ষপাত আছে Usersnap
গ্রেগোর

@ ডেভিডআরথলিজবার্গার দুর্দান্ত সব কিছু জানায়, তবে আপনার মন্তব্যের কোনও উত্তর নেই আমার উত্তরটির সাথে
কোরি গোল্ডবার্গ ২

একটি পূর্ণ পৃষ্ঠার একটি scrennshot না শুধুমাত্র দৃশ্যমান এলাকা তৈরি করতে হলে, stich করার জন্য এখানে আমার উত্তর থেকে আমার পাইথন কোড ব্যবহার করুন: stackoverflow.com/questions/37906704/...
দীর্ঘসূত্রী Thommen

1
@ কোরি গোল্ডবার্গ সত্য, আপনার উত্তর নিয়ে কিছুই করার নেই। তবে আমার পুরানো স্ক্রিপ্টটি একটি পুরানো এফএফ ব্যবহার করেছে এবং এটি পুরো পৃষ্ঠাটি নিয়েছে, কেবল ভিউপোর্ট নয়। তারা এটিকে মান হিসাবে পরিবর্তিত করার পরে এখন কেবল ভিউপোর্ট। সুতরাং আমি একই সমস্যা কারও সাহায্য করতে চেয়েছিলাম। এবং হ্যাঁ, স্থির উপাদানগুলি স্ক্রোল / স্টিচের একটি বাস্তব ব্যথা!
ফ্যাবিয়ান থমেন

1
আরও একটি জিনিস যা আমাকে প্রচুর পরিমাণে সহায়তা করেছিল, আপনার যদি চিত্রের মাত্রা পরিবর্তন করতে হয়, তবে স্ন্যাপশটটি ব্যবহার করে নেওয়ার আগে উইন্ডোর আকারটি কেবল সেট করুন driver.set_window_size(1366, 728)
বানচ্যব্রত

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

আপনার মানে কি এটি ডেস্কটপ এবং সমস্ত কিছু পেয়েছে? বা আপনি বোঝাতে চেয়েছেন যে এটি কেবল ভিউপোর্ট পেয়েছে?
vtortola

এটি কেবলমাত্র ড্রাইভারের সুযোগের মধ্যে যা পাওয়া যাবে তা একাধিক সমান্তরাল পরীক্ষা গ্রহণের অনুমতি দেওয়া। মনে রাখবেন যে আপনার ড্রাইভারের প্রধান উইন্ডো ফোকাসে যদি একটি স্ক্রোলবার থাকে বা এটি কোনও একক পৃষ্ঠা থেকে বেশি হয় তবে এটি জুম বাড়বে না।
বেন

3
SaveAsFile- এ আপডেট করুন (স্ট্রিং পাথ, স্ক্রিনশট ইমেজফর্ম্যাট ফর্ম্যাট) স্ক্রিনশট আইমেজ ফরমেট.জেপেইগ
কাইরান

1
এটি আমার পক্ষে কাজ করেছিল! আমি গ্রাফিক্স নেমস্পেস থেকে কপিফ্রোমস্ক্রিন ব্যবহার করছিলাম। উপরের সমাধানটির সুবিধাটি হ'ল টিএফএস থেকে শিরোনামহীন উপায়ে কোড কল করা হলে এটি কাজ করে। আমার পুরাতন কপিরফ্রমস্ক্রিন পদ্ধতিটি কেবল তখন ভিজ্যুয়াল স্টুডিও থেকে সেলেনিয়াম পরীক্ষা চালানোর সময় কাজ করেছিল তবে কখনই আমার টিএফএস রান পরীক্ষার জন্য কাজ করে নি।
ইওয়ান

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
ব্রাউজারস্ট্যাক এটি কীভাবে বর্ণনা করে তার অনুরূপ: ব্রাউজারস্ট্যাক.
com/আউটমেট / নোড#enhancements- স্ক্রিনশটস

ডেটা.রেজলে আপনি প্রথম বন্ধনে কী করছেন?
জন দেমেট্রিও

@ জনডেমিট্রিও, ডেটা হ'ল অবজেক্ট বা ভেরিয়েবলের নাম যা আপনি যখন কল করবেন তখন তৈরি হবে। var1আপনি চাইলে আপনি এটি কল করতে পারেন। ইউ দিকে তাকানো উচিত takeScreenshot()ক্রিয়া সম্পর্কে অবগত হওয়ার ঠিক কি এটা। ক্যানভাস ব্যবহার করে জাভাস্ক্রিপ্ট থেকে বাইনারি ছবি রেন্ডার হতে পারে। রেন্ডার হওয়ার আগে এটি ডোম হতে পারে। মধ্যে তাকান।
এম

66

চুনি

require 'rubygems'
require 'selenium-webdriver'

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

আরও ফাইলের ধরণ এবং বিকল্পগুলি উপলভ্য এবং আপনি সেগুলি_স্ক্রিনশট.আরবিতে দেখতে পারেন


সেলেনিয়াম গ্রিড ২ ব্যবহার করে আমার জন্য দুর্দান্ত কাজ করেছেন OS ওএস এক্স স্নো লেপার্ডে স্ক্রিপ্ট এবং হাব চলছে; এক্সভিএফবি এর অধীনে ফায়ারফক্স 3.6.18 এর সাথে রেডহ্যাট ইএল 4 এ নোড চলছে।
মার্কড

1
পুরো দৃশ্যমান স্ক্রিনশট নেওয়ার কোনও উপায় কি কেবল দৃশ্যমান অঞ্চল নয়?
অরিহন্ত গোধা

2
সম্পূর্ণ পৃষ্ঠাটি ডিফল্ট হিসাবে নেওয়া হয়। কমপক্ষে ব্যবহার headlessএবংFirefox
অ্যাশলে

35

জাভা

আমি এই সমস্যাটির সমাধান করেছি। RemoteWebDriverএটির প্রক্সাইড ড্রাইভার প্রয়োগকৃত সমস্ত ইন্টারফেসগুলি দেওয়ার জন্য আপনি এটি বৃদ্ধি করতে পারেন :

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

যদি আপনি এটি করেন, তবে আপনার থ্রেডআইড সহ কোনও ফাইল নেমে স্ক্রিনশটগুলি অনুলিপি করার দরকার নেই যাতে আপনি বলতে পারেন যে আপনার ড্রাইভারের কোন থ্রেড / দৃষ্টান্তের স্ক্রিনশটটি ছুঁড়ে ফেলেছে? অন্যথায়, একটি গ্রিড নোডে ব্রাউজারের একাধিক উদাহরণ একে অপরের স্ক্রিনশটগুলিকে ওভাররাইট করে?
জাঙ্গোফান

1
আমি এটি উল্লেখ করতে চাই যে কেবলমাত্র এই সমাধানটি আমার জন্য মাথা বিহীন ক্রোমড্রাইভার ব্যবহার করে
গ্যাব্রিয়েলরাডো

34

পিএইচপি (পিএইচপিউনিট)

পিএইচপিউনিট_সেলেনিয়াম এক্সটেনশন সংস্করণ 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! আমি এটি সম্পর্কে আরও জানতে চাই, সেলেনিয়াম আমার কাছে নতুন এবং আমি ভিজ্যুয়াল টেস্টগুলি করার জন্য বেশ কয়েকটি ব্রাউজার এবং
ওএসে

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

আপনি যেখানে প্রয়োজন সেখানে এই পদ্ধতিটি ব্যবহার করতে পারেন।


আপনার ফোকাসটি সর্বদা ব্রাউজারে থাকা উচিত, অন্যথায় বর্তমানে যা কিছু নিবদ্ধ তার স্ন্যাপশট নেয়।
কুশাল

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এইড্রাইভার.ম্যানেজ ()। উইন্ডো ()। সেটসাইজ (নতুন মাত্রা (1680, 1050)) বাড়ানো; বা CSS এর মাধ্যমে কোনও অ প্রয়োজনীয় উপাদান অপসারণ করতে। সঠিক সমাধানটি হবে স্ক্রোলিং থেকে 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();
        }
    }
}

নিউগেটপ্যাকেজগুলি প্রয়োজন:

  1. ফ্যান্টমজেএস ২.০.০
  2. সেলেনিয়াম.সপোর্ট্ট 2.48.2
  3. সেলেনিয়াম.ওয়েবড্রাইভার 2.48.2

.NETFramework v4.5.2 দিয়ে পরীক্ষিত


5

জাভা

আমি কাজের স্বীকৃত উত্তর পেতে পারি না, তবে বর্তমান ওয়েবড্রাইভার ডকুমেন্টেশন অনুসারে ওএস এক্স ১০.৯-তে জাভা with নিয়ে নিম্নলিখিতটি আমার পক্ষে ভাল কাজ করেছে:

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

এই কি ভাষা?
কোডিগম্যান

দেখে মনে হচ্ছে এটি রুবিতে, কোনও নির্দিষ্ট ওয়েব ড্রাইভার ব্যবহার না করে
জেমস

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

ফেসবুক / ওয়েবড্রাইভারের বর্তমান সংস্করণে পদ্ধতিটি স্ক্রিনশট () এবং ফাইলটি সংরক্ষণের আগে আউটপুট বেস 64_encode () করা দরকার হয় না।
বিলিচার্ডস

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' করে returns

আয়তন

অবস্থানের মতো, প্রতিটি ওয়েব এলিমেন্টের প্রস্থ এবং উচ্চতা রয়েছে; আকার অবজেক্ট হিসাবে উপলব্ধ।

  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-used-python-selenium-webdriver/ থেকে নেওয়া


সেমিকোলনসের কী আছে?
মাইকফ্লো

3

এর মাধ্যমে একাধিক পদ্ধতি রয়েছে এর এবং একটি স্ক্রিনশট নিতে ক্লায়েন্ট ব্যবহার করে


জাভা পদ্ধতি

স্ক্রিনশট নেওয়ার জন্য বিভিন্ন জাভা পদ্ধতি নীচে দেওয়া হয়েছে :

  • টেকস্ক্রিনশট ইন্টারফেস 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

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

জাভা

স্ক্রিনশট সক্ষমতার সাথে নোড বাড়ানোর পরে, রিমোট ওয়েবড্রাইভার ব্যবহার করে, আমি স্ক্রিনশটটি এভাবে সংরক্ষণ করব:

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

আপনি যেখানে প্রয়োজন সেখানে এই পদ্ধতিটি ব্যবহার করতে পারেন। তারপরে, আমি ধরে নিলাম আপনি মেইন-শিফারফায়ার-রিপোর্ট-প্লাগইন-এর স্টাইল শিটটি শিফায়ার-রিপোর্টস / এইচটিএমএল / কাস্টম সিএসএসে কাস্টমাইজ করতে পারবেন যাতে আপনার রিপোর্টগুলি প্রতিটি পরীক্ষার জন্য সঠিক স্ক্রিনশটের লিঙ্কটি অন্তর্ভুক্ত করে?


আজকাল আমি এইভাবে এটি করতাম না। আমি সম্ভবত সেলেনাইডের মতো কাঠামো ব্যবহার করব।
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);
    }

"সিস্টেম.ড্রেইং.ইমিজিং ব্যবহার করে;" সমাবেশ।
আরনুম্ব্ব

আমাকে SaveAsFile কলটিতে এই লাইনটি ব্যবহার করতে হয়েছিল: ss.SaveAsFile (ফাইলের নাম, স্ক্রিনশট আইমেজ ফরমেট.পিএনজি); আমি পাথ.কোমাইন (ফোল্ডার, ফাইলের নাম) "+" "\" পাথের উপরে ব্যবহার করতেও পছন্দ করি কারণ এটি আরও ভাল পড়ে এবং আমি মনে করি এটি ফোল্ডার / ফাইল নাম বিন্যাসকরণের পরিবর্তনগুলি আরও ভুলে যেতে পারে। শুধুমাত্র ব্যক্তিগত পছন্দ। সুতরাং সেই লাইনটি হয়ে যায়: ফাইলের নাম = পথ.কোমাইন (পথ, ফাইলের নাম + ".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

সি # (রানোরেক্স এপিআই)

public static void ClickButton()
{
    try
    {
        // code
    }
    catch (Exception e)
    {
        TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
        Report.Screenshot();
        throw (e);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.