如果元素未显示,则重新加载页面-Codeception

如果元素未显示,则重新加载页面-Codeception,codeception,Codeception,因此,我试图让codeception在没有看到元素的情况下重新加载我的页面 if ($I->dontSeeElement('body > div.site > main > header > h1')) { $I->reloadPage(); } 我在功能之后的\u中设置了此项 但每次我运行测试时,它都会抛出一个错误。 我的逻辑是:如果它确实看到了那个元素,它应该继续前进。如果没有,则重新加载页面。您可能希望使用以下内容扩展acceptance te

因此,我试图让codeception在没有看到元素的情况下重新加载我的页面

if ($I->dontSeeElement('body > div.site > main > header > h1'))
{
    $I->reloadPage();
}
我在功能之后的
\u中设置了此项

但每次我运行测试时,它都会抛出一个错误。
我的逻辑是:如果它确实看到了那个元素,它应该继续前进。如果没有,则重新加载页面。

您可能希望使用以下内容扩展acceptance tester类:

public function reloadIfElementNotFound($selector)
{
    try {
        $this->seeElement($selector);
    } catch (\PHPUnit_Framework_ExpectationFailedException $e) {
        $this->reloadPage();
        $this->seeElement($selector);
    }
}
因此,它将尝试“查看”一个元素,如果找不到它,则会抛出一个
\PHPUnit\u Framework\u ExpectationFailedException
,您将捕获它,然后重新加载页面。此外,请确保元素在重新加载后可见。但是,如果在重新加载之后仍然不可见,那么将再次抛出异常并中断测试,我猜这将是所需的行为

在测试中,您只需使用:

$I->reloadIfElementNotFound('body > div.site > main > header > h1');

您需要创建一个返回布尔值的辅助函数。您可以在该函数中使用$I->DontSeeeElement()并捕获将引发的异常。此外,\u after函数似乎是使用它的错误位置,因为它将在测试后调用。您将在哪里调用它?在测试中,如果找不到该元素,您认为应该在哪里重新加载页面。