2016-07-28 30 views
0

ich mag einen Screenshot erreichen nehmen, indem Sie Behat, Mink und SeleniumGridBehat3 MinkExtension konnte nicht aktiviert werden

Aber ich diesen Fehler:

Da gehe ich zu „mySite.org/private "# FeatureContext :: visit() Die Mink-Instanz wurde nicht für die Mink-Kontextklasse festgelegt. Hast du die Mink Extension aktiviert? (RuntimeException) │ ╳ Die Mink-Instanz wurde nicht für die Mink-Kontextklasse festgelegt. Hast du die Mink Extension aktiviert? (Runtime) │ └─ @AfterStep # Feat

Mein behat.yml:

default: 
extensions: 
    Behat\Symfony2Extension: ~ 
    Behat\MinkExtension: 
     base_url: http://integration.fvs.dev.intern.etecture.de/private-clients 
     browser_name: 'firefox' 
     selenium2: 
      wd_host: http://hub.selenium.intern.etecture.de:4444/wd/hub 
      capabilities: { "browser": "firefox", "version": "14"} 
     goutte: ~ 
     sessions: 
      goutte: 
       goutte: ~ 
      selenium2: 
       selenium2: ~ 
      symfony2: 
       symfony2: ~ 
suites: 
    backend: 
     type: symfony_bundle 
     mink_session: selenium2 
     contexts: 
      - app\features\bootstrap\FeatureContext: 
       screen_shot_path: app/screenshot 

mein FeatureContext.php

class FeatureContext extends MinkContext 
{ 
    private $screenShotPath; 

    public function __construct() 
    { 
     $this->screenShotPath = "/app/screenshot"; 
    } 

    /** 
    * Take screen-shot when step fails. Works only with Selenium2Driver. 
    * 
    * @AfterStep 
    * @param AfterStepScope $scope 
    */ 
    public function takeScreenshotAfterFailedStep(AfterStepScope $scope) 
    { 
     if (99 === $scope->getTestResult()->getResultCode()) { 
      $driver = $this->getSession()->getDriver(); 

      if (! $driver instanceof Selenium2Driver) { 
       return; 
      } 

      if (! is_dir($this->screenShotPath)) { 
       mkdir($this->screenShotPath, 0777, true); 
      } 

      $filename = sprintf(
       '%s_%s_%s.%s', 
       $this->getMinkParameter('browser_name'), 
       date('Ymd') . '-' . date('His'), 
       uniqid('', true), 
       'png' 
      ); 

      $this->saveScreenshot($filename, $this->screenShotPath); 
     } 
    } 

    /** 
    * @Then /^I should see the css selector "([^"]*)"$/ 
    * @Then /^I should see the CSS selector "([^"]*)"$/ 
    */ 
    public function iShouldSeeTheCssSelector($css_selector) { 
     $element = $this->getSession()->getPage()->find("css", $css_selector); 
     if (empty($element)) { 
      throw new \Exception(sprintf("The page '%s' does not contain the css selector '%s'", $this->getSession()->getCurrentUrl(), $css_selector)); 
     } 
    } 

    /** 
    * @Then /^I should not see the css selector "([^"]*)"$/ 
    * @Then /^I should not see the CSS selector "([^"]*)"$/ 
    */ 
    public function iShouldNotSeeAElementWithCssSelector($css_selector) { 
     $element = $this->getSession()->getPage()->find("css", $css_selector); 

     if (empty($element)) { 
      throw new \Exception(sprintf("The page '%s' contains the css selector '%s'", $this->getSession()->getCurrentUrl(), $css_selector)); 
     } 
    } 
} 

Hat jemand Ideen? Thx

Antwort

1

Wahrscheinlich in Ihren Beispielen suchen das Problem ist in Ihrer behat.yml Konfigurationsdatei. default ist ein Name Ihres Profils und extensions Schlüssel ist ein Kind dieses Profils. So sollte jede Zeile unter default Profil zusätzlich 4 Leerzeichen haben.

default: 
    extensions: 
     Behat\Symfony2Extension: ~ 
     Behat\MinkExtension: 
     base_url: http://integration.fvs.dev.intern.etecture.de/private-clients 
     browser_name: 'firefox' 
     selenium2: 
      wd_host: http://hub.selenium.intern.etecture.de:4444/wd/hub 
      capabilities: { "browser": "firefox", "version": "14"} 
     goutte: ~ 
     sessions: 
      goutte: 
       goutte: ~ 
      selenium2: 
       selenium2: ~ 
      symfony2: 
       symfony2: ~ 
    suites: 
     backend: 
      type: symfony_bundle 
      mink_session: selenium2 
      contexts: 
       - app\features\bootstrap\FeatureContext: 
        screen_shot_path: app/screenshot 
+0

Danke :) Ich löste dieses Problem. Es gab mehrere Probleme. Mein Projekt-Setup war nicht korrekt. Ich habe eine Frage. Wenn ich sage: browser_name: "firefox" ==> Selenium2-Server wird Firefox Browser verwenden. Aber wenn ich Funktionen auf "Browser": "Chrome" und einige Version, Selenium2-Server verwendet immer noch Firefox. Was sind die Fähigkeiten? –

+0

Gute Frage, ich bin kein großer Experte im Bereich der Fähigkeiten. Aber wie ich weiß, sollten diese Argumente ('browser',' version') an den Selenium-Treiber übergeben werden. Aber auch 'browser_name' hat größere Power als' browser'. Mit anderen Worten, wenn "browser_name" nicht leer ist als "browser" wird ignoriert. Hier ist [Selenium2Factory] (https://github.com/Behat/MinkExtension/blob/master/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium2Factory.php#L41), die den Parameter 'browser_name' als 'browser' erhalten –

+0

hhmm ..... Ich habe gelesen, dass Selenium2-Server standardmäßig den Firefox-Browser benutzt, wenn "browser_name: 'chrome'" fehlt. , wenn ich sage: "BROWSER_NAME: 'firefox'" und wihtin Fähigkeiten: { "Browser": "chrome"} (oder Invertzucker), Selenium2-Server nimmt noch firefox ^^ entweder Fähigkeiten sind nutzlos oder sein etwas falsch .... –