我正在为网站撰写验收/功能测试并遇到以下问题。
在网站上有一个菜单:
<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');
然后加载了我需要的页面。
当我使用类似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'); // <<-----
...
}
然后,我收到以下错误:
不允许的方法(#405)。此网址只能处理 以下请求方法:。上面的错误发生了 Web服务器正在处理您的请求。
如果您认为这是服务器错误,请与我们联系。谢谢。
可能是什么原因?我非常感谢这些信息。谢谢大家。
答案 0 :(得分:0)
虽然解决方案在我看来如下......
除了标记为protected
之外的所有方法,因此它们不会作为测试执行。
然后我从&#34; main&#34;测试方法:
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)
{
...
}
等等。虽然错误的原因仍不清楚。我是否发送了不允许类型的请求?