我如何在 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.
中的所有测试方法
我正在尝试 运行 来自同一个 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.