简体   繁体   中英

@BeforeClass and @AfterClass methodis not executed

package baseClasses;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

public final class InitSetUp {


    private WebDriver driver;
    private static String baseDriverPath="D:\\driver\\";
    
    public WebDriver getDriver() {
        return driver;
    }

    private void setDriver(String browserName, String url) {
        switch(browserName) {
        case "Chrome" : {
            System.out.println("Setting chorme driver please wait");
            driver = initChromeDriver(url);
        }

        case "Firefox" :{
            System.out.println("Setting firefox driver please wait");
            driver = initFirfoxDriver(url);
        }
        case "IE" : {
            
        }

        }
    }
    
    private WebDriver initChromeDriver(String url) {
        System.out.println("initializing chorme driver please wait");
        System.setProperty("webdriver.chrome.driver", baseDriverPath + "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        System.out.println("Navigating to given url please wait");
        driver.navigate().to(url);
        return driver;
    }
    private WebDriver initFirfoxDriver(String url) {
        System.out.println("initializing Firefox driver please wait");
        System.setProperty("webdriver.firefox.driver", baseDriverPath + "geckodriver.exe");
        WebDriver driver = new ChromeDriver();
        System.out.println("Navigating to given url please wait");
        driver.navigate().to(url);
        return driver;
    }
    
    @Parameters({"browserName","openURL"})
    @BeforeClass
    public void initBorwser(String browserName,String openURL) {
        System.out.println("Initializing Class..");
        try {
            setDriver(browserName, openURL);
        } catch (Exception e) {
            System.out.println("Error....." + e.getStackTrace());
        }
    }
    
    @AfterClass
    public void tearDown() {
        System.out.println("Quiting please wait");
        driver.quit();
    }

}

And here is another Class

package testClasses;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

import baseClasses.InitSetUp;

public class OpenTest {

    private WebDriver driver;
    
    public OpenTest() {
        System.out.println("In Open Test");
        InitSetUp baseclass= new InitSetUp();
        driver = baseclass.getDriver();
    }
    
    @Test
    public void openBroser() {
        System.out.println("TEST ONE");
    }
    
}

And TESTNG XML--------

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >

<suite name="TESTX" verbose="1" >
 <parameter name="browserName" value="Firefox" />
    <parameter name="openURL" value="google.com" />
  <test name="TestOpen" >
    <classes>
       <class name="testClasses.OpenTest" />
        <class name="baseClasses.InitSetUp" />
    </classes>
  </test>
 

</suite>

When I run the above XML in testNG it is not executing the methods @BeforeCLass and @AfterClass. Its shows the output as--

[RemoteTestNG] detected TestNG version 7.2.0 In Open Test TEST ONE

=============================================== TESTX Total tests run: 1, Passes: 1, Failures: 0, Skips: 0

Your code is faulty... To answer your question why these: @beforeclass @afterclass aren't called, it is because you didn't extend the InitSetUp class to the OpenTest

so instead of public final class InitSetUp change it to public class InitSetUp

And apply the inheritance here

instead of public class OpenTest change it to public class OpenTest extends InitSetUp

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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