4 * This file is part of the Behat MinkExtension.
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace Behat\MinkExtension\ServiceContainer\Driver;
13 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
14 use Symfony\Component\DependencyInjection\Definition;
16 class Selenium2Factory implements DriverFactory
21 public function getDriverName()
29 public function supportsJavascript()
37 public function configure(ArrayNodeDefinition $builder)
41 ->scalarNode('browser')->defaultValue('%mink.browser_name%')->end()
42 ->append($this->getCapabilitiesNode())
43 ->scalarNode('wd_host')->defaultValue('http://localhost:4444/wd/hub')->end()
51 public function buildDriver(array $config)
53 if (!class_exists('Behat\Mink\Driver\Selenium2Driver')) {
54 throw new \RuntimeException(sprintf(
55 'Install MinkSelenium2Driver in order to use %s driver.',
56 $this->getDriverName()
60 $extraCapabilities = $config['capabilities']['extra_capabilities'];
61 unset($config['capabilities']['extra_capabilities']);
63 if (getenv('TRAVIS_JOB_NUMBER')) {
64 $guessedCapabilities = array(
65 'tunnel-identifier' => getenv('TRAVIS_JOB_NUMBER'),
66 'build' => getenv('TRAVIS_BUILD_NUMBER'),
67 'tags' => array('Travis-CI', 'PHP '.phpversion()),
69 } elseif (getenv('JENKINS_HOME')) {
70 $guessedCapabilities = array(
71 'tunnel-identifier' => getenv('JOB_NAME'),
72 'build' => getenv('BUILD_NUMBER'),
73 'tags' => array('Jenkins', 'PHP '.phpversion(), getenv('BUILD_TAG')),
76 $guessedCapabilities = array(
77 'tags' => array(php_uname('n'), 'PHP '.phpversion()),
81 return new Definition('Behat\Mink\Driver\Selenium2Driver', array(
83 array_replace($guessedCapabilities, $extraCapabilities, $config['capabilities']),
88 protected function getCapabilitiesNode()
90 $node = new ArrayNodeDefinition('capabilities');
93 ->addDefaultsIfNotSet()
94 ->normalizeKeys(false)
96 ->scalarNode('browserName')->end()
97 ->scalarNode('version')->end()
98 ->scalarNode('platform')->end()
99 ->scalarNode('browserVersion')->end()
100 ->scalarNode('browser')->defaultValue('firefox')->end()
101 ->booleanNode('ignoreZoomSetting')->defaultFalse()->end()
102 ->scalarNode('name')->defaultValue('Behat feature suite')->end()
103 ->scalarNode('deviceOrientation')->end()
104 ->scalarNode('deviceType')->end()
105 ->booleanNode('javascriptEnabled')->end()
106 ->booleanNode('databaseEnabled')->end()
107 ->booleanNode('locationContextEnabled')->end()
108 ->booleanNode('applicationCacheEnabled')->end()
109 ->booleanNode('browserConnectionEnabled')->end()
110 ->booleanNode('webStorageEnabled')->end()
111 ->booleanNode('rotatable')->end()
112 ->booleanNode('acceptSslCerts')->end()
113 ->booleanNode('nativeEvents')->end()
116 ->scalarNode('proxyType')->end()
117 ->scalarNode('proxyAuthconfigUrl')->end()
118 ->scalarNode('ftpProxy')->end()
119 ->scalarNode('httpProxy')->end()
120 ->scalarNode('sslProxy')->end()
123 ->ifTrue(function ($v) {
129 ->arrayNode('firefox')
131 ->scalarNode('profile')
133 ->ifTrue(function ($v) {
134 return !file_exists($v);
136 ->thenInvalid('Cannot find profile zip file %s')
139 ->scalarNode('binary')->end()
142 ->arrayNode('chrome')
144 ->arrayNode('switches')->prototype('scalar')->end()->end()
145 ->scalarNode('binary')->end()
146 ->arrayNode('extensions')->prototype('scalar')->end()->end()
149 ->arrayNode('extra_capabilities')
150 ->info('Custom capabilities merged with the known ones')
151 ->normalizeKeys(false)
152 ->useAttributeAsKey('name')
153 ->prototype('variable')->end()