gpt4 book ai didi

selenium - 使用 ID 使用 Codeception 切换 IFrame

转载 作者:行者123 更新时间:2023-12-03 15:57:49 26 4
gpt4 key购买 nike

如何使用 ID 切换到带有 Codeception 的 IFrame?实际上我可以使用 IFrame 的名称,但不能使用 ID -> Codeception SwitchToIFrame

IFrame 示例:

<iframe id="iframeToolbar" src="link" frameborder="0" style="position: fixed; left: 0px; top: 0px; z-index: 998; width: 940px;" scrolling="no" width="100px" height="100%"></iframe>

代码接收示例:
<?php
# switch to iframe
$I->switchToIFrame("another_frame");
# switch to parent page
$I->switchToIFrame();

是否可能是 Codeception <-> Facebook Webdriver 连接问题?

编辑:我按照快速步骤指南重新安装了 Codeception。结果 - 问题仍然相同:Codeception 和 Facebook Webdriver 不想一起工作。 My Codeception Code

accept.suite.yml:
actor: AcceptanceTester
modules:
enabled:
- \Helper\Acceptance
- WebDriver:
url: https://xxxxxxxxxxxxxx.com
browser: chrome
window_size: maximize
clear_cookies: true

codeception.yml:
paths:
tests: tests
output: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
actor_suffix: Tester
extensions:
enabled:
- Codeception\Extension\RunFailed
settings:
colors: true
  • 操作系统:Windows 10
  • PHP:7.1.7
  • PHPUnit:6.4.4
  • Selenium 服务器:3.8.1
  • 代码接收:2.3.7
  • Chrome :63.0.3239.108
  • 最佳答案

    我遇到了这个问题,测试了一个包含 Google reCaptcha 的页面...... reCaptcha 在它自己的 iframe 中,并且由于该 iframe 是由 3rd 方代码生成的,我们无法控制它的 name 属性(至少当它是首先生成)。

    我最终做的是运行一个 javascript 片段,它可以根据其他东西找到 iframe,然后给它一个 id,以便 Codeception Webdriver 可以切换到它:

        public function _clickOnCaptcha(AcceptanceTester $I)
    {
    // give the recaptcha iframe a name so codeception webdriver can switch to it
    $recaptcha_frame_name = 'recaptcha-frame';
    $I->executeJS("$('.g-recaptcha iframe').attr('name', '$recaptcha_frame_name')");
    $I->switchToIFrame($recaptcha_frame_name);
    $I->see('not a robot');
    $I->seeElement('.rc-anchor');
    $I->click(['id' => 'recaptcha-anchor']);
    $I->switchToIFrame(); // switch back to main window
    }

    我确实控制了包含的元素,所以在这种情况下,它包含在类 g-recaptcha 的元素中。 ...所以我们使用 jquery 来查找该元素内的 iframe: $('.g-recaptcha iframe') ,然后给它一个名称属性: .attr('name', '$recaptcha_frame_name') .

    然后我们可以使用Codeception切换到它并点击验证码复选框:
    $I->switchToIFrame($recaptcha_frame_name);
    $I->click(['id' => 'recaptcha-anchor']);

    然后,当我们完成后,切换回主框架,以便我们可以提交表单:
    $I->switchToIFrame(); // switch back to main window

    注意,我在测试环境中使用了此处指定的 reCaptcha 测试 key ,因此它永远不会真正要求解决验证码。

    https://developers.google.com/recaptcha/docs/faq

    With the following test keys, you will always get No CAPTCHA and all verification requests will pass.

    Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe The reCAPTCHA widget will show a warning message to claim that it's only for testing purposes. Please do not use these keys for your production traffic.

    关于selenium - 使用 ID 使用 Codeception 切换 IFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890355/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com