Создайте Selenium Webdriver один раз и используйте на всех этапах Cucumber. - PullRequest
0 голосов
/ 09 октября 2018

У меня есть опыт в тестировании автоматизации Back-End, но я новичок в Front-End.Я создал тесты в формате BDD для веб-сайта и теперь хочу его автоматизировать.Я решил использовать селен + огурец, используя maven для настольных версий веб-сайта.

Теперь давайте начнем:

например, мой файл функций выглядит примерно так:

Feature: User change password page
Scenario: User doesn't provide passwords
Given user is logged in 
And user is on change password page
When user clicks SAVE button
Then website should notify that password fields are mandatory

Scenario: User types wrong current password
Given user is logged in 
And user is on change password page
When user provides invalid current password
And user clicks on save button
Then website should notify user that current password is invalid

ХОРОШО .Сначала я подумал, что было бы хорошо, чтобы я вошел в систему только для первого сценария (в этом примере во втором сценарии я уже вошел бы в систему).Но, как я понял, это не очень хороший подход.Поэтому я открываю и закрываю браузер для каждого сценария, используя код:

@Before
 public void beforeScenario(){
  driver.get("https://example.com");
}

@after
 public void afterScenario(){
  driver.close();
}

Это нормально для меня.Но я не хочу создавать WebDriver для каждого сценария и не хочу инициализировать свои объекты POM для каждого сценария.

теперь мой метод Before выглядит следующим образом:

WebDriver driver;
HomePage home;
LoginPage login;
RegistrationPage reg;

@Before
public void beforeScenario(){
  driver = new ChromeDriver();
  home = new HomePage();
  login = new LoginPage();
  reg = new RegistrationPage();
}

Я хочу инициализировать эти объекты перед выполнением шагов и использовать их на каждом шаге.

Я исследовал и обнаружил, что cucumber-jvm не поддерживает ловушку @beforeAll.

Также я не делаю 'Я не хочу делать какие-то манипуляции, например:

 if( firstTime) {
  //initialise everythin
  firstTime = false
 } else {
 //do nothing
 }

Как мне этого добиться?Где я могу инициализировать все, что хочу, до начала моих тестов?

...