5

为单击按钮时生成的 iFrame 编写测试。iFrame 名称和 id 相似,但动态生成。我之前已经成功使用过“switchToiFrame”。

<div class="bbbb-frame-container" style="height: 400px; width: 665px; margin-top: -200px; margin-left: -332.5px;">
<div class="user-support-frame-close-container" style="display: block;">
<div class="user-support-frame-close">Close</div>
</div>
<iframe id="poplock_default9636_priv" frameborder="0" name="poplock_default9636_priv" src="blah.blaag.com">
<!DOCTYPE html>

.....................

poplock_defaultNNNN_priv 是我想切换到的动态生成的 iFrame。

4

4 回答 4

9

首先,使用其中一种查找方法查找 iframe 。如果它是页面上唯一的 iframe(或第一个),请使用find() method. 如果不是,您将不得不使用findAll()并依赖订单(因为没有可以搜索的不同属性)。

找到 iframe 后,您可以使用getAttribute它来获取它的名称,然后使用switchToIframeto... 好吧,切换到 iframe。

于 2013-05-08T22:00:08.640 回答
3

谢谢 Jakub Zalas,你启发了我测试嵌入到 iframe 中的 Stripe PopUp 代码。

只是为了分享我测试 Stripe Payment PopUp 的经验:

$page = $this->getSession()->getPage();
$this->getSession()->getDriver()->switchToIFrame('stripe_checkout_app');
$page = $this->getSession()->getPage();

/** @var NodeElement $stripeInputField */
$stripeInputField = $page->findField($field); // where $field can be: 'Email, CVC, Card Number, MM / YY'
$emailInput->setValue($value);

// Switch Back to Main Window
$this->getSession()->getDriver()->switchToIFrame(null);
于 2017-03-27T08:39:35.160 回答
1

对谁可能有帮助,为了查找动态命名的 iframe,我在已知前缀上使用 CSS 选择器:

// Switch to the payment iframe.
$iframe = $this->getSession()->getPage()->find('css', 'iframe[name^="__privateStripeFrame"]');
$iframe_name = $iframe->getAttribute('name');
$this->getSession()->switchToIFrame($iframe_name);

CSS 选择器^=指的是“以 ... 开头” - 相反,如果*=“包含 ...”不是前缀,您可以使用它。

此示例用于获取 Stripe 3D Secure 弹出窗口。

于 2019-09-27T18:15:37.333 回答
0

如果您需要简单地操作 iFrame,请参阅此问题。例如,答案显示 Javascript 以获取第一个 iFrame,以便您可以操作它:

window.frames[0].document.body.<your action here>

他们还为任意 iFrame 提供了 jQuery 示例:

<iframe id="my_iframe" ...></iframe>
$('#my_iframe').contents().find('html').html();

虽然这些并不是您所要求的,但您可以更改它们以找到第 n 个 iFrame,如果您知道生成的 iFrame 的数量以及您想要操作的数量,然后根据需要进行操作。

于 2015-08-07T17:12:21.667 回答