/**
  * Starts and runs the test suite.
  *
  * @return $this|TestSuite Same instance for chained method calls.
  */
 public function run()
 {
     $this->_applyMaximizedWindowSetting()->_applyImplicitlyWaitTimeoutSetting()->_applyPageLoadTimeoutSetting()->_applyScriptTimeoutSetting()->_addCasesToCollection()->_determineSuiteType()->sqlLogger->startSuite();
     foreach ($this->testCaseCollection as $testCase) {
         /** @var TestCase $testCase */
         $this->suiteSettings->setCurrentTestCase($testCase);
         $testCase->run();
     }
     $this->sqlLogger->endSuite();
     if (!$this->errorMailSend && $this->failed && $this->suiteSettings->isSendErrorMail()) {
         $this->_sendErrorMail();
     }
     if ($this->isFailed() && $this->getSuiteSettings()->isReferenceImageSuite()) {
         $this->output('Error in reference image suite occurred, truncate reference images directory');
         $client = $this->seleniumFactory->createClientEmulator();
         $this->_truncateDirectory($client->getExpectedImagesDirectory());
         $from = $this->suiteSettings->getSendMailFrom();
         $to = $this->suiteSettings->getSendMailTo();
         $reply = $this->suiteSettings->getSendMailReplyTo();
         if ($to === '' || $reply === '' || $from === '') {
             $this->output('Invalid E-Mail credentials, not possible to send the error mail');
             return $this;
         }
         $subject = '[Selenium] Anlegen der Referenzbilder fehlgeschlagen';
         $header = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $reply . "\r\n" . 'Content-Type: text/plain; charset=UTF-8"';
         $message = 'Es ist ein Fehler beim anlegen der Referenzbilder aufgetreten.';
         $message .= "\n" . 'Bitte führe folgende Befehle aus, um sie erneut anzulegen.';
         $message .= "\n" . 'ssh ci-runner (zum Login auf den CI-Server)';
         $message .= "\n" . 'php /var/www/selenium-statistics/launcher/start rebuild_references gxci/selenium_builds/' . $this->suiteSettings->getBranch() . ' ci_' . str_replace('.', '_', $this->suiteSettings->getBranch()) . '_TEST ' . $this->suiteSettings->getBranch();
         mail($to, $subject, $message, $header);
         $this->output('Reference Suite error E-Mail send!');
         return $this;
     }
     $this->_closeWebDriver();
     return $this;
 }