Cypress:无法使用 else if 条件,并且不会执行任何步骤,但计时器正在运行

-1 javascript iframe cypress

无法使用下面的 else if 条件并始终坚持使用 if

cy.get("#result").iframeOnload().find(".text-error").invoke('text').as('iframeText');
            cy.get('@iframeText').then((iframeText) => {
                if(iframeText === expectedFailText){
                    ResultPage
                    .getResultErrorMessage()
                    .should("have.text", expectedFailText);
                }
                else if(expectedPassText){
                    ResultPage
                    .getResultPassedMessage()
                    .should("have.text", expectedPassText);
                }
            });
Run Code Online (Sandbox Code Playgroud)

Zoe*_*Zoe 5

这是如何不编写测试的一个很好的例子!

您只能得到一个结果,因此您是否打算重复运行它,希望涵盖这两种结果if()else()获得随机结果?

我建议您首先分成两个测试,并分别设置先决条件给您passText和。failText

从技术角度来说,您不能将别名与<iframe>. 这是因为 iframe 具有contentWindow并且别名将尝试重新查询它,但会失败。

无论里面有什么.iframeOnload(),删除它并使用该cypress-iframe插件。使用它首先确定 iframe 已加载,然后在<iframe>范围内运行正常测试。

一个粗略的例子

it('tests the pass text', () => {
  // precursor condition - setup for pass
  cy.enter('#my-iframe').then(getBody => {
    getBody().find(".text-error").invoke('text')
      .should('have.text', expectedPassText)
  })
})

it('tests the fail text', () => {
  // precursor condition - setup for fail
  cy.enter('#my-iframe').then(getBody => {
    getBody().find(".text-error").invoke('text')
      .should('have.text', expectedFailText)
  })
})
Run Code Online (Sandbox Code Playgroud)