Index: tools/telemetry/telemetry/page/page_test.py |
diff --git a/tools/telemetry/telemetry/page/page_test.py b/tools/telemetry/telemetry/page/page_test.py |
index 7a931a599e64c8e71a45703feed86c0fb03b03d4..31a78991f1eb21add5aa43e5a9b56319431e1f4b 100644 |
--- a/tools/telemetry/telemetry/page/page_test.py |
+++ b/tools/telemetry/telemetry/page/page_test.py |
@@ -2,6 +2,9 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+import logging |
+ |
+from telemetry.core import exceptions |
from telemetry.page import action_runner as action_runner_module |
from telemetry.page import test_expectations |
@@ -164,7 +167,17 @@ class PageTest(object): |
def TabForPage(self, page, browser): # pylint: disable=W0613 |
"""Override to select a different tab for the page. For instance, to |
create a new tab for every page, return browser.tabs.New().""" |
- return browser.tabs[0] |
+ try: |
+ return browser.tabs[0] |
+ # The tab may have gone away in some case, so we create a new tab and retry |
+ # (See crbug.com/496280) |
+ except exceptions.DevtoolsTargetCrashException as e: |
+ logging.error('Tab may have crashed: %s' % str(e)) |
+ browser.tabs.New() |
+ # See comment in shared_page_state.WillRunUserStory for why this waiting |
+ # is needed. |
+ browser.tabs[0].WaitForDocumentReadyStateToBeComplete() |
+ return browser.tabs[0] |
def ValidateAndMeasurePage(self, page, tab, results): |
"""Override to check test assertions and perform measurement. |