如何等待我的自定义命令完成,然后执行剩余的赛普拉斯命令

How to wait my custom command finish, then executing remaining Cypress commands

我在使用 Cypress 异步机制时遇到了问题。我有一个放在这个文件中的自定义命令

class HeaderPage {

    shopLink = 'a[href="/angularpractice/shop"]'
    homeLink = ''

    navigateToShopPage() {
        cy.get(this.shopLink).click()
    }

    sshToServer() {
        setTimeout(() => {
            console.log('Connecting')
        }, 5000)
        console.log('Connected')
    }
}

export default HeaderPage

函数sshToServer模拟暂停5000ms。所以我希望赛普拉斯剩余的测试将被搁置并等待这个功能完成。我怎样才能做到这一点?提前致谢。

import HeaderPage from "../support/pageObjects/HeaderPage"

describe('Vefiry Alert and Confirm box', () => {

    const headerPage = new HeaderPage()

    it('Access home page', () => {
        cy.visit(Cypress.env('url') + 'AutomationPractice/')
    });

    it('SSH to server', () => {
        headerPage.sshToServer()
    });

    it('Verify content of Alert', () => {
        cy.get('#alertbtn').click()
        cy.on('window:alert', (alert) => {
            expect(alert).to.equal('Hello , share this practice page and share your knowledge')
        })
    });

您可以使用值 null 发出新的 cy.wrap 命令并在 .then 函数中调用您的异步函数。赛普拉斯将自动解决该异步功能,然后继续下一个测试。

首先,您应该将 sshToServer 方法转换为 async(promise) 函数:

sshToServer() {
  console.log('Connecting');
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('Connected');
      resolve();
    }, 5000);
  });
}

然后,在您的规范中:

it('SSH to server', { defaultCommandTimeout: 5000 }, () => {
  cy.wrap(null).then(() => headerPage.sshToServer());
});

请注意,我还为规范 defaultCommandTimeout 使用了更大的超时时间,因为默认超时为 4 秒,比您的 sshToServer 方法短,如果不使用更大的超时。

抱歉回答晚了,但我认为这是最简单的方法 cy.wait(milliseconds)