2016-12-06 53 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的实例,或者在那里使用超类。