diff --git a/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php b/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php index e9111a0..8c1a446 100644 --- a/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php +++ b/src/Behat/MinkExtension/ServiceContainer/Driver/Selenium4Factory.php @@ -38,6 +38,7 @@ class Selenium4Factory implements DriverFactory { $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() @@ -50,37 +51,35 @@ class Selenium4Factory implements DriverFactory */ public function buildDriver(array $config) { - if (!class_exists('Behat\Mink\Driver\Selenium2Driver')) { + if (!class_exists('Behat\Mink\Driver\Selenium4Driver')) { throw new \RuntimeException(sprintf( - 'Install MinkSelenium2Driver in order to use %s driver.', + 'Install MinkSelenium4Driver in order to use %s driver.', $this->getDriverName() )); } - $extraCapabilities = $config['capabilities']['extra_capabilities']; - unset($config['capabilities']['extra_capabilities']); + dd($config); + + $desiredCapabilities = array( + 'capabilities' => $config['capabilities'], + 'tags' => array(php_uname('n'), 'PHP '.phpversion()) + ); if (getenv('TRAVIS_JOB_NUMBER')) { - $guessedCapabilities = array( - 'tunnel-identifier' => getenv('TRAVIS_JOB_NUMBER'), - 'build' => getenv('TRAVIS_BUILD_NUMBER'), - 'tags' => array('Travis-CI', 'PHP '.phpversion()), - ); - } elseif (getenv('JENKINS_HOME')) { - $guessedCapabilities = array( - 'tunnel-identifier' => getenv('JOB_NAME'), - 'build' => getenv('BUILD_NUMBER'), - 'tags' => array('Jenkins', 'PHP '.phpversion(), getenv('BUILD_TAG')), - ); - } else { - $guessedCapabilities = array( - 'tags' => array(php_uname('n'), 'PHP '.phpversion()), - ); + $desiredCapabilities['tunnel-identifier'] = getenv('TRAVIS_JOB_NUMBER'); + $desiredCapabilities['build'] = getenv('TRAVIS_BUILD_NUMBER'); + $desiredCapabilities['tags'] = array('Travis-CI', 'PHP '.phpversion()); } - return new Definition('Behat\Mink\Driver\Selenium2Driver', array( + if (getenv('JENKINS_HOME')) { + $desiredCapabilities['tunnel-identifier'] = getenv('JOB_NAME'); + $desiredCapabilities['build'] = getenv('BUILD_NUMBER'); + $desiredCapabilities['tags'] = array('Jenkins', 'PHP '.phpversion(), getenv('BUILD_TAG')); + } + dd($config['capabilities']); + return new Definition('Behat\Mink\Driver\Selenium4Driver', array( $config['browser'], - array_replace($guessedCapabilities, $extraCapabilities, $config['capabilities']), + $desiredCapabilities, $config['wd_host'], )); } @@ -93,81 +92,24 @@ class Selenium4Factory implements DriverFactory ->addDefaultsIfNotSet() ->normalizeKeys(false) ->children() - ->scalarNode('browserName')->end() - ->scalarNode('version')->end() - ->scalarNode('platform')->end() - ->scalarNode('browserVersion')->end() - ->scalarNode('browser')->defaultValue('firefox')->end() - ->booleanNode('marionette')->end() - ->booleanNode('ignoreZoomSetting')->defaultFalse()->end() - ->scalarNode('name')->defaultValue('Behat feature suite')->end() - ->scalarNode('deviceOrientation')->end() - ->scalarNode('deviceType')->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('overlappingCheckDisabled')->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); - }) - ->thenUnset() - ->end() + ->arrayNode('firstMatch') ->end() - ->arrayNode('firefox') + ->arrayNode('alwaysMatch') ->children() - ->scalarNode('profile') - ->validate() - ->ifTrue(function ($v) { - return !file_exists($v); - }) - ->thenInvalid('Cannot find profile zip file %s') + ->scalarNode('browserName')->end() + ->scalarNode('pageLoadStrategy')->end() + ->arrayNode('goog:chromeOptions') + ->children() + ->arrayNode('extensions') + ->scalarPrototype()->end() + ->end() + ->arrayNode('args') + ->scalarPrototype()->end() + ->end() ->end() ->end() - ->scalarNode('binary')->end() ->end() ->end() - ->arrayNode('chrome') - ->children() - ->arrayNode('switches')->prototype('scalar')->end()->end() - ->scalarNode('binary')->end() - ->arrayNode('extensions')->prototype('scalar')->end()->end() - ->arrayNode('prefs') - ->normalizeKeys(false) - ->useAttributeAsKey('name') - ->prototype('variable')->end() - ->end() - ->end() - ->validate() - ->ifTrue(function ($v) { - return empty($v['prefs']); - }) - ->then(function ($v) { - unset($v['prefs']); - return $v; - }) - ->end() - ->end() - ->arrayNode('extra_capabilities') - ->info('Custom capabilities merged with the known ones') - ->normalizeKeys(false) - ->useAttributeAsKey('name') - ->prototype('variable')->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());