捕获截图的webdriver当运行并行测试使用TestNG(Capture WebDriver Sc

2019-09-22 13:44发布

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

Answer 1:

如果你创建一个基础测试类访问驱动程序,那么该驱动程序将永远是正确的驱动程序

下面将实现这一目标;

  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);
        }
    }
}
  1. 在你的听众,你需要访问的基类:
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.
        }
    }
}


文章来源: Capture WebDriver Screenshots When Running Parallel Tests With TestNG