Webdriver で Java を使用していますが、失敗したテストでスクリーンショットを撮るのに問題があります。
私のjUnitテスト:
....
public class TestGoogleHomePage extends Browser {
....
@Test
public void testLoadGoogle() {
//this test will fail
}
}
私のブラウザクラス:
public class Browser {
protected static WebDriver driver;
public Browser() {
driver = new FirefoxDriver();
}
.....
@Rule
public TestWatcher watchman = new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
File scrFile = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, new File(
"C:\\screenshot.png"));
} catch (IOException e1) {
System.out.println("Fail to take screen shot");
}
// this won't work
// driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@Override
protected void succeeded(Description description) {
....
}
};
@After
public void closeBrowser() {
driver.quit();
}
}
テストを実行すると、次のエラー メッセージが表示されます (エラー メッセージの一部)。
org.openqa.selenium.remote.SessionNotFoundException: quit() が呼び出された後は FirefoxDriver を使用できません。
私の @After メソッドについて不平を言っているようです。
Browser クラスを次のように変更しようとしました。
public class Browser {
protected static WebDriver driver;
public Browser() {
driver = new FirefoxDriver();
}
.....
@Rule
public TestWatcher watchman = new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
File scrFile = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, new File(
"C:\\screenshot.png"));
} catch (IOException e1) {
System.out.println("Fail to take screen shot");
}
driver.quit();
}
@Override
protected void succeeded(Description description) {
....
driver.quit();
}
};
}
そして、上記のコードは正常に機能します。しかし、各テストの実行後にクリーンアップしたいものが他にある可能性があるため、そこでドライバーを終了したくありません。また、@After
メソッドでブラウザーを閉じたいと考えています。
それを行う方法はありますか?