Selenium WebDriverでスクリーンショットを撮る方法


499

Selenium WebDriverを使用してスクリーンショットを撮ることができるかどうか誰か知っていますか?(注:Selenium RCではありません)


WebDriver Wire Protocolでこれを行う方法はおそらく1つしかありませんが、このプロトコルを直接使用する方法はありません。代わりに、低レベルのプロトコルをラップするさまざまな言語バインディング/ライブラリを使用します。たくさんの言語バインディングがあるので、どれを使用したいかを言う必要があります。そうでなければ、答えが多すぎます。
2014年

どのプログラミング言語を使用していますか?
Ripon Al Wasim

ページ全体または特定の要素のスクリーンショットを撮りますか?
Ripon Al Wasim

はい、Selenium WebDriverを使用して、ページ全体または特定の要素のスクリーンショットを撮ることができます
Ripon Al Wasim

回答:


507

ジャワ

はい、可能です。次の例はJavaでの例です。

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
コピー元とコピー先が同じファイルシステム上にない可能性がある場合は、ファイルの名前を変更するのではなく、コピーすることをお勧めします。ファイルシステムの境界を越えて名前を変更することはできません(少なくとも、UNIXでは)。/tmp独自のファイルシステム上にあることは一般的であり、FirefoxDriverはスクリーンショットをに書き込みます/tmp
トムアンダーソン、

9
失敗した場合にのみそれを行う方法はありますか?
some_other_guy

6
HtmlUnitDriver実装されていないことは注目に値しますTakesScreenshot(サポートされているドライバーのリストについては、selenium.googlecode.com / git / docs / api / java / org / openqa / selenium /…を参照してください)。ただし、HTMLとして保存できます。
火曜日

7
FileUtilsクラスを使用するには、どのパッケージをインポートする必要がありますか?
Ripon Al Wasim 2014

7
@RiponAlWasim多分org.apache.commons.io.FileUtils
ベン

270

パイソン

各WebDriverには.save_screenshot(filename)メソッドがあります。したがって、Firefoxでは、次のように使用できます。

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()同様に機能するメソッドがありますが、選択した要素のみをキャプチャします。


他のブラウザーの場合は、webdriverインスタンスを交換してください。状態を含むウェブサイトのスクリーンショットだけが必要な場合は、Usersnapをご覧ください。
グレゴール

@DavidRöthlisbergerそれはすべて素晴らしいですが、あなたのコメントは私の答えとは何の関係もありません
Corey Goldberg

全ページのscrennshotだけでなく、表示領域を作成するには、シュティッヒためにここに私の答えから私のpythonコードを使用します。stackoverflow.com/questions/37906704/...
ファビアンThommen

1
@CoreyGoldbergはい、あなたの答えとは関係ありません。しかし、私の古いスクリプトは古いFFを使用しており、ビューポートだけでなくページ全体が必要でした。標準に変更した後は、ビューポートのみになりました。だから私は同じ問題を抱えている誰かを助けたいと思いました。そして、はい、固定要素はスクロール/スティックの本当の痛みです!
Fabian Thommen 2017年

1
非常に役立つもう1つの点は、画像の寸法を変更する必要がある場合は、ウィンドウサイズを設定してから、を使用してスナップショットを作成することdriver.set_window_size(1366, 728)です。
SpoiledBrat

110

C#

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 2015

あなたはそれがデスクトップとすべてを取得することを意味しますか?それともビューポートを取得するだけですか?
vtortola 2017年

ドライバーのスコープ内にあるものだけを取得します。これは、複数の並列テストを実行できるようにするためです。ドライバーのメインウィンドウフォーカスにスクロールバーがある場合、または1ページを超える場合は、ズームアウトしないことに注意してください。
Ben

3
SaveAsFile(string path、ScreenshotImageFormat format)ScreenshotImageFormat.Jpegへの更新
Kieran

