gpt4 book ai didi

selenium - 使用 TestNG 运行并行测试时捕获 WebDriver 屏幕截图

转载 作者:行者123 更新时间:2023-12-02 19:26:53 24 4
gpt4 key购买 nike

我目前正在通过分别重写 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(); }
}

最佳答案

如果您创建一个可以访问驱动程序的基测试类,那么该驱动程序将始终是正确的驱动程序

以下内容将实现此目的;

  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);
}
}
}
  • 在您的监听器中,您需要访问基类:
  • 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.
    }
    }
    }

    关于selenium - 使用 TestNG 运行并行测试时捕获 WebDriver 屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481972/

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