无法模拟通过 link:方法不允许的错误 (#405)

Can't emulate going through the link: Method not allowed error (#405)

我正在为网站编写验收/功能测试,遇到以下问题。

网站上有一个菜单:

<ul class="b">
<li ng-repeat="item2 in item.items" class="ng-scope">
  <a href="/persons/personaccount/index" class="ng-binding">Account</a>
</li><li ng-repeat="item2 in item.items" class="ng-scope">
  <a href="/persons/persontype/index" class="ng-binding">Person type</a>
</li><li ng-repeat="item2 in item.items" class="ng-scope">
  <a href="/persons/person/index" class="ng-binding">Person</a>
</li>
</ul>

在普通模式下,我可以随意点击任何物品。 在一个连续的 Cept- 文件中,我可以调用方法:

$I->click('//*[@class="b"]/li[last()]/a');

然后加载了我需要的页面。

当我使用类似于class 的Cest 格式(我更喜欢它)时出现问题。如果我从我通过授权的方法进行此调用,例如:

public function tryToDoSomething(FunctionalTester $I)
{
    $I->amOnPage('/site/login');

    $I->fillField('#loginform-username','admin');
    $I->fillField('#loginform-password','admin');

    $I->seeElement('button', ['name' => 'login-button']);

    $I->click('#login-form button[type=submit]');

    $I->wait(5);

    $I->cantSee('....', '.error-block');

    ... 
    $I->click('//*[@class="b"]/li[last()]/a'); // <<-----
}

然后页面加载。但是,如果我将此调用移至另一种方法, 在逻辑上更合适的地方,例如:

public function tryToDoSomething(FunctionalTester $I)
{
    $I->amOnPage('/site/login');
    ...
    $I->cantSee('....', '.error-block');

    ...     
}

public function TryToDoAnythingElse(FunctionalTester $I)
{
    ...
    $I->click('//*[@class="b"]/li[last()]/a'); // <<-----
    ...
}

然后,我得到以下错误:

Method Not Allowed (#405). This url can only handle the following request methods: . The above error occurred while the Web server was processing your request.

Please contact us if you think this is a server error. Thank you.

可能是什么原因?

虽然在我看来解决方案如下.. 除了一个我标记为 protected 的方法之外的所有方法,因此它们不会作为测试执行。

然后我从 "main" 测试方法调用它们:

protected function tryToDoSomething(FunctionalTester $I)
{
    $I->amOnPage('/site/login');
    ...
    $I->cantSee('....', '.error-block');

    ...     
}

public function tryToDoAnythingElse(FunctionalTester $I)
{
    tryToDoSomething($I);
    $I->click('//*[@class="b"]/li[last()]/a');
    ...
}

如果我使用这种方法,就不会出现错误。

那么整个测试可以表示为对受保护方法的一系列调用:

public function tryToGoThroughTheFlow(FunctionalTester $I) 
{
    $this->tryToA($I);
    $this->tryToB($I);
    $this->tryToC($I);
    $this->tryToD($I);
    ...
}

,其中:

protected function tryToA(FunctionalTester $I) 
{
   ...
}

protected function tryToB(FunctionalTester $I) 
{
   ...
}

等等。虽然错误原因还不清楚..我正在发送不允许类型的请求?