Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cypress 重新加载页面直到元素可见_Cypress - Fatal编程技术网

Cypress 重新加载页面直到元素可见

Cypress 重新加载页面直到元素可见,cypress,Cypress,我有以下情况: 用户上传文件后,屏幕上会出现一个表格报告。问题是:表格不会自动出现,用户需要重新加载页面,如果文件已经处理,表格会显示在屏幕上,如果仍在处理中,用户需要等待一点,然后再次重新加载 如何在不使用cy.wait()等待任意时间的情况下完成此任务。我的想法是: cy.reload().should(() => { expect(document.querySelectorAll('table')).to.not.be.empty }) 但是不起作

我有以下情况:

用户上传文件后,屏幕上会出现一个表格报告。问题是:表格不会自动出现,用户需要重新加载页面,如果文件已经处理,表格会显示在屏幕上,如果仍在处理中,用户需要等待一点,然后再次重新加载

如何在不使用cy.wait()等待任意时间的情况下完成此任务。我的想法是:

    cy.reload().should(() => {
        expect(document.querySelectorAll('table')).to.not.be.empty
    })
但是不起作用

如果
should()
断言失败,只使用Cypress。正如您所看到的,
reload()
不是其中之一

我建议使用递归来实现重复的重新加载循环。以下是一个例子:

let remainingAttempts = 30;

function waitUntilTableExists() {
    let $table = Cypress.$('table');
    if ($table.length) {
        // At least one table tag was found.
        // Return a jQuery object.
        return $table;
    }

    if (--remainingAttempts) {
        cy.log('Table not found yet. Remaining attempts: ' + remainingAttempts);

        // Requesting the page to reload (F5)
        cy.reload();

        // Wait a second for the server to respond and the DOM to be present.
        return cy.wait(1000).then(() => {
            return waitUntilTableExists();
        });
    }
    throw Error('Table was not found.');
}

waitUntilTableExists().then($table => {
    cy.log('table: ' + $table.text());
});

您可能会尝试使用
for
while
循环,但这对Cypress不起作用。这是因为大多数命令不是立即执行的。相反,.

我认为这不会重复
reload()
。可能
cy.wrap({}).should(()=>{cy.reload();expect(…
)。您可以拦截将获取所需数据的请求,并可以继续重新加载,直到收到所需数据。