[英]How to run multiple test classes in testng suite with only one web driver instance?
我有如下的testng.xml文件...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false">
<test name="Test">
<classes>
<class name="com.cigital.myssi.automation.tests.SoftwareTest"/>
<class name="com.cigital.myssi.automation.tests.LoginTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
我有如下对应的测试课程。
SoftwareTest.java
public class SoftwareTest extends Verification {
private WebDriver driver;
private SoftwarePage softwarepage;
private LoginPage loginpage;
private Log log = LogFactory.getLog(SoftwareTest.class);
@BeforeClass(alwaysRun = true)
public void setup() throws InterruptedException {
driver = DriverFactory.getDriverInstance();
softwarepage = new SoftwarePage(driver);
loginpage = new LoginPage(driver);
}
@Test(description="Create Critical Software")
public void CreateCriticalProject()
{
log.info("Create Critical Software test case Started...............");
assertEquals(true, loginpage.gotoSignPage());
assertEquals(true,loginpage.LogintoPortal("abc@abc.com", "Pass@123", "Welcome"));
assertEquals(true,softwarepage.CreateCriticalSoftware(DataGenerator.RandomNumber("SAMPLE")));
assertEquals(true,loginpage.Logout());
}
@AfterClass(alwaysRun = true)
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
LoginTest.java
public class LoginTest extends Verification {
private WebDriver driver;
private LoginPage loginPage;
@BeforeClass(alwaysRun = true)
public void setup() throws InterruptedException {
driver = DriverFactory.getDriverInstance();
loginPage = new LoginPage(driver);
}
@Test(description = "SigninPage")
public void SigninPage() {
assertEquals(true, loginPage.gotoSignPage());
}
@Test(description="Login to Portal",dependsOnMethods="SigninPage",dataProviderClass=CredentialsProvider.class,dataProvider="testCasesLogin")
public void LoginToPortal(UserBean newbean) throws InterruptedException
{
assertEquals(true,loginPage.LogintoPortal(newbean.getUsername(),newbean.getPassword(),newbean.getTitle()));
}
@AfterClass(alwaysRun = true)
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
我已经在两个课程中都启动了webdrive。 问题是无论何时执行第一个测试(即SoftwareTest)然后退出浏览器。 但是,我想按顺序执行下一个测试,即LoginTest。 谁能帮助我实现目标?
问候,
尝试以下新课程
public class Config extends Verification{
public static WebDriver driver;
public SoftwarePage softwarepage;
public LoginPage loginpage;
@BeforeSuite
public void setUp(){
driver = DriverFactory.getDriverInstance();
}
@AfterSuite
public void tearDown(){
if (driver != null) {
driver.quit();
}
}
}
将该类扩展到所有其他测试类,如下所示
public class SoftwareTest extends Config {
private Log log = LogFactory.getLog(SoftwareTest.class);
@BeforeClass(alwaysRun = true)
public void setup() throws InterruptedException {
softwarepage = new SoftwarePage(driver);
}
我希望这里不需要AfterClass,也可以在BeforeClass中删除此“ driver = DriverFactory.getDriverInstance();”。
让我知道您是否有任何问题。
谢谢
您正在为BeforeClass
方法中的两个类创建驱动程序实例,因此一旦执行AfterClass
就会调用AfterClass
方法并关闭您的驱动程序。
可以使用BeforeSuite
方法启动浏览器,并使用AfterSuite
方法退出驱动程序,而不是使用BeforeClass
和AfterClass
方法。 这样可以解决您的目的。
您可以在已创建的2个类中的任何一个中创建此BeforeSuite
和AfterSuite
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.