首页 > 解决方案 > 赛普拉斯测试通过了单个表单输入字段,但忽略了以下输入字段

问题描述

我正在尝试在 Cypress 中测试带有 3 个输入字段的 Stripe 表单。我找到了一个示例,该示例可用于测试获取所有付款信息的单个输入(https://medium.com/@chipomapondera/hi-michael-98e432948028)。

我的版本继续输入 CC,但在下一个输入时失败。我的代码如下:

it('checks user can support the Creator', () => {
        cy.get('button[class="buttons__FollowButton-sc-10ti9z2-0 huoUmA"]').click()
        cy.wait(4000)
        cy.get('body')
          .should('contain', 'Join this community')
        cy.get('button[class="styledComponents__SubscribeButton-g42pit-3 kUgWbq"]').click()
        cy.getWithinIframe('[name="cardnumber"]').type('4242424242424242')
          .getWithinIframe('[name="exp-date"]').type('1232')
          .getWithinIframe('[name="cvc"]').type('987')
    })

输入卡号后好像不像下面这样: cy.getWithinIframe('[name=”exp-date”]').type('1232') cy.getWithinIframe('[name=”cvc ”]').type('987')

我收到的错误是: cypress error

标签: cypress

解决方案


我关注了您分享的中篇文章,并遇到了与您相同的问题。造成这个问题的原因当然是stripe在创建多个iframe,而文章中创建的方法只是获取第一个iframe。

所以一个非常简单的解决方案是将包含 iframe 的 div 的 id 传递给我们的 getWithinIframe 函数。该函数现在将如下所示:

Cypress.Commands.add('getWithinIframe', (iframeSelector, targetElement) =>
cy.get(`#${iframeSelector} iframe`).iframeLoaded().its('document').getInDocument(targetElement));

并这样称呼它:

cy.getWithinIframe('cardNumberElement','[name="cardnumber"]').type(1212123);

希望这可以帮助任何面临同样问题的人。


推荐阅读