2012-08-23 21 views
5

मैं @BeforeStep हुक में पृष्ठ पर कुछ जावास्क्रिप्ट निष्पादित करना चाहता हूं जो jQuery पर निर्भर करता है। हालांकि उस समय 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 लोड करने के लिए पेज के लिए इंतजार कर सकता है, लेकिन यह सच नहीं है। ऐसा लगता है कि निष्पादन तब तक रुक जाता है जब तक कि हुक संसाधित न हो जाए।

पेज पर जावास्क्रिप्ट निष्पादित करने के लिए व्यवहार/मिंक पारिस्थितिकी तंत्र में सही जगह क्या है?

+0

मैं स्रोत कोड के लिए ऊपर जे एस स्क्रिप्ट डाल समाप्त हो गया। – Dziamid

उत्तर

5

इस बारे में कैसे?

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

या तो मदद नहीं करता है। 5 सेकंड के लिए इंतजार करता है जबकि स्क्रीन सफेद होती है और जारी है। – Dziamid

+1

मैंने कुछ समान किया है, लेकिन यह एक परिदृश्य को तब तक चलाने का कारण बनता है जब कोई चरण ब्राउज़र के साथ इंटरैक्ट नहीं करता है, जैसे कि पूर्व शर्त डेटा लोड करते समय। चेक की तरह '$ this-> getSession-> getCurrentUrl() === 'के बारे में: blank'' मदद करता है, लेकिन शायद एक और शानदार तरीका है। –

0

आपका जावास्क्रिप्ट चरण से पहले निष्पादित है, यानी पृष्ठ लोड होने से पहले। लेकिन अगर आप एक पेज लोड करते हैं, तो सभी प्रकार के ऑनडोलोड/पेजेलोड जावास्क्रिप्ट पहले ही फायरिंग होंगे।

आप प्रारंभिक पृष्ठ के बाद इसे चलाने के लिए खुश हैं, तो आप इस तरह @AfterStep उपयोग कर सकते हैं:

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