Является ли хорошей практикой инициировать один объект на все тесты страниц? - PullRequest
0 голосов
/ 30 ноября 2018

Я использую Selenium с шаблоном объекта страницы.У меня есть вопрос о создании объектов классов объектов страницы.

Какой вариант лучше:

@BeforeTest
public void browser() throws IOException {
    driver = initializeBrowser();
    loginPage = new LoginPage(driver);
}

и использование его следующим образом:

@Test
public void loginToApp() throws InterruptedException {
    loginPage.clickLoginButton();
    Assert.assertTrue("some assertion");
}

@Test
public void loginToAppUsingLogin() throws IOException {
    loginPage.sendLogin("login");
    loginPage.sendPassword("password");
    loginPage.clickLoginButton();

    Assert.assertTrue("some assertion");
}

Или

 @BeforeTest
 public void browser() throws IOException {
     driver = initializeBrowser();
 }


 @Test
 public void loginToApp() throws InterruptedException {
     loginPage = new LoginPage(driver);
     loginPage.clickLoginButton();
     Assert.assertTrue("some assertion");
 }

 @Test
 public void loginToAppUsingLogin() throws IOException {
     loginPage = new LoginPage(driver);
     loginPage.sendLogin("login");
     loginPage.sendPassword("password");
     loginPage.clickLoginButton();

     Assert.assertTrue("some assertion");
 }

Есть ли какие-либо противопоказания для создания одного объекта в @BeforeTest для каждого набора тестов?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

По-моему, я думаю, вы тут раскалываетесь.Для меня я предпочитаю создавать новый объект на тест просто потому, что он обеспечивает «чистый» запуск, т. Е. Я не использую один и тот же экземпляр для нового теста.И чтобы быть еще более понятным / прозрачным, я очищаю кеш в браузере также каждый раз.

В каждом тесте я делаю это:

[Test, Order(10), Description("Navigate to the 'Dashboard' page, click the 'Open' button and fill out the form that loads.")]
public void NavigateToDashboardAndClickElement()
{
   //  Setup a null instance of IE for use in testing.
   IWebDriver driver = null;
   //  Instantiate the IESetupHelper class.
   IESetupHelper setupIE = new IESetupHelper();
   //  Set the environment variables for IE, and launch the browser.
   setupIE.SetupIEVariables(driver);
}

И для настройки самого браузераЯ делаю следующее:

public void SetupIEVariables(IWebDriver driver)
{
   //  Set the options for the driver instance.  In this case, we are ignoring the zoom level of the browswer we are going to use.
   InternetExplorerOptions options = new InternetExplorerOptions { IgnoreZoomLevel = true };
   //  Clear the broswers cache before launching.
   options.EnsureCleanSession = true;
   //  Create a new driver instance.
   driver = new InternetExplorerDriver(@"path to driver here", options);
   //  Set the window size for the driver instance to full screen.
   driver.Manage().Window.Maximize();
   //  Set the URL for the driver instance to go to.
   driver.Url = @"some URL here";
}
0 голосов
/ 30 ноября 2018

Я не знаю, что такое согласие, но аннотация @BeforeTest используется правильно, как вы.Он инициализирует ваш объект loginPage перед каждым отдельным тестом.

(я предполагаю, что вы используете TestNG)

По моему опыту, ваш первый подход лучше, так как он также уменьшает количество повторяющегося кода.См. СУХОЙ

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