From 76a9c1f8fbb9b88ab69ec422bdc860822b14049d Mon Sep 17 00:00:00 2001 From: everzet Date: Mon, 3 Jun 2013 10:39:43 +0100 Subject: [PATCH] Implement direct SauceLabs support --- src/Behat/MinkExtension/Extension.php | 69 +++++++++++++++++++ .../services/sessions/saucelabs.xml | 29 ++++++++ 2 files changed, 98 insertions(+) create mode 100644 src/Behat/MinkExtension/services/sessions/saucelabs.xml diff --git a/src/Behat/MinkExtension/Extension.php b/src/Behat/MinkExtension/Extension.php index 2680dc2..624263f 100644 --- a/src/Behat/MinkExtension/Extension.php +++ b/src/Behat/MinkExtension/Extension.php @@ -91,6 +91,40 @@ class Extension implements ExtensionInterface $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'); + + $http = 'https'; + $host = 'ondemand.saucelabs.com'; + if ($config['saucelabs']['connect']) { + $http = 'http'; + $host = 'localhost:4445'; + } + + $username = $config['saucelabs']['username']; + $accessKey = $config['saucelabs']['access_key']; + + $container->setParameter('behat.mink.saucelabs.wd_host', sprintf( + '%s://%s:%s@%s/wd/hub', $http, $username, $accessKey, $host + )); + $container->setParameter('behat.mink.saucelabs.browser', + $config['saucelabs']['capabilities']['browser_name'] + ); + + if ($config['saucelabs']['travis']) { + $capabilities = $container->getParameter('behat.mink.saucelabs.capabilities'); + $capabilities['tunnel-identifier'] = getenv('TRAVIS_JOB_NUMBER'); + $capabilities['build'] = getenv('TRAVIS_BUILD_NUMBER'); + + $container->setParameter('behat.mink.saucelabs.capabilities'); + } + } $minkParameters = array(); foreach ($config as $ns => $tlValue) { @@ -330,6 +364,41 @@ class Extension implements ExtensionInterface end()-> end()-> end()-> + arrayNode('saucelabs')-> + children()-> + scalarNode('username')-> + defaultValue(getenv('SAUCE_USERNAME'))-> + end()-> + scalarNode('access_key')-> + defaultValue(getenv('SAUCE_ACCESS_KEY'))-> + end()-> + booleanNode('travis')-> + defaultValue(isset($config['saucelabs']['travis']) ? 'true' === $config['saucelabs']['travis'] : false)-> + end()-> + booleanNode('connect')-> + defaultValue(isset($config['saucelabs']['connect']) ? 'true' === $config['saucelabs']['connect'] : false)-> + end()-> + arrayNode('capabilities')-> + children()-> + scalarNode('browser')-> + defaultValue(isset($config['saucelabs']['browser']) ? $config['saucelabs']['browser'] : 'firefox')-> + 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(); } diff --git a/src/Behat/MinkExtension/services/sessions/saucelabs.xml b/src/Behat/MinkExtension/services/sessions/saucelabs.xml new file mode 100644 index 0000000..8f7f586 --- /dev/null +++ b/src/Behat/MinkExtension/services/sessions/saucelabs.xml @@ -0,0 +1,29 @@ + + + + + Behat\Mink\Driver\Selenium2Driver + + %behat.mink.browser_name% + + https://USERNAME:ACCESS_KEY@ondemand.saucelabs.com/wd/hub + + + + + + + + %behat.mink.saucelabs.browser% + %behat.mink.saucelabs.capabilities% + %behat.mink.saucelabs.wd_host% + + + + + + + +