繁体   English   中英

如何仅使用一个Web驱动程序实例在testng套件中运行多个测试类?

[英]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方法退出驱动程序,而不是使用BeforeClassAfterClass方法。 这样可以解决您的目的。

您可以在已创建的2个类中的任何一个中创建此BeforeSuiteAfterSuite方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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