Refactored the extension for Behat 3.0

This commit is contained in:
Christophe Coevoet
2014-01-04 14:59:18 +01:00
parent 24012515e5
commit d79dc1ae71
19 changed files with 465 additions and 874 deletions

View File

@@ -6,7 +6,7 @@ Status](https://secure.travis-ci.org/Behat/MinkExtension.png?branch=master)](htt
Provides integration layer: Provides integration layer:
* Additional services for Behat (`Mink`, `Sessions`, `Drivers`). * Additional services for Behat (`Mink`, `Sessions`, `Drivers`).
* `Behat\MinkExtension\Context\MinkAwareInterface` which provides `Mink` * `Behat\MinkExtension\Context\MinkAwareContext` which provides `Mink`
instance for your contexts or subcontexts. instance for your contexts or subcontexts.
* Base `Behat\MinkExtension\Context\MinkContext` context which provides base * Base `Behat\MinkExtension\Context\MinkContext` context which provides base
step definitions and hooks for your contexts or subcontexts. Or it could be step definitions and hooks for your contexts or subcontexts. Or it could be

View File

@@ -13,7 +13,7 @@ Basically, MinkExtension is an integration layer between Behat 2.4+ and Mink 1.4
and it provides: and it provides:
* Additional services for Behat (``Mink``, ``Sessions``, ``Drivers``). * Additional services for Behat (``Mink``, ``Sessions``, ``Drivers``).
* ``Behat\MinkExtension\Context\MinkAwareInterface`` which provides ``Mink`` * ``Behat\MinkExtension\Context\MinkAwareContext`` which provides ``Mink``
instance for your contexts or subcontexts. instance for your contexts or subcontexts.
* Base ``Behat\MinkExtension\Context\MinkContext`` context which provides base * Base ``Behat\MinkExtension\Context\MinkContext`` context which provides base
step definitions and hooks for your contexts or subcontexts. Or it could be step definitions and hooks for your contexts or subcontexts. Or it could be
@@ -193,7 +193,7 @@ After installing extension, there would be 6 usage options available for you:
} }
} }
6. Implementing ``Behat\MinkExtension\Context\MinkAwareInterface`` with your context or its 6. Implementing ``Behat\MinkExtension\Context\MinkAwareContext`` with your context or its
subcontexts. subcontexts.
There's common things between last 5 methods. In each of those, target context will implement There's common things between last 5 methods. In each of those, target context will implement

View File

@@ -1,46 +0,0 @@
<?php
/*
* This file is part of the Behat MinkExtension.
* (c) Konstantin Kudryashov <ever.zet@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Behat\MinkExtension\Compiler;
use Symfony\Component\DependencyInjection\Reference,
Symfony\Component\DependencyInjection\ContainerBuilder,
Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
/**
* Selectors handler compilation pass. Registers all available Mink selector engines.
*
* @author Konstantin Kudryashov <ever.zet@gmail.com>
*/
class SelectorsPass implements CompilerPassInterface
{
/**
* Registers additional Mink selector handlers.
*
* @param ContainerBuilder $container
*/
public function process(ContainerBuilder $container)
{
if (!$container->hasDefinition('behat.mink.selector.handler')) {
return;
}
$handlerDefinition = $container->getDefinition('behat.mink.selector.handler');
foreach ($container->findTaggedServiceIds('behat.mink.selector') as $id => $attributes) {
foreach ($attributes as $attribute) {
if (isset($attribute['alias']) && $alias = $attribute['alias']) {
$handlerDefinition->addMethodCall(
'registerSelector', array($alias, new Reference($id))
);
}
}
}
}
}

View File

@@ -1,51 +0,0 @@
<?php
/*
* This file is part of the Behat MinkExtension.
* (c) Konstantin Kudryashov <ever.zet@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Behat\MinkExtension\Compiler;
use Symfony\Component\DependencyInjection\Reference,
Symfony\Component\DependencyInjection\ContainerBuilder,
Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
/**
* Behat\Mink container compilation pass.
* Registers all available in controller Mink sessions.
*
* @author Konstantin Kudryashov <ever.zet@gmail.com>
*/
class SessionsPass implements CompilerPassInterface
{
/**
* Registers Mink sessions.
*
* @param ContainerBuilder $container
*/
public function process(ContainerBuilder $container)
{
if (!$container->hasDefinition('behat.mink')) {
return;
}
$minkDefinition = $container->getDefinition('behat.mink');
foreach ($container->findTaggedServiceIds('behat.mink.session') as $id => $attributes) {
foreach ($attributes as $attribute) {
if (isset($attribute['alias']) && $name = $attribute['alias']) {
$minkDefinition->addMethodCall(
'registerSession', array($name, new Reference($id))
);
}
}
}
$minkDefinition->addMethodCall(
'setDefaultSessionName', array($container->getParameter('behat.mink.default_session'))
);
}
}

View File

@@ -1,30 +0,0 @@
<?php
/*
* This file is part of the Behat MinkExtension.
* (c) Konstantin Kudryashov <ever.zet@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Behat\MinkExtension\Context\ClassGuesser;
use Behat\Behat\Context\ClassGuesser\ClassGuesserInterface;
/**
* Mink context class guesser.
* Provides Mink context class if no other class found.
*/
class MinkContextClassGuesser implements ClassGuesserInterface
{
/**
* Tries to guess context classname.
*
* @return string
*/
public function guess()
{
return 'Behat\\MinkExtension\\Context\\MinkContext';
}
}

View File

