我如何在 TestNG 中 运行 来自同一个 class 的多个测试用例

How do i run multiple testcases from same class in TestNG

我正在尝试 运行 来自同一个 class 的 2 个测试用例,但是测试用例 PatientSearchTest 通过了,而第二个测试用例失败了,它给出了 NullPointerException。 这是 BaseClass

的代码
public class BaseClassTest {

    ReadConfig readconfig = new ReadConfig();

    public String baseURL = readconfig.getApplicationURL();
    public String username =readconfig.getUsername();
    public String password = readconfig.getPassword();
    public static WebDriver driver;
//  public static Logger Logger;


    @Parameters("browser")
    @BeforeClass
        public void setUp(String br)
    {
        /*System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"\Drivers\chromedriver.exe");
        System..getProperty can be used only in java classes & ./--> in java classes & in properties*/
        if(br.equals("chrome"))
        {
        System.setProperty("webdriver.chrome.driver",readconfig.getChromePath());
        driver = new ChromeDriver();
        }
        else if (br.contentEquals("firefox"))
        {
            System.setProperty("webdriver.gecko.driver",readconfig.getFirefoxPath());
            driver = new FirefoxDriver();
        }
        else if(br.contentEquals("ie"))
        {
            System.setProperty("webdriver.ie.driver",readconfig.getIEPath());
            driver = new InternetExplorerDriver();
        }
        driver.get(baseURL);
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(20,TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

        }

    @AfterClass
    public void tearDown() {


        driver.quit();
    } 

public void login()
    {
         LoginPage lp = new LoginPage(driver);
         lp.setUserName(username);
         lp.setPassword(password);
         lp.clickSubmit();

    }

这是 class 文件的代码

public class CM_TC01_PatientSearchTest extends BaseClassTest {

    CM_PatientSearchPage ps = new  CM_PatientSearchPage(driver);

    @BeforeClass    
    public void loginintoApp()
    {
        login();

    }


    @Test(priority=1)
    public void PatientSearchTest() throws Exception
    {

        ExtentTestManager.getTest().log(Status.INFO,"Hey i am in Patient Search Test"); 

        Thread.sleep(2000);
        ps.hoverTest();
        ps.clickContractOptionTextbox();
        ps.selectContractOption();
        ps.enterPatientName("Peggy");
        Thread.sleep(2500);

    }
    @Test(priority=2)
    public void clearRecordsButton() throws Exception
    {
        CM_PatientSearchPage ps = null;
        ps.clearPatientSearchRecords();
    }


}

这是 testng.xml 文件的代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="" parallel="false">
    <listeners>
        <listener class-name="com.hospital.extentReport.TestListener"/>
    </listeners>

  <test name="PPP Test">
    <parameter name="browser" value="chrome"/>
    <classes>
      <class name="com.hospitalanalytics.testCases.CM_TC01_PatientSearchTest"/>

    </classes>
  </test> <!-- Test -->/>

</suite> <!--  Suite -->

谁能帮帮我?会对我有很大的帮助。 提前致谢。

它给出 NullPointerException 因为您将 ps 设置为 null 然后尝试调用它的方法。有关 NPE 的更多详细信息,请参阅 here

如果您更改顺序,您的代码将起作用:

public class CM_TC01_PatientSearchTest extends BaseClassTest {

    CM_PatientSearchPage ps = null;

    @BeforeClass    
    public void beforeClass()
    {
        ps = new  CM_PatientSearchPage(driver);
        login();
    }


    @Test(priority=1)
    public void PatientSearchTest() throws Exception
    {

        ExtentTestManager.getTest().log(Status.INFO,"Hey i am in Patient Search Test"); 

        Thread.sleep(2000);
        ps.hoverTest();
        ps.clickContractOptionTextbox();
        ps.selectContractOption();
        ps.enterPatientName("Peggy");
        Thread.sleep(2500);

    }
    @Test(priority=2)
    public void clearRecordsButton() throws Exception
    {
        ps.clearPatientSearchRecords();
    }
}

我已将 ps 的初始化移动到 @BeforeClass 注释方法中(将其从 loginintoApp 重命名,现在它做的更多)。这样,ps 将可用于 class.

中的所有测试方法