Codeception - 获取刷新页面的功能,直到元素可见

问题描述

我正在测试的 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...