Java 如何使用页面工厂在testng中运行多个测试类?
我创建了两个页面类来定位一个包中两个网页的元素(名为LoginPage.java和AddEmployee.java)。在另一个包中,我为上述两个对应的类分别创建了两个测试类(名为VerifyloginpageTest.java和VerifyAddEmployeeTest.java),我还创建了另一个名为BrowserFactory.java的类来初始化浏览器并创建驱动程序实例。使用页面工厂,我想首先按优先级顺序运行登录页面测试用例,然后在成功登录到网站后,应该转到添加员工网页 ** BrowserFactory.java ** ** LoginPage.java ** AddEmployee.java ** VerifyloginpageTest.java ** VerifyAddEmployeeTest.java **Java 如何使用页面工厂在testng中运行多个测试类?,java,selenium,Java,Selenium,我创建了两个页面类来定位一个包中两个网页的元素(名为LoginPage.java和AddEmployee.java)。在另一个包中,我为上述两个对应的类分别创建了两个测试类(名为VerifyloginpageTest.java和VerifyAddEmployeeTest.java),我还创建了另一个名为BrowserFactory.java的类来初始化浏览器并创建驱动程序实例。使用页面工厂,我想首先按优先级顺序运行登录页面测试用例,然后在成功登录到网站后,应该转到添加员工网页 ** Browse
因此,当我运行VerifyloginpageTest.java类时,它成功地验证了所有6个登录测试用例并登录到了网站,但它没有执行AddEmployee页面。根据TestNG文档,如果不存在,您应该创建
TestNG.xml
文件,然后您应该根据需要配置它
示例testng.xml
文件:
<suite name="TestExample">
<test name="Login">
<classes>
<class name="packageOfYourTest.VerifyloginpageTest" />
</classes>
</test>
<test name="AddEmployee">
<classes>
<class name="packageOfYourTests.AddEmployee" />
</classes>
</test>
</suite>
根据TestNG文档,如果文件不存在,则应创建
TestNG.xml
文件,然后根据需要对其进行配置
示例testng.xml
文件:
<suite name="TestExample">
<test name="Login">
<classes>
<class name="packageOfYourTest.VerifyloginpageTest" />
</classes>
</test>
<test name="AddEmployee">
<classes>
<class name="packageOfYourTests.AddEmployee" />
</classes>
</test>
</suite>
要使用TestNG使测试类并行运行,您应该创建TestNG配置xml文件
<suite name="SuiteName">
<test name="TestName">
<classes>
<class name="path.to.your.test.class.goes.here" />
</classes>
</test>
</suite>
请注意,使用Before方法实际上创建了一个线程,为每个线程创建驱动程序的新实例是一个很好的实践
将并行属性添加到“套件”标记上的配置文件:
<suite name="SuiteName" parallel='classes'>
<test name="TestName">
<classes>
<class name="path.to.your.test.class.goes.here" />
</classes>
</test>
</suite>
您可以并行“方法”、“测试”或“实例”。但由于您需要并行运行类,请使用适当的值
现在,您还可以在“suite”标记上添加一个属性“threadcount”,以设置并行运行的最大类数。如果未指定此属性的值,默认情况下,金额将等于5
现在非常重要:每当您在TestNG创建新线程之前调用@Before时,您都需要为每个线程创建驱动程序,并在确切的线程中使用它。为此,您必须将每个新的驱动程序实例放入ThreadLocal容器中
private static final ThreadLocal<WebDriver> DRIVER = new ThreadLocal<>();
public static WebDriver getDriver() {
return DRIVER.get();
}
@BeforeMethod
public void setUp() {
if (DRIVER.get() == null) {
DRIVER.set(new FirefoxDriver());
}
}
@AfterMethod
public void tearDown() {
if (DRIVER.get() != null) {
DRIVER.remove();
}
}
private static final ThreadLocal DRIVER=new ThreadLocal();
公共静态WebDriver getDriver(){
返回驱动程序get();
}
@预处理法
公共作废设置(){
if(DRIVER.get()==null){
设置(新的FirefoxDriver());
}
}
@后置法
公共无效拆卸(){
if(DRIVER.get()!=null){
驱动程序。删除();
}
}
因此,您将使驱动程序线程安全。还要注意,如果在@BeforeClass中启动驱动程序,则需要在@AfterClass中启动driver.qiut()。如果在@BeforeSuite中启动@BeforeSuite-driver.qiut(),则在@AfterSuite中启动,依此类推。为了确保一切正常,您可以在创建或终止驱动程序时将其打印到日志线程id中
更多信息请点击此处:
要使用TestNG使测试类并行运行,您应该创建TestNG配置xml文件
<suite name="SuiteName">
<test name="TestName">
<classes>
<class name="path.to.your.test.class.goes.here" />
</classes>
</test>
</suite>
请注意,使用Before方法实际上创建了一个线程,为每个线程创建驱动程序的新实例是一个很好的实践
将并行属性添加到“套件”标记上的配置文件:
<suite name="SuiteName" parallel='classes'>
<test name="TestName">
<classes>
<class name="path.to.your.test.class.goes.here" />
</classes>
</test>
</suite>
您可以并行“方法”、“测试”或“实例”。但由于您需要并行运行类,请使用适当的值
现在,您还可以在“suite”标记上添加一个属性“threadcount”,以设置并行运行的最大类数。如果未指定此属性的值,默认情况下,金额将等于5
现在非常重要:每当您在TestNG创建新线程之前调用@Before时,您都需要为每个线程创建驱动程序,并在确切的线程中使用它。为此,您必须将每个新的驱动程序实例放入ThreadLocal容器中
private static final ThreadLocal<WebDriver> DRIVER = new ThreadLocal<>();
public static WebDriver getDriver() {
return DRIVER.get();
}
@BeforeMethod
public void setUp() {
if (DRIVER.get() == null) {
DRIVER.set(new FirefoxDriver());
}
}
@AfterMethod
public void tearDown() {
if (DRIVER.get() != null) {
DRIVER.remove();
}
}
private static final ThreadLocal DRIVER=new ThreadLocal();
公共静态WebDriver getDriver(){
返回驱动程序get();
}
@预处理法
公共作废设置(){
if(DRIVER.get()==null){
设置(新的FirefoxDriver());
}
}
@后置法
公共无效拆卸(){
if(DRIVER.get()!=null){
驱动程序。删除();
}
}
因此,您将使驱动程序线程安全。还要注意,如果在@BeforeClass中启动驱动程序,则需要在@AfterClass中启动driver.qiut()。如果在@BeforeSuite中启动@BeforeSuite-driver.qiut(),则在@AfterSuite中启动,依此类推。为了确保一切正常,您可以在创建或终止驱动程序时将其打印到日志线程id中
更多信息请点击此处:
你得到的例外是什么?另外,AddEmp…Test类中的方法webPage()是否调用过?@Grasshopper我在通过VerifyloginpageTest.java类为登录页运行测试用例时没有遇到任何异常,主要问题是add_emp对象没有在这一行初始化…{add_emp=PageFactory.initElements(driver,AddEmployee.class);}在VerifyAddEmployeeTest.java类中。。。。。。所以AddEmployee.java类永远不会被访问你得到的异常是什么?另外,AddEmp…Test类中的方法webPage()是否调用过?@Grasshopper我在通过VerifyloginpageTest.java类为登录页运行测试用例时没有遇到任何异常,主要问题是add_emp对象没有在这一行初始化…{add_emp=PageFactory.initElements(driver,AddEmployee.class);}在VerifyAddEmployeeTest.java类中。。。。。。所以AddEmployee.java类永远不会被访问
<suite name="SuiteName" parallel='classes'>
<test name="TestName">
<classes>
<class name="path.to.your.test.class.goes.here" />
</classes>
</test>
</suite>
private static final ThreadLocal<WebDriver> DRIVER = new ThreadLocal<>();
public static WebDriver getDriver() {
return DRIVER.get();
}
@BeforeMethod
public void setUp() {
if (DRIVER.get() == null) {
DRIVER.set(new FirefoxDriver());
}
}
@AfterMethod
public void tearDown() {
if (DRIVER.get() != null) {
DRIVER.remove();
}
}