2

我遇到了赛普拉斯异步机制的问题。我有一个放置在此文件中的自定义命令

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')
        })
    });
4

2 回答 2

0

您可以发出cy.wrap带有值的新命令并null在函数中调用异步.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方法短,如果不使用更大的超时时间,将导致测试失败。

于 2020-11-02T09:56:05.130 回答
-1

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

于 2021-08-27T10:27:02.110 回答