我似乎无法弄清楚这一点。
我定义了以下功能:
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)
这非常令人沮丧,因为我实际上应该看到“Abmelden”......
我已经尝试过使用 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"
这现在让我可以选择使用类似的东西(正如劳达在这里建议的那样:https ://stackoverflow.com/a/38207434/2815176 )
$this->getSession()->wait(10000, "document.readyState === 'complete'");
不过有趣的是,该场景现在似乎不再能够出现在account页面上。当我转储页面时,它完全是空的。即使我等待长达 60 秒。
所以现在的问题似乎是要么让selenium2驱动程序实际访问account页面,要么让goutte驱动程序处理X-CSRF-Token问题。