2012-08-23 3 views
5

jQuery에 의존하는 @BeforeStep 훅의 페이지에서 일부 자바 스크립트를 실행하고 싶습니다. 그러나 jQuery는 그 시점에 정의되어 있지 않습니다. 실제로는 페이지가 비어 있습니다.밍크 : @BeforeStep에서 페이지로드 대기

는 여기에 내가 실현하려 노력하고 무엇 : 내가 생각

/** 
* @BeforeStep @javascript 
*/ 
public function registerAjaxEventHandlers() 
{ 
    $javascript = <<<JS 
     window.jQuery(document).ready(function() { 
      if (window.__ajaxStatus !== undefined) { 
       return; 
      } 
      window.__ajaxStatus = 'none'; 

      $('body').ajaxStop(function() { 
       window.__ajaxStatus = 'idle'; 
      }); 

      $('body').ajaxStart(function() { 
       window.__ajaxStatus = 'in-flight'; 
      }); 
     }); 
JS; 
     //$this->getSession()->wait(5000, 'window.jQuery !== undefined'); 
     $this->getSession()->executeScript($javascript); 
    } 

어쩌면 내가 먼저 (주석 선) jQuery를로드 할 페이지를 기다릴 수 있지만 그것은 사실이 아니다. 해당 실행 후크가 처리 될 때까지 실행이 중단 된 것 같습니다.

페이지에서 자바 스크립트를 실행하기위한 behat/mink 생태계의 올바른 위치는 무엇입니까?

+0

나는 소스 코드에 위의 JS 스크립트를 추가 끝났다. – Dziamid

답변

5

어때요?

+0

도움이되지 않습니다. 화면이 흰색이고 계속 진행되는 동안 5 초 동안 대기합니다. – Dziamid

+1

나는 비슷한 것을했는데, 이것은 전제 조건 데이터를 로딩 할 때와 같이 단계가 브라우저와 상호 작용하지 않을 때 훨씬 더 오래 실행되는 시나리오를 야기한다. '$ this-> getSession-> getCurrentUrl() === 'about : blank''와 같은 검사를하면 도움이되지만 좀 더 우아한 방법이있을 것입니다. –

0

자바 스크립트는 단계가 실행되기 전에, 즉 페이지가로드되기 전에 실행됩니다. 그러나 페이지를로드하면 모든 종류의 ondomload/pageload JavaScript가 이미 실행됩니다. 초기 페이지 후 실행 행복 경우

,이 같은 @AfterStep 사용할 수 있습니다

/** 
* @AfterStep 
*/ 
public function set_selenium_css_selector (Behat\Behat\Event\StepEvent $event) { 
    $this->getSession()->wait(10, 'jQuery ("body").addClass ("selenium")'); 
}