Webdriver take screen shot when case failed use TestNG

Is there a good way to capture screenshots when running tests in parallel on the method level?

In order to run tests in parallel, each individual test needs a unique driver instance. So, at any given time you have x number of driver instances running. When it comes time to capture a screenshot, how do you determine which driver to use?


If you create a base test class with access to the driver, then that driver will always be the correct driver

The following will achieve this;

All test classes must extend a simple base test class;


  1. public asbtract baseTestCase() {  
  2.   
  3.     private WebDriver driver;  
  4.   
  5.     public WebDriver getDriver() {  
  6.             return driver;  
  7. }  
  8.   
  9.     @BeforeMethod  
  10.     public void createDriver() {  
  11.             Webdriver driver=XXXXDriver();  
  12.     }  
  13.   
  14.     @AfterMethod  
  15.         public void tearDownDriver() {  
  16.         if (driver != null)  
  17.         {  
  18.                 try  
  19.                 {  
  20.                     driver.quit();  
  21.                 }  
  22.                 catch (WebDriverException e) {  
  23.                     System.out.println("***** CAUGHT EXCEPTION IN DRIVER TEARDOWN *****");  
  24.                     System.out.println(e);  
  25.                 }  
  26.   
  27.         }  
  28.     }  
public asbtract baseTestCase() {

    private WebDriver driver;

    public WebDriver getDriver() {
            return driver;
}

    @BeforeMethod
    public void createDriver() {
            Webdriver 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);
                }

        }
    }

In your listener, you need to access the base class;

  1. public class ScreenshotListener extends TestListenerAdapter {  
  2.   
  3. @Override  
  4. public void onTestFailure(ITestResult result)  
  5. {  
  6.         Object currentClass = result.getInstance();  
  7.         WebDriver webDriver = ((BaseTest) currentClass).getDriver();  
  8.   
  9.         if (webDriver != null)  
  10.         {  
  11.   
  12.            File f = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);  
  13.   
  14.            //etc.   
  15.         }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值