无法模拟通过 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)
{
...
}
等等。虽然错误原因还不清楚..我正在发送不允许类型的请求?
我正在为网站编写验收/功能测试,遇到以下问题。
网站上有一个菜单:
<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)
{
...
}
等等。虽然错误原因还不清楚..我正在发送不允许类型的请求?