Selenium WebDriver kullanarak ekran görüntüsü almanın mümkün olup olmadığını bilen var mı? (Not: Selenyum RC değil)
Selenium WebDriver kullanarak ekran görüntüsü almanın mümkün olup olmadığını bilen var mı? (Not: Selenyum RC değil)
Yanıtlar:
Evet mümkün. Aşağıdaki örnek Java'dadır:
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
Kendi dosya sisteminde olmanın yaygın olduğunu ve FirefoxDriver'ın ekran görüntülerini yazdığını unutmayın /tmp
.
HtmlUnitDriver
yapmadığını belirtmek gerekir (desteklenen sürücülerin bir listesi için selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/…TakesScreenshot
adresine bakın ). Ancak HTML olarak kaydedebilirsiniz.
org.apache.commons.io.FileUtils
Her WebDriver'ın bir .save_screenshot(filename)
yöntemi vardır. Yani Firefox için şu şekilde kullanılabilir:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
Kafa karıştırıcı bir şekilde .get_screenshot_as_file(filename)
, aynı şeyi yapan bir yöntem de vardır.
Ayrıca şu yöntemler de vardır: .get_screenshot_as_base64()
(html içine gömmek için) ve .get_screenshot_as_png()
(ikili verileri almak için).
ve WebElements öğesinin .screenshot()
benzer şekilde çalışan ancak yalnızca seçilen öğeyi yakalayan bir yöntemi olduğunu unutmayın .
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
İsterseniz U arayabilirsiniz . U takeScreenshot()
tam olarak ne olduğunu bilmek fonksiyonuna bakmak gerekir . Belki tuval kullanarak javascript oluşturulan bir ikili görüntü. Oluşturulmadan önce dom olabilir. Bakın.
require 'rubygems'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :ie
driver.get "https://www.google.com"
driver.save_screenshot("./screen.png")
daha fazla dosya türü ve seçeneği mevcuttur ve bunları takes_screenshot.rb'de görebilirsiniz
headless
veFirefox
Bu sorunu çözdüm. Sen çoğaltmak olabilir RemoteWebDriver
arayüzleri kendi vekalet edilen sürücü uygular tüm vermek:
WebDriver augmentedDriver = new Augmenter().augment(driver);
((TakesScreenshot)augmentedDriver).getScreenshotAs(...); //works this way
PHPUnit_Selenium uzantısı sürüm 1.2.7'yi kullanır:
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"))
Bu yöntemi ekran görüntüsü almak için kullandım.
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();
}
}
Gerektiğinde bu yöntemi kullanabilirsiniz.
Burada eksik görünüyor - Java'da belirli bir öğenin ekran görüntüsünü almak :
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
bu.driver.manage (). Window (). Ekran boyutunu artırmaktır. SetSize (new Dimension (1680, 1050)); veya gerekli olmayan öğeleri css yoluyla kaldırmak için. Uygun çözüm y-ofsetini kaydırmadan hesaplamak olacaktır.
Firefox
eserler cezası o Boyutları dayalı tam Görüntüden eleman ekranını kırpar olarak. Gelen Chrome
elemanı olup görünüşüdür kısmı görüntüden kaydırma dışarı görünüşüdür bölümü içinde mevcut ise, bu eleman ince yakalar. document.documentElement.clientHeight
İstemci Yüksekliğini iki kez kaydırdıktan sonra ekran görüntüsü almak istiyorsak, (location.y)-2*clientHeight
tam eleman ekran görüntüsü almak için kullanın . Bana yardımcı olduğu için bu yazı için teşekkürler ...
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 gerektirir:
.NETFramework v4.5.2 ile test edilmiştir
Kabul edilen cevabı işe alamadım, ancak mevcut WebDriver belgelerine göre , OS X 10.9'da Java 7 ile aşağıdakiler benim için iyi çalıştı:
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
işlevi nasıl arayacağınızı gösteren bir kod ekler misiniz ? Özellikle $event
değişken nereden geliyor? Ben tam bir Selenyum çaylakım, bu nedenle daha önce Selenyum bilgisinin çok takdir edileceğini varsaymayan bu soruya bir cevap!
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)
Diğer sürücüler ...
$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
daha System.Drawing
ad.
Python - Element Ekran Görüntüsü:
Bu oldukça eski bir soru ve birden fazla cevabı var. Ancak Python kullanarak belirli bir web öğesinin ekran görüntüsünü almak burada eksik.
yer
Bir web öğesinin sayfadaki kendi konumu vardır ve genellikle x ve y piksel olarak ölçülür ve öğenin (x, y) koordinatları olarak bilinir. Ve konum nesnesi iki değer içeriyor.
boyut
Konum gibi, her WebElement'in genişliği ve yüksekliği vardır; Boyut nesnesi olarak kullanılabilir.
(X, y) koordinatları ve genişlik, yükseklik değerlerini kullanarak görüntüyü kırpabilir ve bir dosyada saklayabiliriz.
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')
Not: Alındığı http://allselenium.info/capture-screenshot-element-using-python-selenium-webdriver/
Birden çok yöntem var selenyum'ler java ve pitonkullanarak ekran görüntüsü almak için müşteriselenyum-webdriver
Ekran görüntüsü almak için farklı Java yöntemleri şunlardır :
Kullanılması getScreenshotAs()
gelen TakesScreenshot Arayüzü:
Kod Bloğu:
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();
}
}
Ekran görüntüsü:
Eğer web sayfası olan jquery kullanabileceğiniz etkinBir atışdan pazone / ashot kütüphanesinde:
Kod Bloğu:
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();
}
}
Ekran görüntüsü:
kullanma selenyum-fotoğrafkurduden / selen fotoğrafkurdu assertthat kütüphanesi:
Kod Bloğu:
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();
}
}
Ekran görüntüsü:
Ekran görüntüsü almak için farklı Python yöntemleri şunlardır :
save_screenshot()
Yöntemi kullanarak :
Kod Bloğu:
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()
Ekran görüntüsü:
get_screenshot_as_file()
Yöntemi kullanarak :
Kod Bloğu:
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()
Ekran görüntüsü:
get_screenshot_as_png()
Yöntemi kullanarak :
Kod Bloğu:
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()
Ekran görüntüsü:
Python web sürücüsünü kullanarak pencerelerden görüntü yakalayabilirsiniz. Ekran görüntüsünü yakalamak için hangi sayfanın gerekli olduğu kodu kullanın
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;
}
Bu iki yöntemi kullanarak tarih ve saatle birlikte ekran görüntüsü de alabilirsiniz.
RemoteWebDriver'ı kullanarak, Düğümü ekran görüntüsü yeteneği ile büyüttükten sonra, ekran görüntüsünü şu şekilde depolarım:
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();
}
}
Gerektiğinde bu yöntemi kullanabilirsiniz. Daha sonra, maven-surefire-report-plugin'in stil sayfasını surefire-report / html / custom.css dosyasında özelleştirebildiğinizi ve raporlarınızın her test için doğru ekran görüntüsüne bağlantı içerdiğini varsayalım?
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));
Umarız bu sorununuzu çözer
C #
Selenyum ile ekran görüntüsü almak için aşağıdaki kod snippet / işlevini kullanabilirsiniz:
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);
}
AShot API'sını deneyebilirsiniz. İşte aynı şey için github bağlantısı.
https://github.com/yandex-qatools/ashot
Buradaki bazı testler ...
JAVA
TestName ve Zaman Damgası eklenmiş Selenium'daki hatalar için Ekran Görüntüsü Alma Yöntemi.
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();
}
}
public static void ClickButton()
{
try
{
// code
}
catch (Exception e)
{
TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
Report.Screenshot();
throw (e);
}
}