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
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? –
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 –
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 .... –