TestNG @Test和@AfterMethod没有执行,也没有获取屏幕截图

问题描述 投票:0回答:1

但是执行@BeforeMethod,但不会执行@Test@AfterMethod

不确定在@BeforeMethod之后为何不执行并且也没有使用ScreenShot

控制台

[RemoteTestNG] detected TestNG version 7.0.0
Starting ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) on port 33501
Only local connections are allowed.
Mar 06, 2020 4:05:25 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Starting ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) on port 43792
Only local connections are allowed.
Mar 06, 2020 4:05:31 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

Failed Test

Failed Test

===============================================
    Default test
    Tests run: 0, Failures: 0, Skips: 0
===============================================

java.lang.NullPointerException
    at utility.CapSc.captureScreenShot(CapSc.java:16)
    at autobillAutomation.listeners.CustomListener.onTestFailure(CustomListener.java:32)
    at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:66)
    at org.testng.internal.TestInvoker.runTestResultListener(TestInvoker.java:210)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:814)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:145)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.util.ArrayList.forEach(Unknown Source)
    at org.testng.TestRunner.privateRun(TestRunner.java:770)
    at org.testng.TestRunner.run(TestRunner.java:591)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:402)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:396)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:355)
    at org.testng.SuiteRunner.run(SuiteRunner.java:304)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1180)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1102)
    at org.testng.TestNG.runSuites(TestNG.java:1032)
    at org.testng.TestNG.run(TestNG.java:1000)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

班级:

public class Setup {

    public static WebDriver driver;

    public static void initialize() {
        driver = new ChromeDriver();
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium\\chromedriver_win32\\chromedriver_1.exe");

        // deleteCookies
        driver.manage().deleteAllCookies();
        // navigateToPage
        driver.navigate().to("https://www.gmail.com");
        // setWindowSize | 1920x1080
        driver.manage().window().setSize(new Dimension(1920, 1080));
        // manageTimeouts
        driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
        // switchToTheTestWindow
        String currentWindow = driver.getWindowHandle();
        driver.switchTo().window(currentWindow);
    }

}


@Listeners(CustomListener.class)
public class Login {

    public static WebDriver driver;


    @BeforeMethod
    public void setUp() throws Exception{
        Setup.initialize();
    }
    @Test
    public void login() throws InterruptedException {
        // Test name: Login
        // Step # | name | target | value | comment
        // 3 | click | id=email | |
        driver.findElement(By.id("email")).click();
        // 4 | type | id=email | [email protected] |
        driver.findElement(By.id("email")).sendKeys("[email protected]");
        // 5 | click | id=password | |
        driver.findElement(By.id("password")).click();
        // 6 | type | id=password | pwd |
        driver.findElement(By.id("password")).sendKeys("pwd");
        // 7 | click | css=.login-button | |
        driver.findElement(By.cssSelector(".login-button")).click();
        // Assert.assertTrue(driver.getTitle().contains("Dashboard"));
        // 8 | click | css=.place-holder-image | |
        driver.findElement(By.cssSelector(".place-holder-image")).click();
        // 9 | click | css=.new-list .hide-other-tabs-li > .new-text | |
        driver.findElement(By.cssSelector(".new-list .hide-other-tabs-li > .new-text")).click();
        // 10 | click | css=.user-image > .place-holder-image | |
        driver.findElement(By.cssSelector(".user-image > .place-holder-image")).click();
        // 11 | click | css=a > .new-item > .new-text | |
        driver.findElement(By.cssSelector("a > .new-item > .new-text")).click();
        // 12 | close | | |
        // driver.close();
    }
    @AfterMethod (alwaysRun = true)
    public void tearDown() {
        driver.quit();

    }
}

public abstract class CapSc {
    public static WebDriver driver;


    public static void captureScreenShot (String screenshotName)  {

        File source = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

        try {
            FileUtils.copyFile(source, new File ("D:\\Maven\\eclipse-workspace\\mavenwebdriverjunit\\ScreenShots"+screenshotName+".png"));
            System.out.println("Screenshot Taken");
        } catch (IOException e) {

            System.out.println("Exception while Taking Screenshot " + e.getMessage());
        }


    }
}

public class CustomListener implements ITestListener{

    @Override
    public void onFinish(ITestContext result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStart(ITestContext result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTestFailure(ITestResult result) {
        System.out.println("Failed Test");
        CapSc.captureScreenShot(result.getClass().getName()+"_"+result.getMethod().getMethodName());


    }

    @Override
    public void onTestSkipped(ITestResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTestStart(ITestResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTestSuccess(ITestResult result) {
        // TODO Auto-generated method stub

    }

}
java selenium testng
1个回答
0
投票
Login类的NullPointerException方法下的@Test例外,因为Setup.initialize();仅在Setup类中初始化了驱动程序,您在Login类下不会获得相同的引用,并且Login类下的驱动程序实例仍然为空。

要么您需要从Setup类返回驱动程序实例,然后在Login类中使用该驱动器实例,要么在Login类中扩展该Setup类]]

© www.soinside.com 2019 - 2024. All rights reserved.