@@ -14,7 +14,7 @@ use Behat\Behat\Context\Context;
use Behat\Behat\Context\Initializer\ContextInitializer; use Behat\Behat\Context\Initializer\ContextInitializer;
use Behat\Mink\Mink; use Behat\Mink\Mink;
use Behat\MinkExtension\Context\MinkAwareInterface; use Behat\MinkExtension\Context\MinkAwareContext;
/** /**
* Mink aware contexts initializer. * Mink aware contexts initializer.
@@ -48,8 +48,8 @@ class MinkAwareInitializer implements ContextInitializer
*/ */
public function supportsContext(Context $context) public function supportsContext(Context $context)
{ {
// if context/subcontext implements MinkAwareInterface // if context/subcontext implements MinkAwareContext
if ($context instanceof MinkAwareInterface) { if ($context instanceof MinkAwareContext) {
return true; return true;
} }

View File

@@ -10,6 +10,7 @@
namespace Behat\MinkExtension\Context; namespace Behat\MinkExtension\Context;
use Behat\Behat\Context\Context;
use Behat\Mink\Mink; use Behat\Mink\Mink;
/** /**
@@ -17,7 +18,7 @@ use Behat\Mink\Mink;
* *
* @author Konstantin Kudryashov <ever.zet@gmail.com> * @author Konstantin Kudryashov <ever.zet@gmail.com>
*/ */
interface MinkAwareInterface interface MinkAwareContext extends Context
{ {
/** /**
* Sets Mink instance. * Sets Mink instance.

View File

@@ -10,8 +10,6 @@
namespace Behat\MinkExtension\Context; namespace Behat\MinkExtension\Context;
use Behat\Behat\Context\Context;
use Behat\Mink\Mink; use Behat\Mink\Mink;
use Behat\Mink\WebAssert; use Behat\Mink\WebAssert;
use Behat\Mink\Session; use Behat\Mink\Session;
@@ -22,7 +20,7 @@ use Behat\Mink\Session;
* *
* @author Konstantin Kudryashov <ever.zet@gmail.com> * @author Konstantin Kudryashov <ever.zet@gmail.com>
*/ */
class RawMinkContext implements MinkAwareInterface, Context class RawMinkContext implements MinkAwareContext
{ {
private $mink; private $mink;
private $minkParameters; private $minkParameters;

View File

@@ -10,14 +10,14 @@
namespace Behat\MinkExtension; namespace Behat\MinkExtension;
use Behat\MinkExtension\Compiler\SelectorsPass; use Behat\Behat\Context\ServiceContainer\ContextExtension;
use Behat\MinkExtension\Compiler\SessionsPass; use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension;
use Symfony\Component\Config\FileLocator, use Behat\Testwork\ServiceContainer\Exception\ProcessingException;
Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition,
Symfony\Component\DependencyInjection\ContainerBuilder,
Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Behat\Testwork\ServiceContainer\Extension as BaseExtension; use Behat\Testwork\ServiceContainer\Extension as BaseExtension;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
/** /**
* Mink extension for Behat class. * Mink extension for Behat class.
@@ -26,16 +26,19 @@ use Behat\Testwork\ServiceContainer\Extension as BaseExtension;
*/ */
class Extension implements BaseExtension class Extension implements BaseExtension
{ {
const MINK_ID = 'mink';
const SELECTORS_HANDLER_ID = 'mink.selectors_handler';
const SESSION_TAG = 'mink.session';
const SELECTOR_TAG = 'mink.selector';
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function load(ContainerBuilder $container, array $config) public function load(ContainerBuilder $container, array $config)
{ {
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/services'));
$loader->load('core.xml');
if (isset($config['mink_loader'])) { if (isset($config['mink_loader'])) {
$basePath = $container->getParameter('behat.paths.base'); $basePath = $container->getParameter('paths.base');
if (file_exists($basePath.DIRECTORY_SEPARATOR.$config['mink_loader'])) { if (file_exists($basePath.DIRECTORY_SEPARATOR.$config['mink_loader'])) {
require($basePath.DIRECTORY_SEPARATOR.$config['mink_loader']); require($basePath.DIRECTORY_SEPARATOR.$config['mink_loader']);
@@ -44,116 +47,45 @@ class Extension implements BaseExtension
} }
} }
if (isset($config['goutte'])) { $this->loadMink($container);
if (!class_exists('Behat\\Mink\\Driver\\GoutteDriver')) { $this->loadContextInitializer($container);
throw new \RuntimeException( $this->loadSelectorsHandler($container);
'Install MinkGoutteDriver in order to activate goutte session.' $this->loadSessionsListener($container);
);
}
$loader->load('sessions/goutte.xml');
}
if (isset($config['sahi'])) {
if (!class_exists('Behat\\Mink\\Driver\\SahiDriver')) {
throw new \RuntimeException(
'Install MinkSahiDriver in order to activate sahi session.'
);
}
$loader->load('sessions/sahi.xml');
}
if (isset($config['zombie'])) {
if (!class_exists('Behat\\Mink\\Driver\\ZombieDriver')) {
throw new \RuntimeException(
'Install MinkZombieDriver in order to activate zombie session.'
);
}
$loader->load('sessions/zombie.xml');
}
if (isset($config['selenium'])) {
if (!class_exists('Behat\\Mink\\Driver\\SeleniumDriver')) {
throw new \RuntimeException(
'Install MinkSeleniumDriver in order to activate selenium session.'
);
}
$loader->load('sessions/selenium.xml');
}
if (isset($config['selenium2'])) {
if (!class_exists('Behat\\Mink\\Driver\\Selenium2Driver')) {
throw new \RuntimeException(
'Install MinkSelenium2Driver in order to activate selenium2 session.'
);
}
$loader->load('sessions/selenium2.xml');
}
if (isset($config['saucelabs'])) {
if (!class_exists('Behat\\Mink\\Driver\\Selenium2Driver')) {
throw new \RuntimeException(
'Install MinkSelenium2Driver in order to activate saucelabs session.'
);
}
$loader->load('sessions/saucelabs.xml');
}
$minkParameters = array();
foreach ($config as $ns => $tlValue) {
if (!is_array($tlValue)) {
$minkParameters[$ns] = $tlValue;
} else {
foreach ($tlValue as $name => $value) {
if ('guzzle_parameters' === $name) {
$value['redirect.disable'] = true;
}
$container->setParameter("behat.mink.$ns.$name", $value);
}
}
}
$container->setParameter('behat.mink.parameters', $minkParameters);
if (isset($config['saucelabs'])) {
$capabilities = $container->getParameter('behat.mink.saucelabs.capabilities');
$capabilities['tags'] = array(php_uname('n'), 'PHP '.phpversion());
if (getenv('TRAVIS_JOB_NUMBER')) {
$capabilities['tunnel-identifier'] = getenv('TRAVIS_JOB_NUMBER');
$capabilities['build'] = getenv('TRAVIS_BUILD_NUMBER');
$capabilities['tags'] = array('Travis-CI', 'PHP '.phpversion());
}
$container->setParameter('behat.mink.saucelabs.capabilities', $capabilities);
$host = 'ondemand.saucelabs.com';
if ($config['saucelabs']['connect']) {
$host = 'localhost:4445';
}
$username = $config['saucelabs']['username'];
$accessKey = $config['saucelabs']['access_key'];
$container->setParameter('behat.mink.saucelabs.wd_host', sprintf(
'%s:%s@%s/wd/hub', $username, $accessKey, $host
));
}
if (isset($config['base_url'])) {
$container->setParameter('behat.mink.base_url', $config['base_url']);
}
$container->setParameter('behat.mink.default_session', $config['default_session']);
$container->setParameter('behat.mink.javascript_session', $config['javascript_session']);
$container->setParameter('behat.mink.browser_name', $config['browser_name']);
$minkReflection = new \ReflectionClass('Behat\Mink\Mink');
$minkLibPath = realpath(dirname($minkReflection->getFilename()) . '/../../../');
$container->setParameter('mink.paths.lib', $minkLibPath);
if ($config['show_auto']) { if ($config['show_auto']) {
$loader->load('failure_show_listener.xml'); $this->loadFailureShowListener($container);
} }
if (isset($config['goutte'])) {
$this->loadGoutteSession($container, $config['goutte']);
unset($config['goutte']);
}
if (isset($config['sahi'])) {
$this->loadSahiSession($container, $config['sahi']);
unset($config['sahi']);
}
if (isset($config['zombie'])) {
$this->loadZombieSession($container, $config['zombie']);
unset($config['zombie']);
}
if (isset($config['selenium'])) {
$this->loadSeleniumSession($container, $config['selenium']);
unset($config['zombie']);
}
if (isset($config['selenium2'])) {
$this->loadSelenium2Session($container, $config['selenium2']);
unset($config['selenium2']);
}
if (isset($config['saucelabs'])) {
$this->loadSaucelabsSession($container, $config['saucelabs']);
unset($config['saucelabs']);
}
$container->setParameter('mink.parameters', $config);
$container->setParameter('mink.base_url', $config['base_url']);
$container->setParameter('mink.default_session', $config['default_session']);
$container->setParameter('mink.javascript_session', $config['javascript_session']);
$container->setParameter('mink.browser_name', $config['browser_name']);
} }
/** /**
@@ -161,244 +93,160 @@ class Extension implements BaseExtension
*/ */
public function configure(ArrayNodeDefinition $builder) public function configure(ArrayNodeDefinition $builder)
{ {
$config = $this->loadEnvironmentConfiguration(); $builder
->addDefaultsIfNotSet()
->children()
->scalarNode('mink_loader')->defaultNull()->end()
->scalarNode('base_url')->defaultNull()->end()
->scalarNode('files_path')->defaultNull()->end()
->booleanNode('show_auto')->defaultFalse()->end()
->scalarNode('show_cmd')->defaultNull()->end()
->scalarNode('show_tmp_dir')->defaultValue(sys_get_temp_dir())->end()
->scalarNode('default_session')->defaultValue('goutte')->end()
->scalarNode('javascript_session')->defaultValue('selenium2')->end()
->scalarNode('browser_name')->defaultValue('firefox')->end()
->arrayNode('goutte')
->children()
->arrayNode('server_parameters')
->useAttributeAsKey('key')
->prototype('variable')->end()
->end()
->arrayNode('guzzle_parameters')
->useAttributeAsKey('key')
->prototype('variable')->end()
->validate()
->always()
->then(function ($v) {
$v['redirect.disable'] = true;
$builder-> return $v;
children()-> })
scalarNode('mink_loader')-> ->end()
defaultValue(isset($config['mink_loader']) ? $config['mink_loader'] : null)-> ->end()
end()-> ->end()
scalarNode('base_url')-> ->end()
defaultValue(isset($config['base_url']) ? $config['base_url'] : null)-> ->arrayNode('sahi')
end()-> ->children()
scalarNode('files_path')-> ->scalarNode('sid')->defaultNull()->end()
defaultValue(isset($config['files_path']) ? $config['files_path'] : null)-> ->scalarNode('host')->defaultValue('localhost')->end()
end()-> ->scalarNode('port')->defaultValue(9999)->end()
booleanNode('show_auto')-> ->scalarNode('browser')->defaultNull()->end()
defaultValue(isset($config['show_auto']) ? 'true' === $config['show_auto'] : false)-> ->scalarNode('limit')->defaultValue(600)->end()
end()-> ->end()
scalarNode('show_cmd')-> ->end()
defaultValue(isset($config['show_cmd']) ? $config['show_cmd'] : null)-> ->arrayNode('zombie')
end()-> ->children()
scalarNode('show_tmp_dir')-> ->scalarNode('host')->defaultValue('127.0.0.1')->end()
defaultValue(isset($config['show_tmp_dir']) ? $config['show_tmp_dir'] : sys_get_temp_dir())-> ->scalarNode('port')->defaultValue(8124)->end()
end()-> ->booleanNode('auto_server')->defaultValue(true)->end()
scalarNode('default_session')-> ->scalarNode('node_bin')->defaultValue('node')->end()
defaultValue(isset($config['default_session']) ? $config['default_session'] : 'goutte')-> ->scalarNode('server_path')->defaultNull()->end()
end()-> ->scalarNode('threshold')->defaultValue(2000000)->end()
scalarNode('javascript_session')-> ->scalarNode('node_modules_path')->defaultValue('')->end()
defaultValue(isset($config['javascript_session']) ? $config['javascript_session'] : 'selenium2')-> ->end()
end()-> ->end()
scalarNode('browser_name')-> ->arrayNode('selenium')
defaultValue(isset($config['browser_name']) ? $config['browser_name'] : 'firefox')-> ->children()
end()-> ->scalarNode('host')->defaultValue('127.0.0.1')->end()
arrayNode('goutte')-> ->scalarNode('port')->defaultValue(4444)->end()
children()-> ->scalarNode('browser')->defaultValue('*%mink.browser_name%')->end()
arrayNode('server_parameters')-> ->end()
useAttributeAsKey('key')-> ->end()
prototype('variable')->end()-> ->arrayNode('selenium2')
end()-> ->children()
arrayNode('guzzle_parameters')-> ->scalarNode('browser')->defaultValue('%mink.browser_name%')->end()
useAttributeAsKey('key')-> ->arrayNode('capabilities')
prototype('variable')->end()-> ->addDefaultsIfNotSet()
end()-> ->normalizeKeys(false)
end()-> ->children()
end()-> ->scalarNode('browserName')->defaultValue('firefox')->end()
arrayNode('sahi')-> ->scalarNode('version')->defaultValue('9')->end()
children()-> ->scalarNode('platform')->defaultValue('ANY')->end()
scalarNode('sid')-> ->scalarNode('browserVersion')->defaultValue('9')->end()
defaultValue(isset($config['sahi']['sid']) ? $config['sahi']['sid'] : null)-> ->scalarNode('browser')->defaultValue('firefox')->end()
end()-> ->scalarNode('ignoreZoomSetting')->defaultValue('false')->end()
scalarNode('host')-> ->scalarNode('name')->defaultValue('Behat Test')->end()
defaultValue('localhost')-> ->scalarNode('deviceOrientation')->defaultValue('portrait')->end()
end()-> ->scalarNode('deviceType')->defaultValue('tablet')->end()
scalarNode('port')-> ->scalarNode('selenium-version')->defaultValue('2.31.0')->end()
defaultValue(isset($config['sahi']['port']) ? $config['sahi']['port'] : 9999)-> ->scalarNode('max-duration')->defaultValue('300')->end()
end()-> ->booleanNode('javascriptEnabled')->end()
scalarNode('browser')-> ->booleanNode('databaseEnabled')->end()
defaultValue(isset($config['sahi']['browser']) ? $config['sahi']['browser'] : null)-> ->booleanNode('locationContextEnabled')->end()
end()-> ->booleanNode('applicationCacheEnabled')->end()
scalarNode('limit')-> ->booleanNode('browserConnectionEnabled')->end()
defaultValue(isset($config['sahi']['limit']) ? $config['sahi']['limit'] : 600)-> ->booleanNode('webStorageEnabled')->end()
end()-> ->booleanNode('rotatable')->end()
end()-> ->booleanNode('acceptSslCerts')->end()
end()-> ->booleanNode('nativeEvents')->end()
arrayNode('zombie')-> ->booleanNode('passed')->end()
children()-> ->booleanNode('record-video')->end()
scalarNode('host')-> ->booleanNode('record-screenshots')->end()
defaultValue(isset($config['zombie']['host']) ? $config['zombie']['host'] : '127.0.0.1')-> ->booleanNode('capture-html')->end()
end()-> ->booleanNode('disable-popup-handler')->end()
scalarNode('port')-> ->arrayNode('proxy')
defaultValue(isset($config['zombie']['port']) ? $config['zombie']['port'] : 8124)-> ->children()
end()-> ->scalarNode('proxyType')->end()
scalarNode('auto_server')-> ->scalarNode('proxyAuthconfigUrl')->end()
defaultValue(isset($config['zombie']['auto_server']) ? $config['zombie']['auto_server'] : true)-> ->scalarNode('ftpProxy')->end()
end()-> ->scalarNode('httpProxy')->end()
scalarNode('node_bin')-> ->scalarNode('sslProxy')->end()
defaultValue(isset($config['zombie']['node_bin']) ? $config['zombie']['node_bin'] : 'node')-> ->end()
end()-> ->validate()
scalarNode('server_path')-> ->ifTrue(function ($v) {
defaultValue(isset($config['zombie']['server_path']) ? $config['zombie']['server_path'] : null)->
end()->
scalarNode('threshold')->
defaultValue(isset($config['zombie']['threshold']) ? $config['zombie']['threshold'] : 2000000)->
end()->
scalarNode('node_modules_path')->
defaultValue(isset($config['zombie']['node_modules_path']) ? $config['zombie']['node_modules_path'] : '')->
end()->
end()->
end()->
arrayNode('selenium')->
children()->
scalarNode('host')->
defaultValue(isset($config['selenium']['host']) ? $config['selenium']['host'] : '127.0.0.1')->
end()->
scalarNode('port')->
defaultValue(isset($config['selenium']['port']) ? $config['selenium']['port'] : 4444)->
end()->
scalarNode('browser')->
defaultValue(isset($config['selenium']['browser']) ? $config['selenium']['browser'] : '*%behat.mink.browser_name%')->
end()->
end()->
end()->
arrayNode('selenium2')->
children()->
scalarNode('browser')->
defaultValue(isset($config['selenium2']['browser']) ? $config['selenium2']['browser'] : '%behat.mink.browser_name%')->
end()->
arrayNode('capabilities')->
normalizeKeys(false)->
children()->
scalarNode('browserName')->
defaultValue(isset($config['selenium2']['capabilities']['browserName']) ? $config['selenium2']['capabilities']['browserName'] : 'firefox')->
end()->
scalarNode('version')->
defaultValue(isset($config['selenium2']['capabilities']['version']) ? $config['selenium2']['capabilities']['version'] : "9")->
end()->
scalarNode('platform')->
defaultValue(isset($config['selenium2']['capabilities']['platform']) ? $config['selenium2']['capabilities']['platform'] : 'ANY')->
end()->
scalarNode('browserVersion')->
defaultValue(isset($config['selenium2']['capabilities']['browserVersion']) ? $config['selenium2']['capabilities']['browserVersion'] : "9")->
end()->
scalarNode('browser')->
defaultValue(isset($config['selenium2']['capabilities']['browser']) ? $config['selenium2']['capabilities']['browser'] : 'firefox')->
end()->
scalarNode('ignoreZoomSetting')->
defaultValue(isset($config['selenium2']['capabilities']['ignoreZoomSetting']) ? $config['selenium2']['capabilities']['ignoreZoomSetting'] : 'false')->
end()->
scalarNode('name')->
defaultValue(isset($config['selenium2']['capabilities']['name']) ? $config['selenium2']['capabilities']['name'] : 'Behat Test')->
end()->
scalarNode('deviceOrientation')->
defaultValue(isset($config['selenium2']['capabilities']['deviceOrientation']) ? $config['selenium2']['capabilities']['deviceOrientation'] : 'portrait')->
end()->
scalarNode('deviceType')->
defaultValue(isset($config['selenium2']['capabilities']['deviceType']) ? $config['selenium2']['capabilities']['deviceType'] : 'tablet')->
end()->
scalarNode('selenium-version')->
defaultValue(isset($config['selenium2']['capabilities']['selenium-version']) ? $config['selenium2']['capabilities']['selenium-version'] : '2.31.0')->
end()->
scalarNode('max-duration')->
defaultValue(isset($config['selenium2']['capabilities']['max-duration']) ? $config['selenium2']['capabilities']['max-duration'] : '300')->
end()->
booleanNode('javascriptEnabled')->end()->
booleanNode('databaseEnabled')->end()->
booleanNode('locationContextEnabled')->end()->
booleanNode('applicationCacheEnabled')->end()->
booleanNode('browserConnectionEnabled')->end()->
booleanNode('webStorageEnabled')->end()->
booleanNode('rotatable')->end()->
booleanNode('acceptSslCerts')->end()->
booleanNode('nativeEvents')->end()->
booleanNode('passed')->end()->
booleanNode('record-video')->end()->
booleanNode('record-screenshots')->end()->
booleanNode('capture-html')->end()->
booleanNode('disable-popup-handler')->end()->
arrayNode('proxy')->
children()->
scalarNode('proxyType')->end()->
scalarNode('proxyAuthconfigUrl')->end()->
scalarNode('ftpProxy')->end()->
scalarNode('httpProxy')->end()->
scalarNode('sslProxy')->end()->
end()->
validate()->
ifTrue(function ($v) {
return empty($v); return empty($v);
})-> })
thenUnset()-> ->thenUnset()
end()-> ->end()
end()-> ->end()
arrayNode('firefox')-> ->arrayNode('firefox')
children()-> ->children()
scalarNode('profile')-> ->scalarNode('profile')
validate()-> ->validate()
ifTrue(function ($v) { ->ifTrue(function ($v) {
return !file_exists($v); return !file_exists($v);
})-> })
thenInvalid('Cannot find profile zip file %s')-> ->thenInvalid('Cannot find profile zip file %s')
end()-> ->end()
end()-> ->end()
scalarNode('binary')->end()-> ->scalarNode('binary')->end()
end()-> ->end()
end()-> ->end()
arrayNode('chrome')-> ->arrayNode('chrome')
children()-> ->children()
arrayNode('switches')-> ->arrayNode('switches')->prototype('scalar')->end()->end()
prototype('scalar')->end()-> ->scalarNode('binary')->end()
end()-> ->arrayNode('extensions')->prototype('scalar')->end()->end()
scalarNode('binary')->end()-> ->end()
arrayNode('extensions')-> ->end()
prototype('scalar')->end()-> ->end()
end()-> ->end()
end()-> ->scalarNode('wd_host')->defaultValue('http://localhost:4444/wd/hub')->end()
end()-> ->end()
end()-> ->end()
end()-> ->arrayNode('saucelabs')
scalarNode('wd_host')-> ->children()
defaultValue(isset($config['selenium2']['wd_host']) ? $config['selenium2']['wd_host'] : 'http://localhost:4444/wd/hub')-> ->scalarNode('username')->defaultValue(getenv('SAUCE_USERNAME'))->end()
end()-> ->scalarNode('access_key')->defaultValue(getenv('SAUCE_ACCESS_KEY'))->end()
end()-> ->booleanNode('connect')->defaultFalse()->end()
end()-> ->scalarNode('browser')->defaultValue('firefox')->end()
arrayNode('saucelabs')-> ->arrayNode('capabilities')
children()-> ->addDefaultsIfNotSet()
scalarNode('username')-> ->normalizeKeys(false)
defaultValue(getenv('SAUCE_USERNAME'))-> ->children()
end()-> ->scalarNode('name')->defaultValue('Behat feature suite')->end()
scalarNode('access_key')-> ->scalarNode('platform')->defaultValue('Linux')->end()
defaultValue(getenv('SAUCE_ACCESS_KEY'))-> ->scalarNode('version')->defaultValue('21')->end()
end()-> ->scalarNode('selenium-version')->defaultValue('2.31.0')->end()
booleanNode('connect')-> ->scalarNode('max-duration')->defaultValue('300')->end()
defaultValue(isset($config['saucelabs']['connect']) ? 'true' === $config['saucelabs']['connect'] : false)-> ->scalarNode('deviceType')->defaultNull()->end()
end()-> ->scalarNode('deviceOrientation')->defaultNull()->end()
scalarNode('browser')-> ->end()
defaultValue(isset($config['saucelabs']['browser']) ? $config['saucelabs']['browser'] : 'firefox')-> ->end()
end()-> ->end()
arrayNode('capabilities')-> ->end()
children()-> ->end()
scalarNode('name')-> ->end();
defaultValue(isset($config['saucelabs']['name']) ? $config['saucelabs']['name'] : 'Behat feature suite')->
end()->
scalarNode('platform')->
defaultValue(isset($config['saucelabs']['platform']) ? $config['saucelabs']['platform'] : 'Linux')->
end()->
scalarNode('version')->
defaultValue(isset($config['saucelabs']['version']) ? $config['saucelabs']['version'] : '21')->
end()->
scalarNode('deviceType')->
defaultValue(isset($config['saucelabs']['deviceType']) ? $config['saucelabs']['deviceType'] : null)->
end()->
scalarNode('deviceOrientation')->
defaultValue(isset($config['saucelabs']['deviceOrientation']) ? $config['saucelabs']['deviceOrientation'] : null)->
end()->
end()->
end()->
end()->
end()->
end()->
end();
} }
/** /**
@@ -414,21 +262,242 @@ class Extension implements BaseExtension
*/ */
public function process(ContainerBuilder $container) public function process(ContainerBuilder $container)
{ {
$sessionsPass = new SessionsPass(); $this->processSessions($container);
$selectorPass = new SelectorsPass(); $this->processSelectors($container);
$sessionsPass->process($container);
$selectorPass->process($container);
} }
protected function loadEnvironmentConfiguration() private function loadMink(ContainerBuilder $container)
{ {
$config = array(); $container->setDefinition(self::MINK_ID, new Definition('Behat\Mink\Mink'));
if ($envConfig = getenv('MINK_EXTENSION_PARAMS')) {
parse_str($envConfig, $config);
} }
return $config; private function loadContextInitializer(ContainerBuilder $container)
{
$definition = new Definition('Behat\MinkExtension\Context\Initializer\MinkAwareInitializer', array(
new Reference(self::MINK_ID),
'%mink.parameters%',
));
$definition->addTag(ContextExtension::INITIALIZER_TAG, array('priority' => 0));
$container->setDefinition('mink.context_initializer', $definition);
} }
private function loadSelectorsHandler(ContainerBuilder $container)
{
$container->setDefinition(self::SELECTORS_HANDLER_ID, new Definition('Behat\Mink\Selector\SelectorsHandler'));
$cssSelectorDefinition = new Definition('Behat\Mink\Selector\CssSelector');
$cssSelectorDefinition->addTag(self::SELECTOR_TAG, array('alias' => 'css'));
$container->setDefinition(self::SELECTOR_TAG . '.css', $cssSelectorDefinition);
$namedSelectorDefinition = new Definition('Behat\Mink\Selector\NamedSelector');
$namedSelectorDefinition->addTag(self::SELECTOR_TAG, array('alias' => 'named'));
$container->setDefinition(self::SELECTOR_TAG . '.named', $namedSelectorDefinition);
}
private function loadSessionsListener(ContainerBuilder $container)
{
$definition = new Definition('Behat\MinkExtension\Listener\SessionsListener', array(
new Reference(self::MINK_ID),
'%mink.parameters%',
));
$definition->addTag(EventDispatcherExtension::SUBSCRIBER_TAG, array('priority' => 0));
$container->setDefinition('mink.listener.sessions', $definition);
}
private function loadFailureShowListener(ContainerBuilder $container)
{
$definition = new Definition('Behat\MinkExtension\Listener\FailureShowListener', array(
new Reference(self::MINK_ID),
'%mink.parameters%',
));
$definition->addTag(EventDispatcherExtension::SUBSCRIBER_TAG, array('priority' => 0));
$container->setDefinition('mink.listener.failure_show', $definition);
}
private function loadGoutteSession(ContainerBuilder $container, array $config)
{
if (!class_exists('Behat\Mink\Driver\GoutteDriver')) {
throw new \RuntimeException(
'Install MinkGoutteDriver in order to activate goutte session.'
);
}
$clientDefinition = new Definition('Behat\Mink\Driver\Goutte\Client', array(
$config['server_parameters'],
));
$clientDefinition->addMethodCall('setClient', array(
new Definition('Guzzle\Http\Client', array(
null,
$config['guzzle_parameters'],
)),
));
$driverDefinition = new Definition('Behat\Mink\Driver\GoutteDriver', array(
$clientDefinition,
));
$this->loadSession($container, $driverDefinition, 'goutte');
}
private function loadSahiSession(ContainerBuilder $container, array $config)
{
if (!class_exists('Behat\Mink\Driver\SahiDriver')) {
throw new \RuntimeException(
'Install MinkSahiDriver in order to activate sahi session.'
);
}
$driverDefinition = new Definition('Behat\Mink\Driver\SahiDriver', array(
'%mink.browser_name%',
new Definition('Behat\SahiClient\Client', array(
new Definition('Behat\SahiClient\Connection', array(
$config['sid'],
$config['host'],
$config['port'],
$config['browser'],
$config['limit'],
)),
)),
));
$this->loadSession($container, $driverDefinition, 'sahi');
}
private function loadZombieSession(ContainerBuilder $container, array $config)
{
if (!class_exists('Behat\Mink\Driver\ZombieDriver')) {
throw new \RuntimeException(
'Install MinkZombieDriver in order to activate zombie session.'
);
}
$driverDefinition = new Definition('Behat\Mink\Driver\ZombieDriver', array(
new Definition('Behat\Mink\Driver\NodeJS\Server\ZombieServer', array(
$config['host'],
$config['port'],
$config['node_bin'],
$config['server_path'],
$config['threshold'],
$config['node_modules_path'],
)),
new Definition('Behat\Mink\Driver\NodeJS\Connection', array(
$config['host'],
$config['port'],
)),
$config['auto_server'],
));
$this->loadSession($container, $driverDefinition, 'zombie');
}
private function loadSeleniumSession(ContainerBuilder $container, array $config)
{
if (!class_exists('Behat\Mink\Driver\SeleniumDriver')) {
throw new \RuntimeException(
'Install MinkSeleniumDriver in order to activate selenium session.'
);
}
$driverDefinition = new Definition('Behat\Mink\Driver\SeleniumDriver', array(
$config['browser'],
'%mink.base_url%',
new Definition('Selenium\Client', array(
$config['host'],
$config['port'],
)),
));
$this->loadSession($container, $driverDefinition, 'selenium');
}
private function loadSelenium2Session(ContainerBuilder $container, array $config)
{
if (!class_exists('Behat\Mink\Driver\Selenium2Driver')) {
throw new \RuntimeException(
'Install MinkSelenium2Driver in order to activate selenium2 session.'
);
}
$driverDefinition = new Definition('Behat\Mink\Driver\Selenium2Driver', array(
$config['browser'],
$config['capabilities'],
$config['wd_host'],
));
$this->loadSession($container, $driverDefinition, 'selenium2');
}
private function loadSaucelabsSession(ContainerBuilder $container, array $config)
{
if (!class_exists('Behat\Mink\Driver\Selenium2Driver')) {
throw new \RuntimeException(
'Install MinkSelenium2Driver in order to activate saucelabs session.'
);
}
$capabilities = $config['capabilities'];
$capabilities['tags'] = array(php_uname('n'), 'PHP '.phpversion());
if (getenv('TRAVIS_JOB_NUMBER')) {
$capabilities['tunnel-identifier'] = getenv('TRAVIS_JOB_NUMBER');
$capabilities['build'] = getenv('TRAVIS_BUILD_NUMBER');
$capabilities['tags'] = array('Travis-CI', 'PHP '.phpversion());
}
$host = 'ondemand.saucelabs.com';
if ($config['connect']) {
$host = 'localhost:4445';
}
$driverDefinition = new Definition('Behat\Mink\Driver\Selenium2Driver', array(
$config['browser'],
$capabilities,
sprintf('%s:%s@%s/wd/hub', $config['username'], $config['access_key'], $host),
));
$this->loadSession($container, $driverDefinition, 'saucelabs');
}
private function loadSession(ContainerBuilder $container, Definition $driverDefinition, $alias)
{
$definition = new Definition('Behat\Mink\Session', array(
$driverDefinition,
new Reference(self::SELECTORS_HANDLER_ID),
));
$definition->addTag(self::SESSION_TAG, array('alias' => $alias));
$container->setDefinition(self::SESSION_TAG . '.' . $alias, $definition);
}
private function processSessions(ContainerBuilder $container)
{
$handlerDefinition = $container->getDefinition(self::MINK_ID);
foreach ($container->findTaggedServiceIds(self::SESSION_TAG) as $id => $tags) {
foreach ($tags as $tag) {
if (!isset($tag['alias'])) {
throw new ProcessingException(sprintf(
'All `%s` tags should have an `alias` attribute, but `%s` service has none.',
$tag,
$id
));
}
$handlerDefinition->addMethodCall(
'registerSession', array($tag['alias'], new Reference($id))
);
}
}
}
private function processSelectors(ContainerBuilder $container)
{
$handlerDefinition = $container->getDefinition(self::SELECTORS_HANDLER_ID);
foreach ($container->findTaggedServiceIds(self::SELECTOR_TAG) as $id => $tags) {
foreach ($tags as $tag) {
if (!isset($tag['alias'])) {
throw new ProcessingException(sprintf(
'All `%s` tags should have an `alias` attribute, but `%s` service has none.',
$tag,
$id
));
}
$handlerDefinition->addMethodCall(
'registerSelector', array($tag['alias'], new Reference($id))
);
}
}
}
} }

View File

@@ -10,10 +10,9 @@
namespace Behat\MinkExtension\Listener; namespace Behat\MinkExtension\Listener;
use Behat\Behat\Tester\Event\StepTested;
use Behat\Testwork\Tester\Result\TestResult;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Behat\Behat\Event\StepEvent;
use Behat\Mink\Mink; use Behat\Mink\Mink;
use Behat\Mink\Exception\Exception as MinkException; use Behat\Mink\Exception\Exception as MinkException;
@@ -41,27 +40,12 @@ class FailureShowListener implements EventSubscriberInterface
} }
/** /**
* Returns an array of event names this subscriber wants to listen to. * {@inheritdoc}
*
* The array keys are event names and the value can be:
*
* * The method name to call (priority defaults to 0)
* * An array composed of the method name to call and the priority
* * An array of arrays composed of the method names to call and respective
* priorities, or 0 if unset
*
* For instance:
*
* * array('eventName' => 'methodName')
* * array('eventName' => array('methodName', $priority))
* * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
*
* @return array The event names to listen to
*/ */
public static function getSubscribedEvents() public static function getSubscribedEvents()
{ {
return array( return array(
'afterStep' => array('showFailedStepResponse', -10) StepTested::AFTER => array('showFailedStepResponse', -10)
); );
} }
@@ -73,15 +57,15 @@ class FailureShowListener implements EventSubscriberInterface
* `show_cmd` command to run (`open %s` to open default browser on Mac) * `show_cmd` command to run (`open %s` to open default browser on Mac)
* `show_tmp_dir` folder where to store temp files (default is system temp) * `show_tmp_dir` folder where to store temp files (default is system temp)
* *
* @param StepEvent $event * @param StepTested $event
*/ */
public function showFailedStepResponse($event) public function showFailedStepResponse(StepTested $event)
{ {
if (StepEvent::FAILED !== $event->getResult()) { if (TestResult::FAILED !== $event->getResultCode()) {
return; return;
} }
if (!$event->getException() instanceof MinkException) { if (!$event->getTestResult()->getCallResult()->getException() instanceof MinkException) {
return; return;
} }

View File

@@ -10,12 +10,10 @@
namespace Behat\MinkExtension\Listener; namespace Behat\MinkExtension\Listener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Behat\Behat\Tester\Event\ScenarioTested;
use Behat\Behat\Event\ScenarioEvent,
Behat\Behat\Event\OutlineEvent;
use Behat\Mink\Mink; use Behat\Mink\Mink;
use Behat\Testwork\Tester\Event\ExerciseCompleted;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/** /**
* Mink sessions listener. * Mink sessions listener.
@@ -41,29 +39,13 @@ class SessionsListener implements EventSubscriberInterface
} }
/** /**
* Returns an array of event names this subscriber wants to listen to. * {@inheritdoc}
*
* The array keys are event names and the value can be:
*
* * The method name to call (priority defaults to 0)
* * An array composed of the method name to call and the priority
* * An array of arrays composed of the method names to call and respective
* priorities, or 0 if unset
*
* For instance:
*
* * array('eventName' => 'methodName')
* * array('eventName' => array('methodName', $priority))
* * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
*
* @return array The event names to listen to
*/ */
public static function getSubscribedEvents() public static function getSubscribedEvents()
{ {
return array( return array(
'beforeScenario' => array('prepareDefaultMinkSession', 10), ScenarioTested::BEFORE => array('prepareDefaultMinkSession', 10),
'beforeOutlineExample' => array('prepareDefaultMinkSession', 10), ExerciseCompleted::AFTER => array('tearDownMinkSessions', -10)
'afterSuite' => array('tearDownMinkSessions', -10)
); );
} }
@@ -78,14 +60,15 @@ class SessionsListener implements EventSubscriberInterface
* `@insulated` tag will cause Mink to stop current sessions before scenario * `@insulated` tag will cause Mink to stop current sessions before scenario
* instead of just soft-resetting them * instead of just soft-resetting them
* *
* @param ScenarioEvent|OutlineExampleEvent $event * @param ScenarioTested $event
*/ */
public function prepareDefaultMinkSession($event) public function prepareDefaultMinkSession(ScenarioTested $event)
{ {
$scenario = $event instanceof ScenarioEvent ? $event->getScenario() : $event->getOutline(); $scenario = $event->getScenario();
$feature = $event->getFeature();
$session = $this->parameters['default_session']; $session = $this->parameters['default_session'];
foreach ($scenario->getTags() as $tag) { foreach (array_merge($feature->getTags(), $scenario->getTags()) as $tag) {
if ('javascript' === $tag) { if ('javascript' === $tag) {
$session = $this->parameters['javascript_session']; $session = $this->parameters['javascript_session'];
} elseif (preg_match('/^mink\:(.+)/', $tag, $matches)) { } elseif (preg_match('/^mink\:(.+)/', $tag, $matches)) {

View File

@@ -1,56 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="mink.paths.lib">null</parameter>
<parameter key="behat.mink.parameters" type="collection"></parameter>
<parameter key="behat.mink.class">Behat\Mink\Mink</parameter>
<parameter key="behat.mink.session.class">Behat\Mink\Session</parameter>
<parameter key="behat.mink.selector.handler.class">Behat\Mink\Selector\SelectorsHandler</parameter>
<parameter key="behat.mink.selector.css.class">Behat\Mink\Selector\CssSelector</parameter>
<parameter key="behat.mink.selector.named.class">Behat\Mink\Selector\NamedSelector</parameter>
<parameter key="behat.mink.context.class_guesser.class">Behat\MinkExtension\Context\ClassGuesser\MinkContextClassGuesser</parameter>
<parameter key="behat.mink.context.initializer.class">Behat\MinkExtension\Context\Initializer\MinkAwareInitializer</parameter>
<parameter key="behat.mink.listener.sessions_listener.class">Behat\MinkExtension\Listener\SessionsListener</parameter>
<parameter key="behat.mink.default_session">goutte</parameter>
<parameter key="behat.mink.javascript_session">selenium2</parameter>
<parameter key="behat.mink.base_url">null</parameter>
<parameter key="behat.mink.show_cmd">null</parameter>
<parameter key="behat.mink.show_tmp_dir">null</parameter>
<parameter key="behat.mink.browser_name">firefox</parameter>
</parameters>
<services>
<service id="behat.mink" class="%behat.mink.class%" />
<service id="behat.mink.selector.handler" class="%behat.mink.selector.handler.class%" />
<service id="behat.mink.selector.css" class="%behat.mink.selector.css.class%">
<tag name="behat.mink.selector" alias="css" />
</service>
<service id="behat.mink.selector.named" class="%behat.mink.selector.named.class%">
<tag name="behat.mink.selector" alias="named" />
</service>
<service id="behat.mink.context.class_guesser" class="%behat.mink.context.class_guesser.class%">
<tag name="behat.context.class_guesser" priority="0" />
</service>
<service id="behat.mink.context.initializer" class="%behat.mink.context.initializer.class%">
<argument type="service" id="behat.mink" />
<argument>%behat.mink.parameters%</argument>
<tag name="context.initializer" priority="0" />
</service>
<service id="behat.mink.listener.sessions_listener" class="%behat.mink.listener.sessions_listener.class%">
<argument type="service" id="behat.mink" />
<argument>%behat.mink.parameters%</argument>
<tag name="behat.event_subscriber" priority="0" />
</service>
</services>
</container>

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.listener.failure_show_listener.class">Behat\MinkExtension\Listener\FailureShowListener</parameter>
</parameters>
<services>
<service id="behat.mink.listener.failure_show_listener" class="%behat.mink.listener.failure_show_listener.class%">
<argument type="service" id="behat.mink" />
<argument>%behat.mink.parameters%</argument>
<tag name="behat.event_subscriber" priority="0" />
</service>
</services>
</container>

View File

@@ -1,39 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.driver.goutte.class">Behat\Mink\Driver\GoutteDriver</parameter>
<parameter key="behat.mink.goutte.class">Behat\Mink\Driver\Goutte\Client</parameter>
<parameter key="behat.mink.guzzle.class">Guzzle\Http\Client</parameter>
<parameter key="behat.mink.goutte.server_parameters" type="collection"></parameter>
<parameter key="behat.mink.goutte.guzzle_parameters" type="collection"></parameter>
</parameters>
<services>
<service id="behat.mink.session.goutte" class="%behat.mink.session.class%">
<argument type="service">
<service class="%behat.mink.driver.goutte.class%">
<argument type="service" id="behat.mink.goutte" />
</service>
</argument>
<argument type="service" id="behat.mink.selector.handler" />
<tag name="behat.mink.session" alias="goutte" />
</service>
<service id="behat.mink.goutte" class="%behat.mink.goutte.class%">
<argument>%behat.mink.goutte.server_parameters%</argument>
<call method="setClient">
<argument type="service" id="behat.mink.guzzle" />
</call>
</service>
<service id="behat.mink.guzzle" class="%behat.mink.guzzle.class%">
<argument>null</argument>
<argument>%behat.mink.goutte.guzzle_parameters%</argument>
</service>
</services>
</container>

View File

@@ -1,44 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.driver.sahi.class">Behat\Mink\Driver\SahiDriver</parameter>
<parameter key="behat.mink.sahi.class">Behat\SahiClient\Client</parameter>
<parameter key="behat.mink.sahi.connection.class">Behat\SahiClient\Connection</parameter>
<parameter key="behat.mink.sahi.sid">null</parameter>
<parameter key="behat.mink.sahi.host">localhost</parameter>
<parameter key="behat.mink.sahi.port">9999</parameter>
<parameter key="behat.mink.sahi.browser">null</parameter>
<parameter key="behat.mink.sahi.limit">600</parameter>
</parameters>
<services>
<service id="behat.mink.session.sahi" class="%behat.mink.session.class%">
<argument type="service">
<service class="%behat.mink.driver.sahi.class%">
<argument>%behat.mink.browser_name%</argument>
<argument type="service" id="behat.mink.sahi" />
</service>
</argument>
<argument type="service" id="behat.mink.selector.handler" />
<tag name="behat.mink.session" alias="sahi" />
</service>
<service id="behat.mink.sahi" class="%behat.mink.sahi.class%">
<argument type="service">
<service class="%behat.mink.sahi.connection.class%">
<argument>%behat.mink.sahi.sid%</argument>
<argument>%behat.mink.sahi.host%</argument>
<argument>%behat.mink.sahi.port%</argument>
<argument>%behat.mink.sahi.browser%</argument>
<argument>%behat.mink.sahi.limit%</argument>
</service>
</argument>
</service>
</services>
</container>

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.driver.saucelabs.class">Behat\Mink\Driver\Selenium2Driver</parameter>
<parameter key="behat.mink.saucelabs.browser">%behat.mink.browser_name%</parameter>
<parameter key="behat.mink.saucelabs.capabilities" type="collection">
<parameter key="name" type="string">Behat feature suite</parameter>
<parameter key="version" type="string">21</parameter>
<parameter key="platform" type="string">Linux</parameter>
<parameter key="selenium-version" type="string">2.31.0</parameter>
<parameter key="max-duration">300</parameter>
</parameter>
<parameter key="behat.mink.saucelabs.wd_host">https://USERNAME:ACCESS_KEY@ondemand.saucelabs.com/wd/hub</parameter>
</parameters>
<services>
<service id="behat.mink.session.saucelabs" class="%behat.mink.session.class%">
<argument type="service">
<service class="%behat.mink.driver.saucelabs.class%">
<argument>%behat.mink.saucelabs.browser%</argument>
<argument>%behat.mink.saucelabs.capabilities%</argument>
<argument>%behat.mink.saucelabs.wd_host%</argument>
</service>
</argument>
<argument type="service" id="behat.mink.selector.handler" />
<tag name="behat.mink.session" alias="saucelabs" />
</service>
</services>
</container>

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.driver.selenium.class">Behat\Mink\Driver\SeleniumDriver</parameter>
<parameter key="behat.mink.selenium.class">Selenium\Client</parameter>
<parameter key="behat.mink.selenium.host">127.0.0.1</parameter>
<parameter key="behat.mink.selenium.port">4444</parameter>
<parameter key="behat.mink.selenium.browser">*%behat.mink.browser_name%</parameter>
</parameters>
<services>
<service id="behat.mink.session.selenium" class="%behat.mink.session.class%">
<argument type="service">
<service class="%behat.mink.driver.selenium.class%">
<argument>%behat.mink.selenium.browser%</argument>
<argument>%behat.mink.base_url%</argument>
<argument type="service" id="behat.mink.selenium" />
</service>
</argument>
<argument type="service" id="behat.mink.selector.handler" />
<tag name="behat.mink.session" alias="selenium" />
</service>
<service id="behat.mink.selenium" class="%behat.mink.selenium.class%">
<argument>%behat.mink.selenium.host%</argument>
<argument>%behat.mink.selenium.port%</argument>
</service>
</services>
</container>

View File

@@ -1,40 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.driver.selenium2.class">Behat\Mink\Driver\Selenium2Driver</parameter>
<parameter key="behat.mink.selenium2.browser">%behat.mink.browser_name%</parameter>
<parameter key="behat.mink.selenium2.capabilities" type="collection">
<parameter key="browserName" type="string">firefox</parameter>
<parameter key="version" type="string">8</parameter>
<parameter key="platform" type="string">ANY</parameter>
<parameter key="browserVersion" type="string">8</parameter>
<parameter key="browser" type="string">firefox</parameter>
<parameter key="name" type="string">Behat test</parameter>
<parameter key="deviceOrientation" type="string">portrait</parameter>
<parameter key="deviceType" type="string">tablet</parameter>
<parameter key="selenium-version" type="string">2.31.0</parameter>
<parameter key="max-duration">300</parameter>
</parameter>
<parameter key="behat.mink.selenium2.wd_host">http://localhost:4444/wd/hub</parameter>
</parameters>
<services>
<service id="behat.mink.session.selenium2" class="%behat.mink.session.class%">
<argument type="service">
<service class="%behat.mink.driver.selenium2.class%">
<argument>%behat.mink.selenium2.browser%</argument>
<argument>%behat.mink.selenium2.capabilities%</argument>
<argument>%behat.mink.selenium2.wd_host%</argument>
</service>
</argument>
<argument type="service" id="behat.mink.selector.handler" />
<tag name="behat.mink.session" alias="selenium2" />
</service>
</services>
</container>

View File

@@ -1,49 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="behat.mink.driver.zombie.class">Behat\Mink\Driver\ZombieDriver</parameter>
<parameter key="behat.mink.zombie.connection.class">Behat\Mink\Driver\NodeJS\Connection</parameter>
<parameter key="behat.mink.zombie.server.class">Behat\Mink\Driver\NodeJS\Server\ZombieServer</parameter>
<parameter key="behat.mink.zombie.host">127.0.0.1</parameter>
<parameter key="behat.mink.zombie.port">8124</parameter>
<parameter key="behat.mink.zombie.auto_server">true</parameter>
<parameter key="behat.mink.zombie.node_bin">node</parameter>
<parameter key="behat.mink.zombie.server_path">null</parameter>
<parameter key="behat.mink.zombie.threshold">2000000</parameter>
<parameter key="behat.mink.zombie.node_modules_path"></parameter>
</parameters>
<services>
<service id="behat.mink.session.zombie" class="%behat.mink.session.class%">
<argument type="service">
<service class="%behat.mink.driver.zombie.class%">
<argument type="service" id="behat.mink.zombie.server" />
<argument type="service" id="behat.mink.zombie.connection" />
<argument>%behat.mink.zombie.auto_server%</argument>
</service>
</argument>
<argument type="service" id="behat.mink.selector.handler" />
<tag name="behat.mink.session" alias="zombie" />
</service>
<service id="behat.mink.zombie.connection" class="%behat.mink.zombie.connection.class%">
<argument>%behat.mink.zombie.host%</argument>
<argument>%behat.mink.zombie.port%</argument>
</service>
<service id="behat.mink.zombie.server" class="%behat.mink.zombie.server.class%">
<argument>%behat.mink.zombie.host%</argument>
<argument>%behat.mink.zombie.port%</argument>
<argument>%behat.mink.zombie.node_bin%</argument>
<argument>%behat.mink.zombie.server_path%</argument>
<argument>%behat.mink.zombie.threshold%</argument>
<argument>%behat.mink.zombie.node_modules_path%</argument>
</service>
</services>
</container>