Тестирование Shopware Войти через Behat Mink
Я не могу понять это.
Я определил следующую особенность:
Feature: Login
Scenario: Test Basic Login
Given I am on "/account"
And I login successfully as "demo@demo.de" with password "demodemo"
Then I should see "Abmelden"
Контекст объекта выглядит следующим образом:
/**
* @Given I login successfully as :arg1 with password :arg2
*/
public function iLoginSuccessfullyAsWithPassword($arg1, $arg2)
{
$page = $this->getSession()->getPage();
$page->fillField('email', $arg1);
$page->fillField('password', $arg2);
$page->pressButton('Anmelden');
}
И чтобы дать полную картину здесь мой behat.yml:
default:
extensions:
Behat\MinkExtension:
base_url: "http://192.168.33.10/s5224"
default_session: 'goutte'
javascript_session: 'selenium2'
goutte: ~
selenium2: ~
Теперь сценарий работает хорошо, пока I should see "Abmelden"
, Тогда я получаю
The text "Abmelden" was not found anywhere in the text of the current page. (Behat\Mink\Exception\ResponseTextException)
Это очень расстраивает, так как на самом деле я должен увидеть "Абмельден"...
Я пробовал это с несколькими версиями и конфигурациями behat / mink. Я также пытался искать другой текстовый контент на панели пользователя. Но, похоже, мне здесь не хватает очень фундаментальной информации.
Редактировать:
Я сбросил страницу после того, как позволил рутине нажать на "Anmelden"
, Я получаю следующий дамп xdebug:
Fatal error: Uncaught Shopware\Components\CSRFTokenValidationException: The provided X-CSRF-Token for path "/s5224/account/login/sTarget/account/sTargetAction/index" is invalid. Please go back, reload the page and try again. in /home/vagrant/www/s5224/engine/Shopware/Components/CSRFTokenValidator.php on line
Я предположил, что goutte
водитель просто не может справиться с такого рода поведением, поэтому аннотировал сценарий с @javascript
,
Сценарий теперь выглядит так:
@javascript
Scenario: Test Basic Login
Given I am on "/account"
And I login successfully as "demo@demo.de" with password "demodemo"
Then I should see "Abmelden"
Это теперь дало мне возможность использовать что-то вроде (как предложил lauda здесь: /questions/36959794/behat-selen-2-zhdut-zagruzki-stranitsyi/36959802#36959802)
$this->getSession()->wait(10000, "document.readyState === 'complete'");
Интересно, что сценарий теперь больше не может повлиять на account
стр. Когда я выкидываю страницу, она полностью пуста. Даже когда я жду до 60 секунд.
Так что теперь проблема, похоже, заключается в том, чтобы получить selenium2
водитель на самом деле получить доступ к account
страница, или чтобы получить goutte
водитель для обработки X-CSRF-Token
проблема.