gpt4 book ai didi

java - 当 JUnit 测试失败时,无法使用 Java 使用 Selenium WebDriver 进行屏幕截图

转载 作者:行者123 更新时间:2023-12-01 23:26:32 26 4
gpt4 key购买 nike

我正在使用 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: The FirefoxDriver cannot be used after quit() was called.

看起来它在提示我的 @After 方法。

我尝试将浏览器类更改为:

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 方法中关闭浏览器。

有什么办法可以做到这一点吗?

最佳答案

问题是由以下代码引起的:

@After
public void closeBrowser() {
driver.quit();
}

driver.quit() 在每次测试后都尝试关闭浏览器;并且它在 TestWatcher 的回调方法之前执行。这会阻止 TestWatcher 获取驱动程序 的句柄。尝试使用更具限制性的生命周期注释,例如 @AfterClass@AfterSuite

关于java - 当 JUnit 测试失败时,无法使用 Java 使用 Selenium WebDriver 进行屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com