किसी को पता है कि क्या सेलेनियम वेबड्राइवर का उपयोग करके स्क्रीनशॉट लेना संभव है? (नोट: सेलेनियम आरसी नहीं)
किसी को पता है कि क्या सेलेनियम वेबड्राइवर का उपयोग करके स्क्रीनशॉट लेना संभव है? (नोट: सेलेनियम आरसी नहीं)
जवाबों:
हाँ यह संभव है। निम्नलिखित उदाहरण जावा में है:
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"));
/tmp
इसका अपने फाइल सिस्टम पर होना आम बात है , और FirefoxDriver स्क्रीनशॉट को लिखता है /tmp
।
HtmlUnitDriver
लागू ड्राइवरों की सूची के लिए लागू नहीं होता है TakesScreenshot
( selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/… देखें )। लेकिन आप HTML के रूप में सहेज सकते हैं।
org.apache.commons.io.FileUtils
प्रत्येक 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()
विधि है जो समान रूप से काम करती है, लेकिन केवल चयनित तत्व को पकड़ती है।
driver.set_window_size(1366, 728)
।
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;
}
}
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);
});
});
var1
आप चाहें तो इसे यू कह सकते हैं । U को यह देखने के लिए takeScreenshot()
फ़ंक्शन को देखना चाहिए कि यह वास्तव में क्या है। शायद कैनवास का उपयोग करके जावास्क्रिप्ट से प्रदान की गई एक द्विआधारी छवि। यह रेंडर होने से पहले यह डोम हो सकता है। इस पर गौर करें।
require 'rubygems'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :ie
driver.get "https://www.google.com"
driver.save_screenshot("./screen.png")
अधिक फ़ाइल प्रकार और विकल्प उपलब्ध हैं और आप उन्हें take_screenshot.rb में देख सकते हैं
headless
औरFirefox
मुझे यह मुद्दा हल हो गया। आप RemoteWebDriver
इसे अपने सभी अनुमानित ड्राइवर के इम्प्लेसेस को देने के लिए संवर्धित कर सकते हैं :
WebDriver augmentedDriver = new Augmenter().augment(driver);
((TakesScreenshot)augmentedDriver).getScreenshotAs(...); //works this way
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');
}
...
}
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);
}
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;
}
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"))
मैंने स्क्रीन शॉट लेने के लिए इस विधि का उपयोग किया।
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);
}
code
बढ़ाना है। इस driver.manage ()। Window ()। SetSize (नया आयाम (1680, 1050)); या सीएसएस के माध्यम से किसी भी गैर आवश्यक तत्वों को हटाने के लिए। स्क्रॉलिंग से y- ऑफसेट की गणना करने के लिए उचित समाधान होगा।
Firefox
काम करता है ठीक उस पर आयाम आधारित पूर्ण छवि से तत्व स्क्रीन फसलों के रूप में। में Chrome
अगर तत्व उस दृश्य भाग छवि से स्क्रॉल बाहर के साथ दृश्य भाग में उपलब्ध है यह तत्व ठीक कैप्चर करता है। यदि हम document.documentElement.clientHeight
क्लाइंट को दो बार स्क्रॉल करने के बाद स्क्रीनशॉट लेना चाहते (location.y)-2*clientHeight
हैं तो सटीक एलिमेंट स्क्रीनशॉट प्राप्त करने के लिए उपयोग करें। इस पोस्ट के लिए धन्यवाद क्योंकि यह मेरी मदद करता है ...
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 की आवश्यकता है:
.NETFramework v4.5.2 के साथ परीक्षण किया गया
मुझे काम करने के लिए स्वीकृत उत्तर नहीं मिला, लेकिन वर्तमान वेबड्राइवर प्रलेखन के अनुसार , निम्नलिखित ने मेरे लिए 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);
}
}
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
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
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));
}
}
takescreenshot
फ़ंक्शन को कैसे कॉल करें ? विशेष $event
रूप से चर कहाँ से आता है? मैं पूरी तरह सेलेनियम नॉब हूँ इसलिए इस सवाल का जवाब है कि पूर्व सेलेनियम ज्ञान ग्रहण नहीं करता है बहुत सराहना की जाएगी!
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
।
अजगर - तत्व का स्क्रीनशॉट:
यह एक बहुत पुराना प्रश्न है और इसके कई उत्तर हैं। हालाँकि ऐसा लगता है कि पायथन का उपयोग करने वाला एक विशेष वेब तत्व का स्क्रीनशॉट यहां गायब है।
स्थान
एक वेब तत्व की पृष्ठ पर अपनी स्थिति है और आम तौर पर इसे x और y पिक्सेल में मापा जाता है और तत्व के (x, y) सह-निर्देश के रूप में जाना जाता है। और स्थान ऑब्जेक्ट में दो मान होते हैं।
आकार
स्थान की तरह, प्रत्येक WebElement की चौड़ाई और ऊंचाई है; आकार वस्तु के रूप में उपलब्ध है।
(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/ से लिया गया
के माध्यम से कई तरीके हैं सेलेनियमकी जावा तथा अजगरस्क्रीनशॉट लेने के लिए क्लाइंट उपयोग करकेसेलेनियम-webdriver
स्क्रीनशॉट लेने के लिए विभिन्न जावा तरीके निम्नलिखित हैं :
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();
}
}
स्क्रीनशॉट:
यदि वेबपेज है 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();
}
}
स्क्रीनशॉट:
का उपयोग करते हुए सेलेनियम-शटरबगसे / सेलेनियम-शटरबग 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();
}
}
स्क्रीनशॉट:
स्क्रीनशॉट लेने के लिए विभिन्न पायथन तरीके निम्नलिखित हैं :
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()
स्क्रीनशॉट:
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_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()
स्क्रीनशॉट:
आप अजगर वेब ड्राइवर का उपयोग करके खिड़कियों से छवि को कैप्चर कर सकते हैं। स्क्रीनशॉट को कैप्चर करने के लिए नीचे दिए गए कोड का उपयोग करें
driver.save_screenshot('c:\foldername\filename.extension(png,jpeg)')
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;
}
इन दो तरीकों का उपयोग करके आप तारीख और समय के साथ एक स्क्रीन शॉट भी ले सकते हैं।
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 पर मावेन-अचूक-रिपोर्ट-प्लगइन की शैली शीट को अनुकूलित कर सकते हैं ताकि आपकी रिपोर्ट में प्रत्येक परीक्षण के लिए सही स्क्रीनशॉट का लिंक शामिल हो?
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 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);
}
आप एशोट एपीआई के लिए एक कोशिश दे सकते हैं। यहाँ उसी के लिए github लिंक दिया गया है।
https://github.com/yandex-qatools/ashot
यहाँ कुछ परीक्षण ...
जावा
टेस्टनाम और टाइमस्टैम्प के साथ सेलेनियम में विफलताओं के लिए स्क्रीनशॉट कैप्चर करने का तरीका।
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();
}
}