diff --git a/core/modules/simpletest/src/BrowserTestBase.php b/core/modules/simpletest/src/BrowserTestBase.php index e15078c..bcf0ddd 100644 --- a/core/modules/simpletest/src/BrowserTestBase.php +++ b/core/modules/simpletest/src/BrowserTestBase.php @@ -182,6 +182,20 @@ */ protected $customTranslations; + /* + * Mink FQNC for the default driver to use. + * + * @var string. + */ + protected $minkDriverFQCN = '\Behat\Mink\Driver\GoutteDriver'; + + /* + * Mink default driver params. + * + * @var array + */ + protected $minkDriverArgs = array(); + /** * Mink session manager. * @@ -193,16 +207,51 @@ * Initializes Mink sessions. */ protected function initMink() { - $driver = new GoutteDriver(); + $driver = $this->getDefaultDriverInstance(); $session = new Session($driver); $this->mink = new Mink(); - $this->mink->registerSession('goutte', $session); - $this->mink->setDefaultSessionName('goutte'); + $this->mink->registerSession('default', $session); + $this->mink->setDefaultSessionName('default'); $this->registerSessions(); return $session; } /** + * Gets an instance of the default Mink driver. + * + * @return \Drupal\simpletest\minkDriverFQCN + * Instance of default Mink driver. + * + * @throws \InvalidArgumentException + * When provided default Mink driver class can't be instantiated. + */ + protected function getDefaultDriverInstance() { + // Get default driver params from environment if availables. + if ($arg_json = getenv('MINK_DRIVER_ARGS')) { + $this->minkDriverArgs = json_decode($arg_json); + } + + // Get and check default driver class from environment if availables. + if ($minkDriverFQCN = getenv('MINK_DRIVER_FQCN')) { + if (class_exists($minkDriverFQCN)) { + $this->minkDriverFQCN = $minkDriverFQCN; + } + else { + throw new \InvalidArgumentException("Can't instantiate provided $minkDriverFQCN class by environment as default driver class."); + } + } + + if (is_array($this->minkDriverArgs)) { + $reflector = new ReflectionClass($this->minkDriverArgs); + $driver = $reflector->newInstanceArgs($this->minkDriverFQCN); + } + else { + $driver = new $this->minkDriverFQCN(); + } + return $driver; + } + + /** * Registers additional Mink sessions. * * Tests wishing to use a different driver or change the default driver should