繁体   English   中英

Selenium:如何从另一个类调用方法(截屏)

[英]Selenium: how to call method (taking screenshot) from another class

我有一个带有以下结构的测试类(使用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());
    }
  }
}

这里的问题在哪里? 谢谢

为什么.screenshot()函数在一个名为messages的类中? 它似乎不属于那里或者应该重命名messages

解决这个问题的一种方法是创建一个Utils类,使其成为static ,然后将.screenshot()函数放在那里,并像Utils.screenshot().tearDown()一样调用它。

一些事情 -

  1. 改进编写类名

    loggedTest - > LoggedTest

    messages - > Messages (参见herafter)

  2. 你不需要将Messages的实例传递给tearDown() ,而是调用screenshot方法 -

     @AfterMethod public void tearDown(ITestResult result) { new Messages().screenshot(result); } 
  3. 确保您的Messages类了解现有的driver 除非你最终创造一个新的驱动程序和做事荒谬。 建议 - 你可以在静态上下文中传递driver的实例,或者在那里使用超类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM