テストが失敗した場合にスクリーンショットを撮りたい。すべてのテスト メソッドを try/catch ブロックでラップするのではなく、このロジックを で注釈が付けられたメソッドに追加したいと考えてい@AfterMethodます。
@AfterMethod現在のテストが失敗した場合、アノテーションが付けられたメソッドでどのように検出できますか?
で注釈が付けられたメソッドにパラメーター@AfterMethodがある場合、 ITestResultTestNG は自動的にテストの結果を挿入します。(ソース: TestNG ドキュメント、セクション 5.18.1 )
これは仕事をするはずです:
@AfterMethod
public void tearDown(ITestResult result) {
   if (result.getStatus() == ITestResult.FAILURE) {
      //your screenshooting code goes here
   }        
}
ITestListenerで障害レポートを処理する代わりに、 を使用することをお勧めし@AfterMethodます。テストリスナーのonTestFailed()関数は、テストメソッドが実行された後、メソッドが実行される前に呼び出されます@AfterMethod。(リスナーには関数がないことに注意してくださいonTestFinished()。その役割は によって実行され@AfterMethodます。)
自分で物事を簡単にするために、を使用できます。TestListenerAdapterこれは、特に自分ではない他のすべての機能を実装し@Overrideます。
最終的には次のようになります。
public class MyTestListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result){
    yourTakeScreenShotFunctionHere();
   }
}
次に、リスナーをテスト クラスにアタッチします。
@Listeners({MyTestListener.class})
public class MyTestClass(){etc}
はITestResultテスト クラスのオブジェクトへの参照であるため、リフレクションを使用して Selenium WebDriver インスタンスなどのデータを取得できます。
エラーログのクリーンアップや保存、スクリーンショットの撮影、他のレポート機能のトリガー、電子メールの送信など、さまざまなことを行うために、必要な数の異なるリスナーを持つことができます。
リスナーIInvokedMethodListenerを実装してメソッドを実装できると良いですafterInvocation()。これにより、メソッドの結果オブジェクトにアクセスできます。スクリーンショットを撮るためのコードをここに配置できます。