java - 如何执行包含具有相同 @BeforeClass 方法的测试类的 testng.xml 文件

标签 java selenium testng

到目前为止,我已经编写了特定于页面的测试,这些测试仅关注特定于页面的场景。例如:LoginPageTest.java 包含仅测试与登录页面相关的场景的测试。

现在我已经自动化了更多页面,我想将所有这些页面集成到我的 testng.xml

问题是 - 假设我想测试 3 个测试类( LoginPageTest.java、ExercisePageTest.java 和 HomePageTest.java )并且我已在 testng.xml 文件中传递了这些类名称。当我运行 testng.xml 文件时发生的情况是 3 个浏览器实例一起打开,因为在每个测试类中我都有一个 @BeforeClass 方法来初始化浏览器。

在我的所有测试类(class)中,我都遵循与以下相同的程序 -

-- 在 @BeforeClass 方法中,我正在初始化浏览器。

@BeforeClass
    public void setUp() throws Exception {

        wte = new ReadWriteExcel();
        extent = new ExtentReports("D://myfitnesspal.html", true);
        extent.addSystemInfo("Environment", "Test Environment");
        test = extent.startTest("Login Functionality");
        driver = BrowserSettings.startBrowser("chrome","https://www.myfitnesspal.com");
        engineDriver=new EngineDriver(driver);
        test.log(LogStatus.PASS, "Executing on Firefox browser");

    }

--在 @Test 方法中,我从 Excel 工作表中读取访客的电子邮件 ID 和密码并登录到应用程序。

@Test(priority=0, groups={"regression"})
    //@Test(dependsOnMethods="setUp")
    public void existingUserLoginfromLandingPage() throws Exception{

        new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Free Calorie Counter, Diet & Exercise Journal"));
        test.log(LogStatus.INFO, "Title Detected : " + "Free Calorie Counter, Diet & Exercise Journal" );
        String emailIDFromExcel = ReadWriteExcel.fecthEmailID(0);
        String passwordFromExcel = ReadWriteExcel.fecthPassword(1);
        engineDriver.landingPage.existingUserLogin(emailIDFromExcel, passwordFromExcel);
        System.out.println("EmailID & Password are :" + emailIDFromExcel+passwordFromExcel);

    }

类似地,我还有其他 @Test 方法来测试页面相关场景。

我想要实现的是这个 -

我希望浏览器运行一次,而不是打开浏览器 3 次,一旦 LoginPageTest.java 完成,我想执行其他测试类,而不需要打开新的浏览器实例,也不需要新用户已登录。

示例:我希望我的 testng.xml 文件如下所示 -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test">
        <parameter name="typeOfCardio" value="Swimming" />
        <parameter name="typeOfStrengthExercise" value="Bench Press" />
        <classes>
            <class name="com.myfitnesspal.tests.LoginPageTest"/>
            <class name="com.myfitnesspal.tests.ExercisePageTest"/>
            <class name="com.myfitnesspal.tests.HomePageTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

最佳答案

创建一个公共(public)类,其中提及您的设置方法并用 @BeforeTest 对其进行注释如下:

public class BrowserSetup 
{
  @BeforeTest
  public void setUp() throws Exception {

    wte = new ReadWriteExcel();
    extent = new ExtentReports("D://myfitnesspal.html", true);
    extent.addSystemInfo("Environment", "Test Environment");
    test = extent.startTest("Login Functionality");
    driver = BrowserSettings.startBrowser("chrome","https://www.myfitnesspal.com");
    engineDriver=new EngineDriver(driver);
    test.log(LogStatus.PASS, "Executing on Firefox browser");
    }
}

@BeforeTest :The annotated method will be run before any test method belonging to the classes inside the <test> tag is run.

提及您的@Test所需文件中的方法

将该类包含在 testing.xml 中也是

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test">
        <parameter name="typeOfCardio" value="Swimming" />
        <parameter name="typeOfStrengthExercise" value="Bench Press" />
        <classes>
            <class name="com.myfitnesspal.tests.BrowserSetup"/>
            <class name="com.myfitnesspal.tests.LoginPageTest"/>
            <class name="com.myfitnesspal.tests.ExercisePageTest"/>
            <class name="com.myfitnesspal.tests.HomePageTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

关于java - 如何执行包含具有相同 @BeforeClass 方法的测试类的 testng.xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158926/

相关文章:

java - 目标行 Javadoc

java - 泛型:如何在不强制转换的情况下获取 map 的值

java - 字节数组输出流。 ToString() 没有得到任何字符集

java - 存储在 SharedPreferences 中的字符串在每次应用程序关闭时都会被修改吗?

java - Selenium 等待一个元素

java - 如何使用 Java 在 Selenium RC 中使用 xpath

java - 使用 JAVA 在 selenium 中执行测试的屏幕录制

java - 添加测试用例的方法

selenium - 如何在 selenium C# 中启用 Chromium Edge 浏览器中的 IE 模式?

java - 在 TestNG 中按顺序执行测试