【发布时间】:2021-04-01 10:15:14
【问题描述】:
我使用 cypress 一周以来,我成功地与条纹 iframe 进行了集成:我使用了以下代码:
在cypress/support/command.js
Cypress.Commands.add('iframeLoaded', { prevSubject: 'element' }, $iframe => {
const contentWindow = $iframe.prop('contentWindow')
return new Promise(resolve => {
if (contentWindow && contentWindow.document.readyState === 'complete') {
resolve(contentWindow)
} else {
$iframe.on('load', () => {
resolve(contentWindow)
})
}
})
})
Cypress.Commands.add('getInDocument', { prevSubject: 'document' }, (document, selector) =>
Cypress.$(selector, document),
)
在cypress/integration/staging-web/web.test.js
cy.get('iframe')
.eq(1)
.iframeLoaded()
.its('document')
.getInDocument('[name="cardnumber"]')
.then($iframe => {
if ($iframe.is(':visible')) {
$iframe.type('4242424242424242')
}
})
cy.get('iframe')
.eq(1)
.iframeLoaded()
.its('document')
.getInDocument('[name="exp-date"]')
.then($iframe => {
if ($iframe.is(':visible')) {
$iframe.type('1225')
}
})
cy.get('iframe')
.eq(2)
.iframeLoaded()
.its('document')
.getInDocument('[name="cvc"]')
.then($iframe => {
if ($iframe.is(':visible')) {
$iframe.type('123')
}
})
cy.get('.mt1 > .relative > .input').type('utente')
我的问题是,在页面加载过程中,cypress 不会等到条带字段完全加载,并且因为发生这种情况而出现错误(对不起,不是英语,但这是一个屏幕截图):
这些行是:
- 卡号
- 有效期,密码
- 第四行是持卡人
我试过.should('be.visibile'),但它什么也没做;另外我已经尝试过
cy.get('iframe')
.eq(1)
.iframeLoaded()
.its('document')
.getInDocument('[name="cardnumber"]')
.then($iframe => {
if ($iframe.is(':visible')) {
$iframe.type('4242424242424242')
}
})
但没办法,它总是给我一个错误;在后一种情况下,它甚至不会给出错误,它只是在不填写字段的情况下继续运行,然后因为无法在测试中继续而停止。
如果我在web.test.js 中的代码之前添加cy.wait(800),它可以正常工作,但我不想使用wait,因为它基本上是错误的(如果它在5 秒后加载会发生什么?)。
有没有办法检查这些元素是否必须有高度?
请记住,他们在iframe 中(很遗憾)。
【问题讨论】:
标签: javascript stripe-payments cypress