2012-09-18 115 views
3

當前,我正在通過重寫TestListenerAdapter方法onTestFailure和onTestSuccess來分別在TestNG中捕獲失敗和成功的屏幕截圖。爲了做到這一點,你需要指定你想要截圖的驅動程序。使用TestNG運行並行測試時捕獲WebDriver屏幕截圖

我的問題:當在方法級別上並行運行測試時,是否有一種捕獲屏幕截圖的好方法?

爲了並行運行測試,每個單獨的測試都需要一個唯一的驅動程序實例。所以,在任何時候,你都有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(); } 
} 

回答

5

如果您創建了訪問驅動器的基礎測試類,然後該驅動程序將永遠是正確的驅動程序

以下將做到這一點;

  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. 
         } 
        } 
    } 
    
    +1

    我不明白。在你的例子中,只有一個WebDriver實例正在被使用。爲了成功並行運行測試,需要有多個驅動程序實例。當多個單獨的測試試圖一次訪問驅動程序時會發生什麼? – try5tan3

    +0

    每個測試都會創建自己的實例,驅動程序不會在測試中共享。 –

    +0

    謝謝!這對我有效。 – try5tan3