1
これは私のために働いた!Graphics名前空間のCopyFromScreenを使用していました。上記のソリューションの利点は、コードがTFSからヘッドレスで呼び出されたときに機能することです。私の古いCopyFromScreenメソッドは、Visual Studioからセレンテストを実行するときにのみ機能しましたが、TFS実行テストでは機能しませんでした。
ユアン

74

JavaScript(Selenium-Webdriver)

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

括弧内で正確に何をしていますか?
John Demetriou

@ JohnDemetriou、dataは、呼び出し時に作成されるオブジェクトまたは変数の名前です。Uはvar1、必要に応じてそれを呼び出すことができます。UはtakeScreenshot()関数を見て、それが何であるかを正確に知る必要があります。たぶん、キャンバスを使用してJavaScriptからレンダリングされたバイナリイメージ。レンダリングされる前は、domである可能性があります。見てください。
m3nda 2016年

66

ルビー

require 'rubygems'
require 'selenium-webdriver'

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

より多くのファイルタイプとオプションが利用可能で、takes_screenshot.rbで確認できます


OS X Snow Leopardで実行されているSelenium Grid 2のスクリプトとハブを使用して、私はうまくいきました。Xvfbの下でFirefox 3.6.18を搭載したRedHat EL 4で実行されているノード。
MarkD、2011

1
表示されている領域だけでなく、ページ全体のスクリーンショットを撮る方法はありますか?
Arihant Godha 2014

2
デフォルトでは全ページが取得されます。少なくともheadlessandFirefox
Ashley

35

ジャワ

この問題は解決しました。を補強しRemoteWebDriverて、プロキシされたドライバが実装するすべてのインターフェースを提供できます。

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

その場合は、スクリーンショットをスローしたドライバーのどのスレッド/インスタンスがわかるように、スクリーンショットをthreadIdでファイル名にコピーする必要はありませんか?そうでなければ、1つのグリッドノード上のブラウザーの複数のインスタンスが他のスクリーンショットを上書きするでしょうか?
djangofan 2013

1
ヘッドレスChromeDriverを使用してこのソリューションのみが機能したことを指摘したいと思います
GabrielRado

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

だぁぁぁぁぁん!私はこれについてもっと知りたいと思います
。Seleniumは初めての私で

25

C#

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

どのドライバーを使用しましたか?新しいAugmenter()。augment(driver);
kozla13 2017年

12

ジソン

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

Java(ロボットフレームワーク)

この方法でスクリーンショットを撮りました。

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

この方法は、必要に応じて使用できます。


常にブラウザに焦点を当てる必要があります。それ以外の場合は、現在焦点が合っているもののスナップショットを撮ります。
kushal.8

8

ジャワ

ここに欠けているようです-Javaの特定の要素のスクリーンショットを撮ります:

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 + height)がRaster
Ichwardortの

コードを試しましたか?私が最後に試したとき、それはうまくいきました。
Erki M. 2015

1
スクロールせずに表示される要素をキャプチャしようとする限り、問題なく機能します。要素をスクロールしてキャプチャする必要がある場合、ページの上部からyオフセットが計算され、全画面イメージの境界を超えます。したがって、最も簡単な解決策は、画面サイズを大きくすることですcodethis.driver.manage()。window()。setSize(new Dimension(1680、1050)); または、CSSを介して不要な要素を削除します。適切な解決策は、スクロールからyオフセットを計算することです。
Ichwardort 2015年

1
中には、Firefoxそれは寸法に基づいて、完全なイメージからの要素画面作物としての罰金に動作します。内Chrome要素は、そのビューの部分画像からスクロールアウトして表示する部分で利用可能である場合には、素子の微細に取り込みます。document.documentElement.clientHeightクライアントのHeightを2回スクロールした後にスクリーンショットを撮りたい場合は、(location.y)-2*clientHeight正確な要素のスクリーンショットを取得するために使用します。この投稿が私を助けてくれてありがとう...
Yash

6

