2012-08-23 12 views
5

'de yüklenecek sayfa için jQuery'ye bağlı @BeforeStep kancasında bir javascript çalıştırmak istiyorum. Ancak jQuery o zaman tanımlanmamıştır, aslında sayfa boştur.Mink: @BeforeStep

İşte başarmak için çalışıyorum budur: Düşündüm

/** 
* @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); 
    } 

belki ilk (yorumladı hat) jQuery sayfanın yüklenmesini beklemek, ama bu doğru değildir. Kanca işlenene kadar yürütme durduruldu gibi görünüyor.

Sayfada javascript'i yürütmek için behat/mink ekosisteminde doğru yer neresidir?

+0

Ben kaynak koduna yukarıdaki JS komut ekleyerek sona erdi. – Dziamid

cevap

5

Bu nasıl?

$this->getSession()->wait(5000, 'typeof window.jQuery == "function"'); 
+0

Ayrıca yardımcı olmuyor. Ekran beyazken 5 saniye bekler ve devam eder. – Dziamid

+1

Benzer bir şey yaptım, ancak bu, bir adım önkoşul veriyi yüklerken olduğu gibi, bir adım tarayıcıyla etkileşime girmediğinde çok daha uzun süre çalışacak. '$ This-> getSession-> getCurrentUrl() ===' gibi bir kontrol yapmak: blank'' yardımcı olur, ama belki de daha zarif bir yol var. –

0

Javascript'iniz, adım yüklenmeden önce, yani sayfa yüklenmeden önce yürütülür. Ancak, bir sayfa yüklerseniz, her türlü ondomload/pageload JavaScript de zaten tetiklenir. Başlangıçtaki sayfadan sonra çalıştırmak için memnunsanız

, böyle @AfterStep kullanabilirsiniz:

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