Php 使用Behat Mink测试Shopware登录
我似乎无法理解这一点 我定义了以下特性:Php 使用Behat Mink测试Shopware登录,php,testing,behat,mink,shopware,Php,Testing,Behat,Mink,Shopware,我似乎无法理解这一点 我定义了以下特性: 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
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');
}
让我在这里完整地描述一下我的行为:
default:
extensions:
Behat\MinkExtension:
base_url: "http://192.168.33.10/s5224"
default_session: 'goutte'
javascript_session: 'selenium2'
goutte: ~
selenium2: ~
现在该场景运行良好,直到我应该看到“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"
现在,我可以选择使用以下内容(正如劳达在这里建议的那样:)
但有趣的是,该场景现在似乎不再能够出现在账户
页面上。当我转储页面时,它是完全空的。即使我最多等待60秒
因此,现在的问题似乎是要么让
selenium2
驱动程序实际访问帐户
页面,要么让goutte
驱动程序处理X-CSRF-Token
问题 确保您等待页面加载,添加一个小的等待调试或断点,如果您看到它但步骤仍然失败,那么可能是区分大小写的,检查页面并从那里复制文本。@lauda我已经尝试了所有这些。我已经等了2分钟了。我意识到在登录之后,实际上发生了重定向。我认为这可能是问题的根源,但我能在网上找到的只是关于如何避免重定向的说明。所以在我看来,遵循重定向实际上是默认行为,这正是我想要的。它仍然不起作用。我尝试了许多直接从用户仪表板复制的不同文本。您是否尝试过像这里这样等待页面加载@劳达:我已经编辑了原始问题,也许这些错误是你以前遇到过的?@劳达,请查看编辑。我知道我们的交易是以毫秒为单位的。我转储了页面,发现了一个关于csrf令牌的x-debug错误。我该如何解决这个问题?
$this->getSession()->wait(10000, "document.readyState === 'complete'");