C#

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. PhantomJS 2.0.0
  2. Selenium.Support 2.48.2
  3. Selenium.WebDriver 2.48.2

.NETFramework v4.5.2でテスト済み


5

ジャワ

承認された答えを得ることができませんでしたが、現在のWebDriverのドキュメントによれば OS X 10.9上のJava 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 2013

これはルビーのようで、特定のWebドライバーを使用していません
James

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

PHP

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の現在のバージョンでは、メソッドはtakeScreenshot()であり、ファイルを保存する前に出力をbase64_encode()する必要はありません。
billrichards 2016

1
このtakescreenshot関数を呼び出す方法を示すコードを例に追加していただけませんか?具体的には、$event変数はどこから来るのですか?私は完全なSelenium noobなので、Seleniumの事前知識を前提としないこの質問への回答は非常に高く評価されます!
Kenny83 2018

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
Adarsha

4

Python-要素のスクリーンショット:

これはかなり古い質問で、複数の答えがあります。ただし、Pythonを使用して特定のWeb要素のスクリーンショットを撮っているようですが、ここにはありません。

ロケーション

Web要素は、ページ上に独自の位置を持ち、一般に、xピクセルとyピクセルで測定され、要素の(x、y)座標として知られています。また、位置オブジェクトには2つの値が含まれています。

  1. location ['x']-要素の 'x'座標を返します
  2. location ['y']-要素の 'y'座標を返します

サイズ

場所と同様に、各WebElementには幅と高さがあります。サイズオブジェクトとして利用できます。

  1. size ['width']-要素の 'width'を返します
  2. size ['height']-要素の 'height'を返します

(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

を介して複数の方法があります そして スクリーンショットを撮るクライアント使用しを


Javaメソッド

以下は、スクリーンショットを撮るためのさまざまなJavaメソッドです。

  • 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

  • 場合は、Webページがある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 /セレンshutterbugのライブラリ:

    • コードブロック:

      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


Pythonメソッド

以下は、スクリーンショットを撮るためのさまざまなPythonメソッドです

  • 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

パイソン

python webドライバーを使用してWindowsから画像をキャプチャできます。スクリーンショットをキャプチャする必要があるページの下のコードを使用します

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

4
この回答は、元のPythonの回答から数年後に投稿されたものです。
Corey Goldberg、

3
また、この回答はパス名のバックスラッシュをエスケープしません。これはエラーの原因になります
Corey Goldberg

また、セットアップコードがないため、この行だけでは機能しません。
活動の削減

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つの方法を使用して、日付と時刻のスクリーンショットを撮ることもできます。


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

この方法は、必要に応じて使用できます。次に、maven-surefire-report-pluginのスタイルシートをsurefire-reports / html / custom.cssでカスタマイズして、レポートに各テストの正しいスクリーンショットへのリンクを含めることができると思いますか?


最近では、この方法でそれを行うことはありません。私はおそらくSelenideのようなフレームワークを使用するでしょう。
djangofan 2016

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

C#

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

C#

次のコードスニペット/関数を使用して、セレンのスクリーンショットを撮ることができます。

    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を使用して」アセンブリ。
ArNumb 2017年

SaveAsFile呼び出しでこの行を使用する必要がありました:ss.SaveAsFile(filename、ScreenshotImageFormat.Png); また、パス+ @ "\"ではなくPath.Combine(folder、filename)を使用することをお勧めします。これ、読みやすく、フォルダー/ファイル名のformat.variationsの許容度が高いためです。個人的な好みのみ。したがって、その行は次のようになります。filename = Path.Combine(path、filename + ".png");
Developer63


2

JAVA

TestNameとTimestampが追加されたSeleniumの失敗のスクリーンショットをキャプチャする方法。

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

この(または任意の)回答が役に立ったと思われる場合は、賛成してください。これがあなたの質問に答えた場合、受け入れられた回答としてマークしてください。ありがとう!
Anuj Teotia 2017

1

C#(Ranorex API)

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.