wordpress Cypress:自动测试信用卡支付

bmp9r5qi  于 2023-03-07  发布在  WordPress
关注(0)|答案(4)|浏览(166)

我正在进行信用卡付款的自动测试。很遗憾,测试在到期日期项中失败
我的代码:

cy.getWithinIframe('[name="cardnumber"]').type('4242424242424242');
    cy.getWithinIframe('[name="exp-date"]').type('122024');
    cy.getWithinIframe('[name="cvc"]').type('987');

给出以下错误:

测试在哪里结束

k4ymrczo

k4ymrczo1#

所以对于iframe,我们必须寻找解决方法,因为cypress不提供对iframe的开箱即用支持。

**1.**我们将创建一个自定义命令,它将帮助我们遍历iframe,也有助于代码的可重用性。在cypress/support/command.js下写入:

Cypress.Commands.add('getIframe', (iframe) => {
    return cy.get(iframe)
        .its('0.contentDocument.body')
        .should('be.visible')
        .then(cy.wrap);
})

**2.**我看到测试有时会随机失败,所以如果我们使用retry option from cypress会更好。为此,请转到cypress.json并写入:

"retries": 2
此选项仅适用于cypress v5.0及更高版本。

3.在您的测试文件中,输入卡号用途:

cy.getIframe('#stripe-card-element > .__PrivateStripeElement > iframe').click().type('4242 4242 4242 4242')

输入失效日期时用途:

cy.getIframe('#stripe-exp-element > .__PrivateStripeElement > iframe').click().type('0921')

输入CVC编号时用途:

cy.getIframe('#stripe-cvc-element > .__PrivateStripeElement > iframe').click().type('123')
gwbalxhn

gwbalxhn2#

我也遇到了同样的问题,使用了同样的方法(https://medium.com/@michabahr/testing-stripe-elements-with-cypress-5a2fc17ab27b)。
问题是过期日期和cvv输入在不同的iframe中,可能是由于个性化的原因,所以你必须指定你的iframe在哪个iframe中:

cy.getWithinIframe('[name="cardnumber"]').type("4242424242424242");
cy.get('iframe')
    .eq(1)
    .iframeLoaded()
    .its('document')
    .getInDocument('[name="exp-date"]')
    .type('1225');

cy.get('iframe')
    .eq(2)
    .iframeLoaded()
    .its('document')
    .getInDocument('[name="cvc"]')
    .type('123');
1bqhqjot

1bqhqjot3#

对其他人来说:我得到了和@Gianmarco Gagliardi完全一样的错误
然后我按照@Alapan Das三个步骤,但仍然得到同样的错误。
对我有效的方法是先用修改后的@alapan Das解决方案点击iframe,添加强制力:true表示不考虑焦点而单击:

// yes, i have to type the whole cardnumber after click
cy.getIframe('iframe').click({ force: true }).type('4242424242424242')
cy.getWithinIframe('[name="cardnumber"]').type('4242424242424242');

我希望这对其他人有帮助。

2izufjch

2izufjch4#

上面提供的技术答案非常好,但是,首先,我想退一步说。
为什么还要在Cypress中测试呢?从质量保证的Angular 来说,我们不应该在e2 e中测试集成;相反,集成测试应该在较低的级别-集成级别上执行。在这里,我们可以模拟提供商的响应,然后继续讨论我们的应用将如何响应它。

相关问题