我使用testng
来运行测试。我有几个测试套件( Suite1.xml , Suite2.xml 和 Suite3.xml ),它们组合在一个套件中( MasterSuite.xml )。除此之外,我还有TestBase.java
课程,我在其中配置@BeforeTest
,@BeforeMethod
,@BeforeSuite
,@AfterSuite
等方法。
运行@AfterSuite
方法会关闭驱动程序(driver.quit()
)。
我想要的是什么:运行MasterSuite
,它将一个接一个地运行我的所有3个套件。
问题:在执行第一个套件(Suite1
)后,驱动程序已关闭,因此无法运行Suite2
。
如何解决此问题?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MasterSuite">
<suite-files>
<suite-file path="Suite1.xml" />
<suite-file path="Suite2.xml"/>
<suite-file path="Suite3.xml"/>
</suite-files>
</suite>
答案 0 :(得分:1)
答案 1 :(得分:1)
我建议使用TestNG Listener ISuiteListener。
首先,将Driver作为套件属性存储,例如在TestBase的@BeforeClass中:
@Listeners({ SuiteListener.class })
public class TestBase {
public WebDriver driver;
@BeforeClass
public void init(ITestContext testContext) {
driver = createWebDriver(...);
ISuite suite = testContext.getSuite();
suite.setAttribute("driver", driver);
}
...
}
然后,在SuiteListener类中,创建onFinish()方法以获取存储的属性,并关闭驱动程序:
public class SuiteListener implements ISuiteListener {
public WebDriver driver;
/**
* This method is invoked after the SuiteRunner (parent suite) has finished to run all the child suites.
*/
public void onFinish(ISuite suite) {
driver = (WebDriver) suite.getAttribute("driver");
closeDriverAfterSuite(...);
}
答案 2 :(得分:0)
如果你想一个接一个地运行一个套件而不是并行运行它们,那么在@BeforeSuite方法中启动你的驱动程序就足够了。
这样,您的所有套件都会有单独的WebDriver实例初始化。