2013-05-08 2 views
2

버튼을 클릭 할 때 생성되는 iFrame에 대한 쓰기 테스트. iFrame 이름과 ID는 유사하지만 동적으로 생성됩니다. 전에 "switchToiFrame"을 성공적으로 사용했습니다.Behat/Mink로 동적 이름이 지정된 iframe으로 전환하는 방법

<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이있다 ..

답변

8

먼저 find methods 중 하나가 포함 된 iframe을 찾으십시오. 페이지 (또는 첫 번째 iframe)의 유일한 iframe 인 경우 find() method을 사용하십시오. 그렇지 않은 경우 findAll()을 사용해야하며 순서에 의존해야합니다 (검색 할 수있는 별개의 특성이 없으므로).

iframe을 찾으면 getAttribute을 사용하여 이름을 얻은 다음 switchToIframe을 사용하여 iframe으로 전환 할 수 있습니다.

+0

그냥 대해 getAttribute 및 swithToIframe에 대한 링크가 작동하지 않는 언급 : | 여기 링크를 사용할 수 있습니다 : http://apigen.juzna.cz/doc/Behat/Mink/class-Behat.Mink.Driver.DriverInterface.html#_switchToIFrame –

0

간단히 iFrame을 조작해야하는 경우 this question을 참조하십시오. 당신이 그것을 조작 할 수 있도록 대답은, 예를 들어, 현재 자바 스크립트는 첫 번째 iframe이를 얻을 :

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

또한 임의의 iFrame을 위해 jQuery를 예제를 제공

: 사람들은 정확히 아니지만

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

무엇을 요구했는지, 이 iFrame을 생성하고 조작하려는 숫자를 알고 필요에 따라 조작하면 n 번째 iFrame을 찾으려면 변경해야합니다.

1

감사합니다. Jakub Zalas, iframe에 임베드 된 Stripe 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);