diff --git a/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php b/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php new file mode 100644 index 0000000..9e3a9f2 --- /dev/null +++ b/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\MinkExtension\ServiceContainer\Driver; + +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; +use Symfony\Component\DependencyInjection\Definition; + +class Selenium4Factory implements DriverFactory +{ + /** + * {@inheritdoc} + */ + public function getDriverName() + { + return 'selenium4'; + } + + /** + * {@inheritdoc} + */ + public function supportsJavascript() + { + return true; + } + + /** + * {@inheritdoc} + */ + public function configure(ArrayNodeDefinition $builder) + { + $builder + ->children() + ->scalarNode('name')->defaultValue('Behat Test')->end() + ->scalarNode('browser')->defaultValue('%mink.browser_name%')->end() + ->append($this->getCapabilitiesNode()) + ->scalarNode('wd_host')->defaultValue('http://localhost:4444/wd/hub')->end() + ->end() + ; + } + + /** + * {@inheritdoc} + */ + public function buildDriver(array $config) + { + if (!class_exists('Behat\Mink\Driver\Selenium4Driver')) { + throw new \RuntimeException(sprintf( + 'Install MinkSelenium4Driver in order to use %s driver.', + $this->getDriverName() + )); + } + + $args = array( + 'capabilities' => $config['capabilities'], + 'tags' => array(php_uname('n'), 'PHP '.phpversion()) + ); + + if (getenv('TRAVIS_JOB_NUMBER')) { + $args['tunnel-identifier'] = getenv('TRAVIS_JOB_NUMBER'); + $args['build'] = getenv('TRAVIS_BUILD_NUMBER'); + $args['tags'] = array('Travis-CI', 'PHP '.phpversion()); + } + + if (getenv('JENKINS_HOME')) { + $args['tunnel-identifier'] = getenv('JOB_NAME'); + $args['build'] = getenv('BUILD_NUMBER'); + $args['tags'] = array('Jenkins', 'PHP '.phpversion(), getenv('BUILD_TAG')); + } + + return new Definition('Behat\Mink\Driver\Selenium4Driver', array( + $config['browser'], + $args, + $config['wd_host'], + )); + } + + protected function getCapabilitiesNode() + { + $node = new ArrayNodeDefinition('capabilities'); + + $node + ->addDefaultsIfNotSet() + ->normalizeKeys(false) + ->children() + ->arrayNode('firstMatch') + ->end() + ->arrayNode('alwaysMatch') + ->children() + ->scalarNode('browserName')->end() + ->scalarNode('pageLoadStrategy')->end() + ->arrayNode('goog:chromeOptions') + ->children() + ->arrayNode('extensions') + ->scalarPrototype()->end() + ->end() + ->arrayNode('args') + ->scalarPrototype()->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ->end(); + + return $node; + } +} diff --git a/src/Behat/MinkExtension/ServiceContainer/MinkExtension.php b/src/Behat/MinkExtension/ServiceContainer/MinkExtension.php index 8c04752..a1209f8 100644 --- a/src/Behat/MinkExtension/ServiceContainer/MinkExtension.php +++ b/src/Behat/MinkExtension/ServiceContainer/MinkExtension.php @@ -19,6 +19,7 @@ use Behat\MinkExtension\ServiceContainer\Driver\GoutteFactory; use Behat\MinkExtension\ServiceContainer\Driver\SahiFactory; use Behat\MinkExtension\ServiceContainer\Driver\SauceLabsFactory; use Behat\MinkExtension\ServiceContainer\Driver\Selenium2Factory; +use Behat\MinkExtension\ServiceContainer\Driver\Selenium4Factory; use Behat\MinkExtension\ServiceContainer\Driver\SeleniumFactory; use Behat\MinkExtension\ServiceContainer\Driver\ZombieFactory; use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension; @@ -56,6 +57,7 @@ class MinkExtension implements ExtensionInterface $this->registerDriverFactory(new SahiFactory()); $this->registerDriverFactory(new SeleniumFactory()); $this->registerDriverFactory(new Selenium2Factory()); + $this->registerDriverFactory(new Selenium4Factory()); $this->registerDriverFactory(new SauceLabsFactory()); $this->registerDriverFactory(new BrowserStackFactory()); $this->registerDriverFactory(new ZombieFactory());