如何使用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>
Codeception示例:
<?php
# switch to iframe
$I->switchToIFrame("another_frame");
# switch to parent page
$I->switchToIFrame();
它可能是一个Codeception&lt; - &gt; Facebook Webdriver连接问题?
编辑:我重新安装了Codeception,遵循快速步骤指南。结果 - 问题仍然相同:Codeception和Facebook Webdriver不希望一起工作。 My Codeception Code
acceptance.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
答案 0 :(得分:2)
我遇到了这个问题,在其中测试了一个带有Google reCaptcha的页面... reCaptcha在其自己的iframe中,并且由于iframe是由第三方代码生成的,因此我们无法控制其名称属性(at至少在它首次生成时)。
我最终做的是运行一个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:{{ 1}},然后给它一个名称属性:$('.g-recaptcha iframe')
。
然后我们可以使用Codeception切换到它并单击captcha复选框:
.attr('name', '$recaptcha_frame_name')
然后,当我们完成后,切换回主框架,以便我们提交表单:
$I->switchToIFrame($recaptcha_frame_name);
$I->click(['id' => 'recaptcha-anchor']);
注意,我在测试环境中使用了此处指定的reCaptcha测试密钥,因此它实际上永远不会要求解决验证码。
https://developers.google.com/recaptcha/docs/faq
使用以下测试键,您将始终获得No CAPTCHA并且所有验证请求都将通过。
站点密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 密钥:6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe reCAPTCHA小部件将显示一条警告消息,声称它仅用于测试目的。请不要将这些密钥用于生产流量。
答案 1 :(得分:0)
首先,在您的情况下,问题可能是您没有打电话给验收测试员。你应该用这个开始你的脚本:
<?php
$I = /*am a */ new AcceptanceTester($scenario);
现在使用WebDriver进入Codeception中的IFrame:
您只需使用 EITHER ID 或名称将字符串命名为字符串。这是一个例子:
有一个包含IFrame的页面:
<iframe name = "IFrameByName" id = "IFrameByID" width = "500" height = "300" src = "https://messagetothefish.com"></iframe>
此IFrame包含字符串,“没有人知道是谁发现了水”,但父框架没有。我用PhantomJS和Selenium测试了这个Cept。
<?php
$I = /*am a */ new AcceptanceTester($scenario);
$I->wantTo('See how Iframes work');
$I->amOnUrl("https://wordpress-bdd.com/codeception-iframe/");
$I->dontSee("No one knows who discovered water");
//Switch by name
$I->switchToIFrame("IFrameByName");
$I->see("No one knows who discovered water");
//switch back to parent
$I->switchToIFrame();
$I->dontSee("No one knows who discovered water");
//Switch by ID
$I->switchToIFrame("IFrameByID");
$I->see("No one knows who discovered water");
$I->dontSee('Lorum Ipsum');
//switch back to parent
$I->switchToIFrame();
$I->dontSee("No one knows who discovered water");