Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Behat Mink测试Shopware登录_Php_Testing_Behat_Mink_Shopware - Fatal编程技术网

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'");