diff --git a/core/modules/simpletest/src/Form/SimpletestResultsForm.php b/core/modules/simpletest/src/Form/SimpletestResultsForm.php
index f9e48d3..eae90d0 100644
--- a/core/modules/simpletest/src/Form/SimpletestResultsForm.php
+++ b/core/modules/simpletest/src/Form/SimpletestResultsForm.php
@@ -111,7 +111,14 @@ public function buildForm(array $form, FormStateInterface $form_state, $test_id
     // performed.
     $results = array();
 
-    if (is_numeric($test_id) && !$results = $this->getResults($test_id)) {
+    // Allow multiple test_ids so that run-test.sh can open results in a single
+    // browser window.
+    // @see simpletest_script_open_browser()
+    if (strpos($test_id, '+') !== FALSE) {
+      $test_id = explode('+', $test_id);
+    }
+
+    if ((is_numeric($test_id) || is_array($test_id)) && !$results = $this->getResults($test_id)) {
       drupal_set_message($this->t('No test results to display.'), 'error');
       return new RedirectResponse(url('admin/config/development/testing', array('absolute' => TRUE)));
     }
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 70bdf4a..3424888 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -86,7 +86,12 @@
 simpletest_script_reporter_timer_stop();
 
 // Display results before database is cleared.
-simpletest_script_reporter_display_results();
+if ($args['browser']) {
+  simpletest_script_open_browser();
+}
+else {
+  simpletest_script_reporter_display_results();
+}
 
 if ($args['xml']) {
   simpletest_script_reporter_write_xml_results();
@@ -184,6 +189,10 @@ function simpletest_script_help() {
               test database and configuration directories. Use in combination
               with --repeat for debugging random test failures.
 
+  --browser   Opens the results in the browser. This enforces --keep-results and
+              if you want to also view any pages rendered in the simpletest
+              browser you need to add --verbose to the command line.
+
   <test1>[,<test2>[,<test3> ...]]
 
               One or more tests to be run. By default, these are interpreted
@@ -242,6 +251,7 @@ function simpletest_script_parse_args() {
     'test_names' => array(),
     'repeat' => 1,
     'die-on-fail' => FALSE,
+    'browser' => FALSE,
     // Used internally.
     'test-id' => 0,
     'execute-test' => '',
@@ -287,6 +297,10 @@ function simpletest_script_parse_args() {
     exit;
   }
 
+  //
+  if ($args['browser']) {
+    $args['keep-results'] = TRUE;
+  }
   return array($args, $count);
 }
 
@@ -1059,3 +1073,30 @@ function simpletest_script_color_code($status) {
   }
   return 0; // Default formatting.
 }
+
+/**
+ * Display test results.
+ */
+function simpletest_script_open_browser() {
+  global $args, $test_ids;
+
+  // See if we can find an OS helper to open URLs in default browser.
+  if (shell_exec('which xdg-open')) {
+    $browser = 'xdg-open';
+  }
+  else if (shell_exec('which open')) {
+    $browser = 'open';
+  }
+  else if (substr(PHP_OS, 0, 3) == 'WIN') {
+    $browser = 'start';
+  }
+  else {
+    // Can't find a valid browser.
+    $browser = FALSE;
+  }
+
+  if ($browser) {
+    $url = $args['url'] . '/admin/config/development/testing/results/' . urlencode(implode('+', $test_ids));
+    shell_exec($browser . ' ' . escapeshellarg($url));
+  }
+}
