Я создал очень простой тест входа в Behat для входа в наше внутреннее приложение. Существует два типа входа в систему (выполняется с одного и того же экрана и окна). Есть базовый и продвинутый. Единственное отличие состоит в том, что в расширенном режиме пользователь, который входит в систему, имеет доступ к более чем одной компании, и его просят выбрать компанию для работы.
Я обнаружил, что всякий раз, когда я запускаю сценарии через PhantomJS вместо Selenium, они работают намного быстрее (очевидно, поскольку ничего не нужно отображать в эмуляторе безголового браузера). Когда я впервые запускаю PhantomJS, он отлично работает в обоих сценариях. Но затем я запускаю его во второй раз, и он не работает в первом сценарии (базовый вход в систему).
Если я перезапущу PhantomJS, он снова будет работать до второй попытки. Я очень смущен этим. Почему мне нужно перезапустить PhantomJS, чтобы оба теста снова прошли при первом вызове.
Если я укажу, что я просто хочу, чтобы он запускал расширенный вход в систему при последующих запусках, он также не сможет войти в систему. Если я укажу базовый логин (по-прежнему предотвращая запуск обоих сценариев), это также не удастся. Но когда я запускаю оба сценария в одном и том же вызове, первый всегда терпит неудачу, а второй всегда проходит.
Я даже изменил порядок так, чтобы базовый сценарий выполнялся вторым, а не первым, и первый сценарий (в данном случае расширенный) терпит неудачу, а второй проходит. Так что же происходит в мире?
В качестве дополнительного бонуса я пошел дальше и добавил строку, которая гласит: «Затем я следую «Выйти из системы»», и внезапно оба сценария снова проходят. Что имело бы смысл, если бы не тот факт, что он отлично работает во втором сценарии. Разве это не должно привести к сбою обоих, если он уже вошел в систему? Есть ли способ убедиться, что кеш для PhantomJS очищается в конце каждого сценария?
Feature: Login
Login to app using a basic user
Login to app using a multi-company user
@javascript
Scenario: Basic Login
Given I am on "/"
And I wait a few seconds
When I fill in "login" with "ijones"
And I fill in "password" with "SomeP@ssword"
And I press "LoginButton"
And I wait a few seconds
Then I should see "By clicking below"
And I press "OK"
Then I should see "Welcome"
@javascript
Scenario: Advanced Login
Given I am on "/"
When I fill in "login" with "rtyler"
And I fill in "password" with "SomeP@ssword"
And I press "LoginButton"
Then I wait for the company selection box
And I click a field "company"
And I pick "Test Company 2"
And I press "CompanyLoginButton"
Then I should see "By clicking below"
And I press "OK"
Then I should see "Welcome"