testng - 如何在 TestNG 中从同一类运行多个测试用例
问题描述
我正在尝试从同一类运行 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();
}
这是类文件的代码
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 的更多详细信息,请参见此处。
如果您更改订单,您的代码将起作用:
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
-annotated@BeforeClass
方法中(将其从 重命名loginintoApp
,因为它现在做得更多)。这样,ps
您班级中的所有测试方法都可以使用。
推荐阅读
- c# - 当 Response.ContentType 为“audio/wav”时,如何修复谷歌浏览器加载页面两次?
- node.js - 如何正确使用 Nest.js 的 @Headers?
- firefox - Angular Material Table Firefox Mat Row 单击事件,在 Mat Cell 中单击按钮
- amazon-dynamodb - AppSync 解析器中的 DynamoDB TransactWriteItems
- r - 将具有不同单位的期限(时间段)的特征向量添加到日期
- javascript - CSS 样式表未正确连接到 ejs 文件
- java - 在字节伙伴的 MethodDelegation 中有效地获取调用者
- python - 在生产环境中应用 TensorFlow Transform 来转换/缩放特征
- here-api - 在 Here API for Navigation / Routing API 中,BaseTime 是如何计算的?
- pandas - 熊猫日期比较给出无效类型比较错误