Cypress 12.9.0 Stripe Payment 无法正常工作,并且 cypress.config,js 中可能存在新设置 [已关闭]

问题描述 投票:0回答:1

我是一个初学者,我尝试在以下网站中使用 cypress(javascript) 自动支付薪金: https://stripe- payments-demo.appspot.com/

我正在尝试以 .js 格式实现该解决方案

我尝试了很多解决方案

  1. 首先我尝试了stripe支付插件 如何在cypress中获取条纹元素

  2. 其次,我配置了 cypresss.config.js 设置

我禁用了 Chrome Web 安全和其他设置

  1. 然后我查看了各种博客和论坛,寻找可能的解决方案,例如: https://bionicjulia.com/blog/cypress-testing-stripe-elements

  2. 目前我正在尝试实现这个解决方案: Cypress 12.8.1 无法与 Stripe Elements iframe 配合使用

但我收到以下错误 在此输入图片描述

这是.js中的代码

/// <reference types="Cypress" />
/// <reference types="Cypress-iframe" />

import 'cypress-iframe'
import 'cypress-plugin-stripe-elements';
describe('Stripe Payment', ()=> {
    it('careerEDPayment', ()=> {
        cy.intercept({ resourceType: /xhr|fetch/ }, { log: false })  // suppress fetch logs 
cy.viewport(1500, 1000)
cy.visit('https://stripe-payments-demo.appspot.com');  

function getStripeField({iframeSelector, fieldSelector}, attempts = 0) {
    Cypress.log({displayName: 'getCardField', message: `${fieldSelector}: ${attempts}`})
  
    if (attempts > 50) throw new Error('too many attempts')
  
    return cy.get(iframeSelector, {timeout:10_000, log:false})
      .eq(0)
      .its('0.contentDocument')
      .find('body', {log:false})
      .then(body => {
        const stripeField = body.find(fieldSelector)
        if (!stripeField.length) {
          return cy.wait(300, {log:false})
            .then(() => {
              getStripeField({iframeSelector, fieldSelector}, ++attempts)
            })
        } else {
          return cy.wrap(stripeField)
        }
      })
  }
  getStripeField({
    iframeSelector: 'iframe[name^="__privateStripeFrame"]', 
    fieldSelector: 'div.CardNumberField-input-wrapper'
  })
  .type('4242424242424242')

    })
} )

即使调整了一些设置后,它仍然显示 0.contentDocument 在您的主题上不存在。

stripe-payments cypress
1个回答
3
投票

您刚刚犯了一个拼写错误,请看示例 - 对于您测试的特定页面,索引是

1
而不是
0

cy.visit('https://stripe-payments-demo.appspot.com')

function getStripeField({iframeSelector, fieldSelector}, attempts = 0) {
    Cypress.log({displayName: 'getCardField', message: `${fieldSelector}: ${attempts}`})
    if (attempts > 50) throw new Error('too many attempts')
  
    return cy.get(iframeSelector, {timeout:10_000, log:false})
      .eq(1)               // this index           
      ...
© www.soinside.com 2019 - 2024. All rights reserved.