用剧作家填充条纹元素卡

Fill Stripe Elements Card with Playwright

我想使用 Playwright 填写 Stripe Card Element

常规定位器似乎不起作用。以下示例不执行任何操作:

await page.fill('iframe input[name="cardnumber"]', '4242424242424242')

如何使用 Playwright 填写卡片输入(卡号、CVC、有效期、邮政编码)?

Stripe Card Elementsiframe 中呈现这些字段,因此我们需要获取 contentFrame 并从那里继续:

// probably need to use a more specific selector here
const stripeIframe = await page.waitForSelector('iframe')
const stripeFrame = await stripeIframe.contentFrame()

const cardNumInput = await stripeFrame.waitForSelector('input[name="cardnumber"]')

// @NOTE card no must be filled for rest of input fields to appear with
// appropriate [name] attributes.
await cardNumInput.fill('4242424242424242')

const cardExpInput = await stripeFrame.waitForSelector('input[name="exp-date"]')
const cardCVCInput = await stripeFrame.waitForSelector('input[name="cvc"]')
const cardZipInput = await stripeFrame.waitForSelector('input[name="postal"]')

await cardExpInput.fill('12/50')
await cardCVCInput.fill('123')
await cardZipInput.fill('99999')

这是使用添加到 v.1.17 的 Playwright FrameLocator API 实现此目的的最新方法。

const stripeFrame = page.frameLocator('iframe').first();
await stripeFrame.locator('[placeholder="Card number"]').fill('4242424242424242');
await stripeFrame.locator('[placeholder="MM / YY"]').fill('04/30');
await stripeFrame.locator('[placeholder="CVC"]').fill('242');