如果元素未显示,请重新加载页面 - Codeception
Reload page if element does not show - Codeception
所以我正在尝试让 codeception 在它没有看到元素时重新加载我的页面。
if ($I->dontSeeElement('body > div.site > main > header > h1'))
{
$I->reloadPage();
}
我在 _after
函数中设置了这个。
但是每次我 运行 我的测试,它都会抛出一个错误。
我的逻辑是:如果它确实看到那个元素,它就应该继续前进。如果没有,则重新加载页面。
您可能想用这样的东西扩展您的验收测试器 class:
public function reloadIfElementNotFound($selector)
{
try {
$this->seeElement($selector);
} catch (\PHPUnit_Framework_ExpectationFailedException $e) {
$this->reloadPage();
$this->seeElement($selector);
}
}
因此,它会尝试 "see" 一个元素,如果找不到,则会抛出一个 \PHPUnit_Framework_ExpectationFailedException
,你将要 catch
然后重新加载页。另外,确保元素在重新加载后可见。但是,如果它在重新加载后仍然不可见,那么将再次抛出异常并中断测试,我想这将是所需的行为。
在您的测试中,您只需使用:
$I->reloadIfElementNotFound('body > div.site > main > header > h1');
所以我正在尝试让 codeception 在它没有看到元素时重新加载我的页面。
if ($I->dontSeeElement('body > div.site > main > header > h1'))
{
$I->reloadPage();
}
我在 _after
函数中设置了这个。
但是每次我 运行 我的测试,它都会抛出一个错误。 我的逻辑是:如果它确实看到那个元素,它就应该继续前进。如果没有,则重新加载页面。
您可能想用这样的东西扩展您的验收测试器 class:
public function reloadIfElementNotFound($selector)
{
try {
$this->seeElement($selector);
} catch (\PHPUnit_Framework_ExpectationFailedException $e) {
$this->reloadPage();
$this->seeElement($selector);
}
}
因此,它会尝试 "see" 一个元素,如果找不到,则会抛出一个 \PHPUnit_Framework_ExpectationFailedException
,你将要 catch
然后重新加载页。另外,确保元素在重新加载后可见。但是,如果它在重新加载后仍然不可见,那么将再次抛出异常并中断测试,我想这将是所需的行为。
在您的测试中,您只需使用:
$I->reloadIfElementNotFound('body > div.site > main > header > h1');