【发布时间】:2021-05-18 17:52:42
【问题描述】:
我使用 Stripe 进行支付,使用 angular e2e 进行测试。我想将卡测试数据添加到支付窗口中。 Stripe 注入了一个 iframe,包括。将表单元素放入#card-element(这是我的标记的一部分),但没有表单名称和ID。这是 Stripe 注入支付容器后的部分标记:
<div id="card-element" class="StripeElement StripeElement--empty">
<div class="__PrivateStripeElement">
<iframe frameborder="0" allowtransparency="true" scrolling="no" name="__privateStripeFrame5395" allowpaymentrequest="true" src="https://js.stripe.com/v3/elements-inner-card-xxx.html" ></iframe>
</div>
</div>
iframe 内部是(仍然只显示部分标记):
<form class="ElementsApp is-empty" dir="ltr">
<div tabindex="-1" class="CardNumberField CardNumberField--ltr">
<div class="CardNumberField-input-wrapper">
<input class="InputElement is-empty Input Input--empty" autocomplete="cc-number" autocorrect="off" spellcheck="false" type="text" name="cardnumber" data-elements-stable-field-name="cardNumber" inputmode="numeric" aria-label="Kredit- eller debetkortnummer" placeholder="Kortnummer" aria-invalid="false" value="">
</div>
</div>
<button tabindex="-1" aria-hidden="true" type="submit"></button>
</form>
// 检查器的完整选择器: //#root > form > div > div.CardField-input-wrapper.is-ready-to-slide > span.CardField-number.CardField-child > span:nth-child(2) > div > div.CardNumberField-输入包装器 > 跨度 > 输入
我已经成功地选择了卡片元素和 iframe:
var cont = document.getElementById('card-element');
console.log(cont); // i get the card-element markup
var iframe = cont.getElementsByTagName('iframe');
console.log(iframe);
iframe 在控制台中显示:
HTMLCollection []
0: iframe
length: 1
__privateStripeFrame3085: iframe
__proto__: HTMLCollection
从这里我有点卡住了,我在 iframe[0] 数组中单击,但我在列表中找不到 name="cardnumber",搜索它会给我 15 次点击,但数据集没有打开,所以还是卡住了。 CardNumberField-input-wrapper 只提供 3 次点击,但同样的问题,没有打开...
所以我的问题是,我如何将数据填充到名为“cardnumber”的输入字段中?
顺便说一句:我也知道跨域问题,但我还没有遇到这些问题,并且不确定我是否会这样做,因为 iframe 是从 Stripe 注入的。
【问题讨论】:
标签: javascript iframe stripe-payments e2e-testing