Невозможно запустить тесты после использования аннотации @Factory в Selenium с Java - PullRequest
1 голос
/ 11 марта 2019

Вот структура моего класса:

package com.gex.base.helper;

public class InitializeDriver extends BrowserFactory 
{

    HashMap<String, String> authenticationMap;

    @Factory(dataProvider="authentication", dataProviderClass=DataProviderList.class)
    public InitializeDriver(String userName, String uPassword)
    {
        authenticationMap=new HashMap<String, String>();
        authenticationMap.put("UserName", userName);
        authenticationMap.put("Password", uPassword);
    }


    @BeforeTest
     public void Gexlogin() 
      {
          LoginPF objLogin=PageFactory.initElements(BrowserFactory.driver, LoginPF.class);
           System.out.println("Logging into GEx");
           objLogin.loginToDGEx(authenticationMap.get("UserName"), authenticationMap.get("Password"));
          System.out.println("Successfully Logged into GEx");
    }

    @AfterTest
    public void directLogout(){

        // logout from application
        LogoutPF objLogoutTest = PageFactory.initElements(BrowserFactory.driver, LogoutPF.class);
        objLogoutTest.LogOffGEx();
        extent.flush();
        driver.close();
    }
}

LoginToGEx - это функция в другом классе, например:

public void loginToGEx(String strUsername, String strPassword)
{
    username.sendKeys(strUsername)
    password.sendKeys(strPassword);
    loginButton.click();
    System.out.println("Successfully Logged into GEx");
}

DataProviderClass

public class DataProviderList {

    @DataProvider(name="authentication")
    public static Object[][] authentication()
    {
        return new Object[][] {
            {"abc", "123"}, 
            {"xyz", "456"},
            };
    }

}

В другом классе есть класс @Test, расширяющий класс InitializeDriver.

    public class SampleTest extends InitializeDriver {

        public SampleTest(String userName, String uPassword) {
            super(userName, uPassword);
            // TODO Auto-generated constructor stub
        }

        @Test
        public void CreateNewEngTest() throws InterruptedException
        {
            test=extent.createTest("Eng Test","Create Eng Test");
            -Code (which is working fine before using @Factory)-----------------------

Структура Testng.xml:

<suite name="Sample Project" verbose="1" >

   <test name="Sample Test" group-by-instances="true" preserve-order="true">
  <classes>
            <class name="com.gex.base.testscripts.SampleTest" />                     
  </classes>
</test>
</suite>

Мой вопрос: перед использованием @Factory с dataprovider - мои тесты работали нормально, но когда я использовал аннотацию @Factory, ничего не происходило .. В классе SampleTest этот конструктор создается сам по себе ... может быть, это вызываетпроблема.

public SampleTest(String userName, String uPassword) {
            super(userName, uPassword);
            // TODO Auto-generated constructor stub
        }

Пожалуйста, объясните, как запускать тесты, используя @ Factory

Также еще 1 вещь , если я определяю фабричную аннотацию в моем сценарии @test, то каждый раз, когда яМне нужно войти в систему ... и у меня есть много тестовых случаев, и я хотел бы запустить вход в систему один раз, выполнить все сценарии @test, затем выйти из системы и начать заново с другим набором имени пользователя и пароля ... не каждый раз, когда запускается @test.Возможен ли этот сценарий?еще раз спасибо

1 Ответ

1 голос
/ 11 марта 2019

Это не работает, потому что вы аннотировали конструктор аннотацией @Factory, а затем использовали наследование.

Чтобы сохранить наследование и т. Д., Вы должны аннотировать класс SampleTest с помощью @Factory

Примерно так:


public class SampleTest extends InitializeWebDriver {
    private String userName, password;

    @Factory(dataProvider="authentication", dataProviderClass=DataProviderList.class)
    public SampleTest(String userName, String password) {
        super(userName, password)
    }
}


public class InitializeDriver extends BrowserFactory {
    private String userName, password;

    public InitializeDriver(String userName, String uPassword)
    {
        this.userName = userName;
        this.password = password;
    }

}

Это приведет к передаче @Factoryаргументы из DataProvider в ваш InitializeDriver класс и сохраните его как переменные экземпляра.

Затем вы можете использовать эти переменные, как в вашем @BeforeTest методе:

@BeforeMethod
public void Gexlogin() {
     LoginPF objLogin=PageFactory.initElements(BrowserFactory.driver, LoginPF.class);
     System.out.println("Logging into GEx");
     objLogin.loginToDGEx(userName, password); //changed to instance variables
     System.out.println("Successfully Logged into GEx");
}

РЕДАКТИРОВАТЬ: *Метод 1019 * будет выполняться только один раз, потому что TestNG рассматривает @Factory тесты как один тестовый случай!Если вы хотите войти перед каждым тестом, вам нужно использовать @BeforeMethod

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...