3

現在、TestListenerAdapter メソッドの onTestFailure と onTestSuccess をそれぞれオーバーライドすることで、TestNG の失敗と成功のスクリーンショットをキャプチャしています。これを行うには、スクリーンショットを撮りたいドライバーを指定する必要があります。

私の質問:メソッド レベルでテストを並行して実行するときにスクリーンショットをキャプチャする良い方法はありますか?

テストを並行して実行するには、個々のテストごとに一意のドライバー インスタンスが必要です。したがって、常に x 個のドライバー インスタンスが実行されています。スクリーンショットをキャプチャするときが来たら、どのドライバーを使用するかをどのように決定しますか?

以下のコードの抜粋:

public class OnFailureListener extends TestListenerAdapter {    

@Override   
public void onTestFailure(ITestResult tr) {     
   Screenshots.captureScreenshot(tr);

   super.onTestFailure(tr);             
}

--

public static void captureScreenshot(ITestResult tr) {
   WebDriver driver = TestClass.driver;

   if (driver instanceof TakesScreenshot) {                                                                                                         
      String filename = "path/to/screenshot/file";

   try {
      File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
      FileUtils.copyFile(scrFile, new File(filename));
   } catch (IOException e) { e.printStackTrace(); }
}
4

1 に答える 1

5

ドライバーにアクセスできるベース テスト クラスを作成すると、そのドライバーが常に正しいドライバーになります。

以下はこれを達成します。

  1. すべてのテスト クラスは、単純な基本テスト クラスを拡張する必要があります。
public asbtract baseTestCase() {

private WebDriver driver;

public WebDriver getDriver() {
    return driver;
}

@BeforeMethod
public void createDriver() {
    driver=XXXXDriver();
}

@AfterMethod
public void tearDownDriver() {
    if (driver != null){
        try{
            driver.quit();
        }
        catch (WebDriverException e) {
            System.out.println("***** CAUGHT EXCEPTION IN DRIVER TEARDOWN *****");
            System.out.println(e);
        }
    }
}
  1. リスナーで、基本クラスにアクセスする必要があります。
public class ScreenshotListener extends TestListenerAdapter {

@Override
public void onTestFailure(ITestResult result){
    Object currentClass = result.getInstance();
    WebDriver webDriver = ((BaseTest) currentClass).getDriver();
    if (webDriver != null){
        File f = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        //etc.
        }
    }
}
于 2013-09-06T09:17:58.133 に答える