我正在将 Java 与 Webdriver 一起使用,但在测试失败时截屏时遇到问题。
我的 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
方法中关闭浏览器。
有没有办法我可以做到这一点?