2013-08-07 4 views
5

मेरी परीक्षणों में मैं इस चरण का उपयोग एक जावास्क्रिप्ट पुष्टि पॉपअप पुष्टि करने के लिए: selenium2 और क्रोम/फ़ायरफ़ॉक्स के साथphantomjs साथ की पुष्टि पॉपअप को संभालने के लिए कैसे + Behat + मिंक

/** 
* @when /^(?:|I)confirm the popup$/ 
*/ 
public function confirmPopup() 
{ 
    $this->getSession()->getDriver()->getWebDriverSession()->accept_alert(); 
} 

यह कदम काम ठीक है, लेकिन ऐसा नहीं करता phantomjs के साथ काम करें।

मैं phantomjs के साथ एक पुष्टिकरण पॉपअप कैसे संभाल सकता हूं?

जानकारियां के लिए

:

  • सिम्फोनी: 2.0.23
  • Behat: 2.4.6
  • मिंक: 1.5.0
  • Symfony2Extension: 1.0.2
  • MinkExtension: 1.1.4
  • मिंकब्रोसरकिट ड्रायवर: 1.1.0
  • मिंकसेलेनियम 2 ड्रायवर: 1.1.0
  • phamtomjs 1.9.1

behat.yml

default: 
    extensions: 
     Behat\Symfony2Extension\Extension: 
      mink_driver: true 
     Behat\MinkExtension\Extension: 
      base_url: "http://localhost:8000/app_test.php" 
      default_session: selenium2 
      selenium2: 
       wd_host: "http://localhost:9876/wd/hub" 

धन्यवाद!

पुनश्च: यहाँ सार: https://gist.github.com/blazarecki/2888851

+0

आप देशी जावास्क्रिप्ट "चेतावनी" या एक अप पकाया एक का उपयोग कर रहे हैं? –

+0

मैं मूल का उपयोग करता हूं। –

+0

क्या आप इसे बेंजामिन से समझने में कामयाब रहे? मैं एक ही मुद्दे पर आया हूं ... – Matt

उत्तर

0

मैं निम्नलिखित के साथ मेरी "Selenium2Driver.php" अद्यतन:

public function acceptAlert() 
{ 
$this->wdSession->accept_alert(); 
} 

यह accept_alert() ड्राइवर के लिए उपलब्ध बनाता है।

तो लिपि में, आप अलर्ट स्वीकार करने के लिए कुछ लाइन कर सकते हैं।

$ यह-> getSession() -> getDriver() -> acceptAlert();

ध्यान दें कि मैं RawMinkContext देशी MinkContext

0

phantomjs उपयोग कर रहा हूँ नहीं एक बिना सिर ब्राउज़र है, इसलिए सभी संवाद नहीं दिखा रहे हैं और साथ सहभागिता नहीं की जा सकती है। एक समाधान widnow.confirm और window.alert को अपने स्वयं के कार्यों के साथ फिर से लिखना है जो प्री-डिफ़ाइंड मान लौटाते हैं।

चूंकि एक परिदृश्य एक ही ड्राइवर के भीतर चलता है, इसलिए पूर्व परिभाषित रिटर्न मानों के साथ मूल विधियों को ओवरराइट करना पूरी तरह से सुरक्षित है (आपको ऐसी स्थिति नहीं होगी जहां आपको वास्तव में एक ही परिदृश्य में एक विंडो देखने की आवश्यकता हो)। इसके अलावा, लौटा मूल्य फ़्लिप करने के लिए एक ही परिदृश्य में कई बार इन चरणों की परिभाषाओं को कॉल करना सुरक्षित है।

/** 
* @When I accept confirmation dialogs 
*/ 
public function acceptConfirmation() { 
    $this->getSession()->getDriver()->executeScript('window.confirm = function(){return true;}'); 
} 

/** 
* @When I do not accept confirmation dialogs 
*/ 
public function acceptNotConfirmation() { 
    $this->getSession()->getDriver()->executeScript('window.confirm = function(){return false;}'); 
} 

परिदृश्य उदाहरण:

Scenario: Removal of something with confirmation dialog 
Given I accept confirmation dialogs 
And I click a ".mylink" element 
And I wait for AJAX to finish 
And I should not see a ".some-removed-element" element 
संबंधित मुद्दे