Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Unified Diff: tools/telemetry/telemetry/page/page_test.py

Issue 180873008: Add support for python pageset (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ceb68b68f7843f0c4c4cb71c3ca7ed2bcd84fb76..fb6782c9940ef5d33b2b375b0dca0797b15af927 100644
--- a/tools/telemetry/telemetry/page/page_test.py
+++ b/tools/telemetry/telemetry/page/page_test.py
@@ -1,50 +1,10 @@
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import logging
from telemetry.page import test_expectations
-from telemetry.page.actions import all_page_actions
from telemetry.page.actions import interact
-from telemetry.page.actions import navigate
-from telemetry.page.actions import page_action
-
-
-def _GetActionFromData(action_data):
- action_name = action_data['action']
- action = all_page_actions.FindClassWithName(action_name)
- if not action:
- logging.critical('Could not find an action named %s.', action_name)
- logging.critical('Check the page set for a typo and check the error '
- 'log for possible Python loading/compilation errors.')
- raise Exception('Action "%s" not found.' % action_name)
- return action(action_data)
-
-
-def GetSubactionFromData(page, subaction_data, interactive):
- subaction_name = subaction_data['action']
- if hasattr(page, subaction_name):
- return GetCompoundActionFromPage(page, subaction_name, interactive)
- else:
- return [_GetActionFromData(subaction_data)]
-
-
-def GetCompoundActionFromPage(page, action_name, interactive=False):
- if interactive:
- return [interact.InteractAction()]
-
- if not action_name:
- return []
-
- action_data_list = getattr(page, action_name)
- if not isinstance(action_data_list, list):
- action_data_list = [action_data_list]
-
- action_list = []
- for subaction_data in action_data_list:
- for _ in xrange(subaction_data.get('repeat', 1)):
- action_list += GetSubactionFromData(page, subaction_data, interactive)
- return action_list
+from telemetry.page.actions import action_runner
class Failure(Exception):
@@ -185,13 +145,11 @@ class PageTest(object):
this page set. They may, however, be further modified by
CustomizeBrowserOptionsForSinglePage or by the profiler.
"""
- for page in page_set:
+ for page in page_set.pages:
if not self.CanRunForPage(page):
return
- interactive = options and options.interactive
- for action in GetCompoundActionFromPage(
- page, self._action_name_to_run, interactive):
- action.CustomizeBrowserOptionsForPageSet(options)
+ #TODO(nednguyen): Remove CustomizeBrowserOptionsForPageSet from actions
+ page_set.AddCustomizeBrowserOptions(options)
def CustomizeBrowserOptionsForSinglePage(self, page, options):
"""Set options specific to the test and the given page.
@@ -200,10 +158,7 @@ class PageTest(object):
Changing options at this point only makes sense if the browser is being
restarted for each page.
"""
- interactive = options and options.interactive
- for action in GetCompoundActionFromPage(
- page, self._action_name_to_run, interactive):
- action.CustomizeBrowserOptionsForSinglePage(options)
+ page.AddCustomizeBrowserOptions(options)
def WillStartBrowser(self, browser):
"""Override to manipulate the browser environment before it launches."""
@@ -291,50 +246,24 @@ class PageTest(object):
def Run(self, page, tab, results):
interactive = self.options and self.options.interactive
- compound_action = GetCompoundActionFromPage(
- page, self._action_name_to_run, interactive)
+ runner = action_runner.ActionRunner(page, tab, self)
self.WillRunActions(page, tab)
- self._RunCompoundAction(page, tab, compound_action)
+ if interactive:
+ runner.RunAction(interact.InteractAction())
+ else:
+ compound_action = getattr(page, self._action_name_to_run)
nduca 2014/03/05 03:00:57 compound_action -> run_method?
+ compound_action(runner)
self.DidRunActions(page, tab)
self._test_method(page, tab, results)
- def _RunCompoundAction(self, page, tab, actions, run_setup_methods=True):
- for i, action in enumerate(actions):
- prev_action = actions[i - 1] if i > 0 else None
- next_action = actions[i + 1] if i < len(actions) - 1 else None
-
- if (action.RunsPreviousAction() and
- next_action and next_action.RunsPreviousAction()):
- raise page_action.PageActionFailed('Consecutive actions cannot both '
- 'have RunsPreviousAction() == True.')
-
- if not (next_action and next_action.RunsPreviousAction()):
- action.WillRunAction(page, tab)
- if run_setup_methods:
- self.WillRunAction(page, tab, action)
- try:
- action.RunAction(page, tab, prev_action)
- finally:
- if run_setup_methods:
- self.DidRunAction(page, tab, action)
-
- # Note that we must not call util.CloseConnections here. Many tests
- # navigate to a URL in the first action and then wait for a condition
- # in the second action. Calling util.CloseConnections here often
- # aborts resource loads performed by the page.
-
def RunNavigateSteps(self, page, tab):
"""Navigates the tab to the page URL attribute.
Runs the 'navigate_steps' page attribute as a compound action.
"""
- navigate_actions = GetCompoundActionFromPage(page, 'navigate_steps')
- if not any(isinstance(action, navigate.NavigateAction)
- for action in navigate_actions):
- raise page_action.PageActionFailed(
- 'No NavigateAction in navigate_steps')
-
- self._RunCompoundAction(page, tab, navigate_actions, False)
+ if hasattr(page, 'navigate_steps'):
+ runner = action_runner.ActionRunner(page, tab, None)
+ page.navigate_steps(runner)
nduca 2014/03/05 03:00:57 method_name -> MethodName and maybe just call thi
def IsExiting(self):
return self._exit_requested

Powered by Google App Engine
This is Rietveld 408576698