8

Webdriver 2.28 は、例外/失敗/エラー時に自動的にスクリーンショットを撮りますか?

もしそうなら、スクリーンショットはどこにありますか? デフォルトのディレクトリはどれですか?

4

3 に答える 3

11

いいえ、自動的には行われません。試すことができる2つのオプション:

  1. 普段お使いのドライバーに巻き付けるだけでWebDriverEventListener装着可能なタイプを使用。これにより、基になる によってスローされたEventFiringWebDriverすべてのスクリーンショットが取得されますが、チェックに失敗した場合は取得されません。ExceptionWebDriverassertTrue()

    EventFiringWebDriver driver = new EventFiringWebDriver(new InternetExplorerDriver());
    WebDriverEventListener errorListener = new AbstractWebDriverEventListener() {
        @Override
        public void onException(Throwable throwable, WebDriver driver) {
            takeScreenshot("some name");
        }
    };
    driver.register(errorListener);
    
  2. JUnit を使用している場合は、@Ruleとを使用しTestRuleます。これにより、何らかの理由でテストが失敗した場合にスクリーンショットが取得されます。

    @Rule
    public TestRule testWatcher = new TestWatcher() {
        @Override
        public void failed(Throwable t, Description test) {
            takeScreenshot("some name");
        }
    };
    

どちらのtakeScreenshot()場合も方法は次のとおりです。

public void takeScreenshot(String screenshotName) {
    if (driver instanceof TakesScreenshot) {
        File tempFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(tempFile, new File("screenshots/" + screenshotName + ".png"));
        } catch (IOException e) {
            // TODO handle exception
        }
    }
}

...FileUtils.copyFile()メソッドは Apache Commons IO のものです (Selenium にも同梱されています)。

于 2013-02-05T20:26:47.760 に答える
2

WebDriver 自体はスクリーンショットを撮りません。しかし、あなたはこの方法で猫を取ります:((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);

次に、スクリーンショットを任意の場所に保存します。

また、Thucydides のようなものを使用すると、各アクションまたはエラーでスクリーンショットを取得し、きれいなレポートに入れることができます。

于 2013-02-05T09:22:44.317 に答える
1

簡単に言うと、いいえです。WebDriver は、ブラウザーと対話するための API です。それを使用してスクリーンショットを作成できますが、いつそれを行うべきかを知っておく必要があります。したがって、WebDriver はテストについて何も知らないため、自動的には実行されません。

TestNG をテスト ライブラリとして使用している場合は、さまざまなイベント (失敗、成功、その他) でメソッドが実行される Listener を実装できます。これらのメソッドでは、必要なロジックを実装できます (スクリーンショットの作成など)。

于 2013-02-05T09:22:56.817 に答える