简体   繁体   English

@AfterTest TestNG 注释未被调用

[英]@AfterTest TestNG annotation is not called

I'm doing some tests using Java + TestNG, but I noticed that the tests are not executing the @AfterTest method.我正在使用 Java + TestNG 进行一些测试,但我注意到这些测试没有执行@AfterTest方法。 The browser remains open when the other tests are running (when it runs the first test, CreateNewUserWithValidData() , this one doesn't call the @AfterTest method, causing that the other tests fail).浏览器在其他测试运行时保持打开状态(当它运行第一个测试CreateNewUserWithValidData() ,这个测试没有调用@AfterTest方法,导致其他测试失败)。 I need that every test call the @AfterTest method.我需要每个测试都调用@AfterTest方法。

My testng.xml file has the following structure:我的testng.xml文件具有以下结构:


<suite name="Sample Tests" verbose="1" >
    <listeners>
        <listener class-name="Utilities.Listeners.TestListener"></listener>
        <listener class-name="Utilities.Listeners.AnnotationTransformer"></listener>
    </listeners>

    <test name="Regression" >
        <classes>
            <class name="Tests.AutomationPracticesTests">
                <methods>
                    <include name="CreateNewUserWithValidData" />
                    <include name="LoginWithAValidUser" />
                    <include name="LoginWithAnInvalidUser" />
                </methods>
            </class>
        </classes>
    </test>
</suite>

My BaseTest class looks like this.-我的BaseTest类看起来像这样。-

public class BaseTest {

    protected String baseURL;
    protected WebDriver driver;
    protected WebDriverWait wait;
    protected APAuthenticationPage apAuthenticationPage;
    protected APCreateAccountPage apCreateAccountPage;
    protected APHomePage apHomePage;
    protected APMyAccountPage apMyAccountPage;
    protected APShoppingCartAddressesPage apShoppingCartAddressesPage;
    protected APShoppingCartOrderConfirmationPage apShoppingCartOrderConfirmationPage;
    protected APShoppingCartOrderSummaryBankwirePage apShoppingCartOrderSummaryBankwirePage;
    protected APShoppingCartPaymentMethodPage apShoppingCartPaymentMethodPage;
    protected APShoppingCartShippingPage apShoppingCartShippingPage;
    protected APShoppingCartSummaryPage apShoppingCartSummaryPage;

    public WebDriver getDriver() {
        return driver;
    }

    @BeforeTest(alwaysRun = true)
    public void setUp() {
        Log.info("I am in Before Method! Test is starting!");

        driver = WebDriverFactory.getDriver(BrowserType.Chrome);
        wait = new WebDriverWait(driver, 10);
        driver.manage().window().maximize();
    }

    @BeforeMethod
    public void initSetup() {
        String propertiesFile = "data.properties";
        PropertyReader propertyReader = new PropertyReader();
        apAuthenticationPage = new APAuthenticationPage(driver);
        apCreateAccountPage = new APCreateAccountPage(driver);
        apHomePage = new APHomePage(driver);
        apMyAccountPage = new APMyAccountPage(driver);
        apShoppingCartAddressesPage = new APShoppingCartAddressesPage(driver);
        apShoppingCartOrderConfirmationPage = new APShoppingCartOrderConfirmationPage(driver);
        apShoppingCartOrderSummaryBankwirePage = new APShoppingCartOrderSummaryBankwirePage(driver);
        apShoppingCartPaymentMethodPage = new APShoppingCartPaymentMethodPage(driver);
        apShoppingCartShippingPage = new APShoppingCartShippingPage(driver);
        apShoppingCartSummaryPage = new APShoppingCartSummaryPage(driver);

        baseURL = propertyReader.getProperty(propertiesFile, "AUTOMATION_PRACTICE_URL");
    }

    @AfterTest(alwaysRun = true)
    public void tearDown() {
        Log.info("I am in After Method! Test is ending!");

        driver.close();
        driver.quit();
    }
}

And my tests are the following ones.-我的测试如下。-

public class AutomationPracticesTests extends BaseTest {

    // Properties
    private String emailAddress, password;

    // Tests
    @Test(description = "It creates a new user in the store",
            priority = 1)
    public void CreateNewUserWithValidData(Method method) {
        startTest(method.getName(), "It creates a new user in the store");

        emailAddress = Mocks.personalData().get(0).getEmail();
        password = Mocks.personalData().get(0).getPassword();

        apHomePage.goTo(baseURL);
        apHomePage.clickOnSignInButton();

        apAuthenticationPage.fillCreateAccountForm(emailAddress);
        apAuthenticationPage.clickOnCreateAccountButton();

        apCreateAccountPage.fillRegisterForm(Mocks.personalData());
        apCreateAccountPage.clickOnRegisterButton();

        Assert.assertTrue(apMyAccountPage.isLoaded());
    }

    @Test(description = "It logins successfully in the store with a valid user",
            priority = 2)
    public void LoginWithAValidUser(Method method) {
        apHomePage.goTo(baseURL);
        apHomePage.clickOnSignInButton();

        apAuthenticationPage.fillSignInForm(emailAddress, password);
        apAuthenticationPage.clickOnSignInButton();

        Assert.assertTrue(apMyAccountPage.isLoaded());
    }

    @Test(description = "It throws an error when the user attempts to login with an invalid user",
            priority = 3)
    public void LoginWithAnInvalidUser(Method method) {
        apHomePage.goTo(baseURL);
        apHomePage.clickOnSignInButton();

        apAuthenticationPage.fillSignInForm(Mocks.invalidPersonalData().getEmail(), Mocks.invalidPersonalData().getPassword());
        apAuthenticationPage.clickOnSignInButton();

        Assert.assertEquals("Authentication failed.", apAuthenticationPage.IsErrorBannerDisplayed());
    }
}

I'm suspecting that's something related to the testng.xml file (but, tbh, there are some things that I don't understand about how to configure correctly this file).我怀疑这与testng.xml文件有关(但是,我不明白如何正确配置此文件)。

I'll appreciate any help to solve my problem.我将不胜感激任何帮助解决我的问题。 Thanks in advance!提前致谢!

It's not a bug.这不是一个错误。 It work as expected.它按预期工作。

BeforeTest
BeforeMethod
Method 1: CreateNewUserWithValidData
BeforeMethod
Method 2: LoginWithAValidUser
BeforeMethod
Method 3: LoginWithAnInvalidUser
AfterTest

If you want to close the browser before method 2, then you need to change AfterTest --> AfterMethod , and initialize browser in BeforeMethod如果你想方法2之前关闭浏览器,那么你需要改变AfterTest - > AfterMethod ,并在初始化浏览器BeforeMethod

If you just want to change the testng.xml如果你只是想改变testng.xml

<test name="test1">
    <classes>
        <class name="Tests.AutomationPracticesTests">
            <methods>
                <include name="CreateNewUserWithValidData"/>
            </methods>
        </class>
    </classes>
</test>
<test name="test2">
    <classes>
        <class name="Tests.AutomationPracticesTests">
            <methods>
                <include name="LoginWithAValidUser"/>
            </methods>
        </class>
    </classes>
</test>
<test name="test3">
    <classes>
        <class name="Tests.AutomationPracticesTests">
            <methods>
                <include name="LoginWithAnInvalidUser"/>
            </methods>
        </class>
    </classes>
</test> 

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

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