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

标签 selenium parallel-processing webdriver screenshot testng

我目前正在通过分别重写 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/

    相关文章:

    android - Bolts Tasks 可以在 Android 上并行运行 bolts 返回非 Void 类型吗?

    node.js - 虚拟机上的 NodeJS Protractor - 如何修复错误 199?

    google-chrome - 如何配置 'watir' 以使用现有的 chrome 用户配置文件(使用 chrome.exe --user-data-dir 创建)

    java - 如何使用 javascript 使用 selenium Webdriver 使用 java 设置所选 Web 元素的属性?

    mpi - 执行并行代码的顺序部分(大量操作+写入文件)的有效方法?

    java - 如何解析 Guava 对 Selenium 的影响?

    logging - 并行 MATLAB 和日志记录

    java - 使用 selenium Web Driver 中的 Robot 类上传功能

    php - 如何使用 PHPUnit/Selenium 测试某个元素不存在?

    c# - 在 Visual Studio 中运行 Selenium Grid C# 项目