2016-09-23 76 views
0

有典型的解決方案捕獲屏幕截圖,而@Test失敗,但有可能做到這一點@Before/AfterClass/Method失敗?TestNG是否有可能捕獲@BeforeMethod失敗的截圖?

爲什麼我需要那個? - 特別是對於@BeforeMethod,我使用測試類的公共邏輯 - 登錄並轉到特定頁面。

+0

你試圖使用'Itestresult'這樣,'@AfterMethod \t公共無效takeScreenShotOnFailure(ITestResult的TestResult)拋出IOException異常{ \t \t如果( testResult.getStatus()== ITestResult.FAILURE){ \t \t \t System.out.println(testResult.getStatus()); \t \t \t文件scrFile =((TakesScreenshot)驅動程序).getScreenshotAs(OutputType.FILE); \t \t \t FileUtils.copyFile(scrFile,new File(「D:\\ testScreenShot.jpg」)); \t} \t}'您可以對@BeforeMethod – user1207289

回答

1

你可能要嘗試並實現你的情況WebDriverEventListener您可能感興趣的方法onException這將允許你這樣做對代碼執行過程中發生的每exeception smthn,也這將是必要使用EventFiringWebDriver添加監聽器

這裏有一些參考: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/events/WebDriverEventListener.html

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/events/EventFiringWebDriver.html

+0

使用相同的值,不確定它是否與webdriver相關。這應該是testng相關的解決方案。 – user3535807

0

目前停在覆蓋TestNG的ITestListener - onTestSkipped方法。缺點是截圖正在採取每個跳過@Test方法。在下面的代碼中應該重構,但這是一個很好的開始。注意:你應該包括這個自定義監聽到你的testng.xml

@Override 
public void onTestSkipped(ITestResult result) { 
    if(result != null){ 
     String failedTestScreenshotFolder = Paths.get("").toAbsolutePath().toString() + "path/skippedScreenshots/"; 
     WebDriver webDriver = ((TestBase)result.getInstance()).webDriver; 
     File scrFile = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE); 
     try { 
      String className = result.getTestClass().getName(); 
      FileUtils.copyFile(scrFile, new File(failedTestScreenshotFolder + className.substring(className.lastIndexOf(".") + 1) + "." + result.getMethod().getMethodName() + ".jpg")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
相關問題