2017-12-19 10 views
1

ID를 사용하여 코드 작성을 사용하여 IFrame으로 전환하려면 어떻게해야합니까?ID를 사용하여 코드를 사용하여 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 예 : 그것은 어쩌면 Codeception <

<?php 
# switch to iframe 
$I->switchToIFrame("another_frame"); 
# switch to parent page 
$I->switchToIFrame(); 

인가 -> 페이스 북 Webdriver>Codeception SwitchToIFrame

IFrame을 예 - 사실은 내가 IFrame을의 이름이 아닌 ID를 사용할 수 있습니다 연결 문제?

편집 : 퀵 스텝 가이드에 따라 수정 코드를 다시 설치했습니다. 결과 - 문제는 여전히 동일합니다 : 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 
  • OS : 윈도우 10
  • PHP : 7.1.7
  • phpunit을 6.4. 4
  • 셀렌 서버 : 3.8.1
  • Codeception : 2.3.7
  • 크롬 : 모든 63.0.3239.108
+0

시도해 보셨습니까? 실제로 그것은 작동해야합니다. "이름 또는 ID"라고하는이 방법으로갑니다. -> https://github.com/facebook/php-webdriver/blob/62223d89bcdd4f755a62b2fbc193122e880c41fc/lib/Remote/RemoteTargetLocator.php#L58-L72 – Naktibalda

+0

네, 맞습니다만 switchToIFrame 메서드는 AcceptanceTesterActions.php에 연결되어 있고이 파일에는 2524 줄에 다음과 같이 쓰여 있습니다 : public function switchToIFrame ($ name = null) { return $ this-> getScenario() -> runStep (새로운 \ Codeception \ Step \ Action ('switchToIFrame', func_get_args())); } – eknej

+0

그래서요? 당신은 바로 그 표면을보고 있습니다. – Naktibalda

답변

1

나는 거기에 구글 reCAPTCHA를있는 페이지를 테스트 ... reCAPTCHA를이 문제가 자신의 iframe에, 그리고 한 그 iframe이는 제 3 자 코드에 의해 생성되기 때문에, 우리 그것의 name 애트리뷰트를 제어하지 못한다.

나는 Codeception Webdriver가로 전환 할 수 있도록, 다른 것들에 근거은 iframe을 찾을 수있는 자바 스크립트 코드 조각을 실행 한 일을하고 그것에게 ID를 부여 결국 무엇 :

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')을 지정하십시오. $I->switchToIFrame(); // switch back to main window

: 그래서 우리는 우리의 양식을 제출할 수 있습니다 우리가 완료 그런 $I->switchToIFrame($recaptcha_frame_name); $I->click(['id' => 'recaptcha-anchor']);

, 메인 프레임에서 다시 전환 :

그런 다음 우리는 그것을 전환하고 보안 문자 체크 박스를 클릭 Codeception을 사용할 수 있습니다

NB, 여기에 지정된대로 reCaptcha 테스트 키를 테스트 환경에서 사용하고 있으므로 실제로 captcha를 해결하도록 요청하지 않습니다.

https://developers.google.com/recaptcha/docs/faq 다음 테스트 키

, 당신은 항상 없음 CAPTCHA를 얻을 것이며, 모든 검증 요청을 전달합니다.

사이트 키 : 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 비밀 키를 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe 이 reCAPTCHA를 위젯은 테스트 목적으로 만하다고 항에 경고 메시지가 표시됩니다. 프로덕션 트래픽에이 키를 사용하지 마십시오.

+0

정말 대단합니다. 고마워요. – eknej

0

첫째, 귀하의 경우 문제는 수용 테스터를 호출하지 않는 것을 수 있습니다. 당신이 당신의 스크립트를 시작합니다 : 이제

<?php 
$I = /*am a */ new AcceptanceTester($scenario); 

는 WebDriver 사용 Codeception에 IFrame을에 들어가 : 당신은 그냥 이든 ID를 사용하여 문자열의 IFrame을 이름을 가지고

이름은입니다. 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"); 

Codeception Screenshot

+0

ID 만 사용하여 Iframe으로 전환하고 싶습니다. $ I-> click ('ID')을 사용할 때; codeception이 Iframe을 찾으면 문제가없고 클릭이 발생합니다. 그러나 다음 단계에서는 프레임으로 변경하지 않았기 때문에 코드에서 요소를 찾을 수 없습니다.이 요소의 요소를 클릭하고 싶습니다. 나는 필요한 정보로 나의 포스트를 개정했다. – eknej