2016-12-06 54 views
1

我與測試(使用Selenium,TestNG的,JAVA)具有以下結構的類調用方法(以截圖):硒:如何從另一個類

public class loggedTest { 

@Test 

@Test 

@AfterMethod 
    public void tearDown(messages screen, ITestResult result) { 
     screen.screenshot(result); 
} 

在AfterMethod我想製作一個屏幕畫面,如果測試失敗。 下面是這個方法在一個單獨的類進行截圖:

public class messages { 
    public void screenshot(ITestResult result) { 

     //driver = new ChromeDriver(); 
     if (ITestResult.FAILURE == result.getStatus()) { 
      try { 
       TakesScreenshot ts = (TakesScreenshot) driver; 
       File source = ts.getScreenshotAs(OutputType.FILE); 
       Date date = new Date(); 
       FileUtils.copyFile(source, new File("./Screenshots/" + result.getInstanceName() + "." + result.getName() + "." + date + ".png")); 
       System.out.println("Screenshot taken"); 
      } catch (Exception e) { 

       System.out.println("Exception while taking screenshot " + e.getMessage()); 
      } 
     } 
    } 

} 

我運行測試,但它不工作,如果這種方法在其他類。

它正在如果我把它直接進入@AfterMethod註釋,像:

@AfterMethod 
public void tearDown(ITestResult result) { 


    if (ITestResult.FAILURE == result.getStatus()) { 
    try { 
     TakesScreenshot ts = (TakesScreenshot) driver; 
     File source = ts.getScreenshotAs(OutputType.FILE); 
     Date date = new Date(); 
     FileUtils.copyFile(source, new File("./Screenshots/" + result.getInstanceName() + "." + result.getName() + "." + date + ".png")); 
     System.out.println("Screenshot taken"); 
    } catch (Exception e) { 

     System.out.println("Exception while taking screenshot " + e.getMessage()); 
    } 
    } 
} 

如果這裏的問題? 謝謝

+1

我能想到的唯一嫌疑犯,你'messages'類是否知道'driver'是什麼? – nullpointer

+0

如果問題得到解決,請更新線程。 – nullpointer

回答

2

爲什麼.screenshot()函數在一個名爲messages的類中?它似乎不應該屬於那裏或messages應該重新命名。解決這個問題

一種方法是創建一個Utils類,使其static,然後把.screenshot()功能在那裏,並從.tearDown()這樣稱呼它Utils.screenshot()

1

幾件事情 -

  1. 提高寫作類名

    loggedTest - >LoggedTest

    messages - >Messages(如herafter簡稱)

  2. 你不必通過MessagestearDown()的實例,rathe r在一個調用screenshot方法 -

    @AfterMethod 
    public void tearDown(ITestResult result) { 
        new Messages().screenshot(result); 
    } 
    
  3. 確保您Messages類最懂現有driver是。除非你最終創造一個新的驅動程序,並做出荒謬的事情。建議 - 您可以在靜態上下文中傳遞driver的實例,或者在那裏使用超類。