问题描述
我正在测试的 UI 有时在至少刷新一次页面后才会显示我需要的元素,有时高达 3 倍,所以我希望 Codeception 刷新页面直到元素出现。
在我的辅助方法中,我有一个预先存在的函数,我们项目的创建者必须将其放入。我不知道它是否有效,因为如果我调用它,它刷新页面的速度如此之快以至于它永远不会加载足够的元素出现。我最终收到超时错误。
public function waitForAndSeeElementInDOMWithPageRefresh($selector)
{
$this->_newLSWaiter()->waitFor(
function () use ($selector) {
try {
$this->seeElementInDOM($selector);
return true;
} catch (ExpectationFailedException $e) {
// Catch,it's not in DOM yet
Debug::debug('Page Reloaded');
$this->reloadPage();
return false;
}
}
);
}
我添加了一个 for 循环来尝试多次并在此处重构函数,还添加了点击:
public function reloadPageUntilElementAppears($selector)
{
$this->_newLSWaiter()->waitFor(
function () use ($selector) {
$count = 3;
for (; $count > 0; $count--) {
try {
$this->seeElementInDOM($selector);
$this->click($selector);
return true;
} catch (ExpectationFailedException $e) {
// Catch,it's not in DOM yet
$this->reloadPage();
//without a wait,the page is reloaded too quickly
$this->wait(1);
$this->waitForJs('return document.readyState == "complete"',60);
}
$count--;
}
return false;
}
);
}
但是如果没有 wait(1),它仍然无法工作。我知道这是不好的形式,所以如果可能的话,我想使用条件等待,但如果没有在 Codeception Actions 类中设置它,我似乎无法做到这一点,而且我还没有准备好解决开源问题项目本身。有人有什么想法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)