| Index: tools/telemetry/telemetry/page_test.py
|
| diff --git a/tools/telemetry/telemetry/page_test.py b/tools/telemetry/telemetry/page_test.py
|
| index 2d4d24fd97c3b1a19e3634133523b2da57fd9db8..a55ee9e16c8c5b26d5100b278098c464f53abd17 100644
|
| --- a/tools/telemetry/telemetry/page_test.py
|
| +++ b/tools/telemetry/telemetry/page_test.py
|
| @@ -9,24 +9,31 @@ class Failure(Exception):
|
| class PageTestResults(object):
|
| def __init__(self):
|
| self.page_failures = []
|
| + self.skipped_pages = []
|
|
|
| def AddFailure(self, page, message, details):
|
| self.page_failures.append({'page': page,
|
| 'message': message,
|
| 'details': details})
|
|
|
| + def AddSkippedPage(self, page, message, details):
|
| + self.skipped_pages.append({'page': page,
|
| + 'message': message,
|
| + 'details': details})
|
| +
|
| class PageTest(object):
|
| """A class styled on unittest.TestCase for creating page-specific tests."""
|
|
|
| - def __init__(self, test_method_name):
|
| + def __init__(self, test_method_name, interaction_name_to_run=''):
|
| self.options = None
|
| try:
|
| self._test_method = getattr(self, test_method_name)
|
| except AttributeError:
|
| raise ValueError, 'No such method %s.%s' % (
|
| self.__class_, test_method_name) # pylint: disable=E1101
|
| + self._interaction_name_to_run = interaction_name_to_run
|
|
|
| - def AddOptions(self, parser):
|
| + def AddCommandLineOptions(self, parser):
|
| """Override to expose command-line options for this benchmark.
|
|
|
| The provided parser is an optparse.OptionParser instance and accepts all
|
| @@ -38,13 +45,47 @@ class PageTest(object):
|
| """Override to add test-specific options to the BrowserOptions object"""
|
| pass
|
|
|
| + def CustomizeBrowserOptionsForPage(self, page, options):
|
| + """Add options specific to the test and the given page."""
|
| + if not self.CanRunForPage(page):
|
| + return
|
| + interaction = self.GetInteraction(page)
|
| + if interaction:
|
| + interaction.CustomizeBrowserOptions(options)
|
| +
|
| def SetUpBrowser(self, browser):
|
| """Override to customize the browser right after it has launched."""
|
| pass
|
|
|
| + def CanRunForPage(self, page): #pylint: disable=W0613
|
| + """Override to customize if the test can be ran for the given page."""
|
| + return True
|
| +
|
| + def WillRunInteraction(self, page, tab):
|
| + """Override to do operations before running the interaction on the page."""
|
| + pass
|
| +
|
| + def DidRunInteraction(self, page, tab):
|
| + """Override to do operations after running the interaction on the page."""
|
| + pass
|
| +
|
| def Run(self, options, page, tab, results):
|
| self.options = options
|
| + interaction = self.GetInteraction(page)
|
| + if interaction:
|
| + tab.WaitForDocumentReadyStateToBeComplete()
|
| + self.WillRunInteraction(page, tab)
|
| + interaction.PerformInteraction(page, tab)
|
| + self.DidRunInteraction(page, tab)
|
| try:
|
| self._test_method(page, tab, results)
|
| finally:
|
| self.options = None
|
| +
|
| + def GetInteraction(self, page):
|
| + if not self._interaction_name_to_run:
|
| + return None
|
| + interaction_data = getattr(page, self._interaction_name_to_run)
|
| + from telemetry import all_page_interactions
|
| + return all_page_interactions.FindClassWithName(
|
| + interaction_data['action'])(interaction_data)
|
|
|