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) |