如果元素未显示,请重新加载页面 - 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');