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

Unified Diff: tools/telemetry/telemetry/page/actions/action_runner.py

Issue 323833003: Create ActionRunner wrapper API over TapAction and ClickElementAction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing to head. Created 6 years, 6 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/actions/action_runner.py
diff --git a/tools/telemetry/telemetry/page/actions/action_runner.py b/tools/telemetry/telemetry/page/actions/action_runner.py
index 66a02bbc6c17fc5b32b449d441137bdb6f8a7ce6..e937c315e11761457337f6b1339c65802eacbc09 100644
--- a/tools/telemetry/telemetry/page/actions/action_runner.py
+++ b/tools/telemetry/telemetry/page/actions/action_runner.py
@@ -3,7 +3,9 @@
# found in the LICENSE file.
from telemetry.page.actions import page_action
+from telemetry.page.actions.javascript_click import ClickElementAction
from telemetry.page.actions.navigate import NavigateAction
+from telemetry.page.actions.tap import TapAction
from telemetry.page.actions.wait import WaitAction
from telemetry.web_perf import timeline_interaction_record as tir_module
@@ -46,6 +48,27 @@ class ActionRunner(object):
interaction.Begin()
return interaction
+ def BeginGestureInteraction(
+ self, label, is_smooth=False, is_responsive=False):
+ """Marks the beginning of a gesture-based interaction record.
+
+ This is similar to normal interaction record, but it will
+ auto-narrow the interaction time period to only include the
+ synthetic gesture event output by Chrome. This is typically use to
+ reduce noise in gesture-based analysis (e.g., analysis for a
+ swipe/scroll).
+
+ The interaction record label will be prepended with 'Gesture_'.
+
+ Args:
+ label: A label for this particular interaction. This can be any
+ user-defined string, but must not contain '/'.
+ is_smooth: Whether to check for smoothness metrics for this interaction.
+ is_responsive: Whether to check for responsiveness metrics for
+ this interaction.
+ """
+ return self.BeginInteraction('Gesture_' + label, is_smooth, is_responsive)
+
def NavigateToPage(self, page, timeout_seconds=None):
""" Navigate to the given page.
@@ -68,15 +91,35 @@ class ActionRunner(object):
self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
def ExecuteJavaScript(self, statement):
- """Executes a given JavaScript statement.
+ """Executes a given JavaScript expression. Does not return the result.
Example: runner.ExecuteJavaScript('var foo = 1;');
Args:
statement: The statement to execute (provided as string).
+
+ Raises:
+ EvaluationException: The statement failed to execute.
"""
self._tab.ExecuteJavaScript(statement)
+ def EvaluateJavaScript(self, expression):
+ """Returns the evaluation result of the given JavaScript expression.
+
+ The evaluation results must be convertible to JSON. If the result
+ is not needed, use ExecuteJavaScript instead.
+
+ Example: num = runner.EvaluateJavaScript('document.location.href')
+
+ Args:
+ expression: The expression to evaluate (provided as string).
+
+ Raises:
+ EvaluationException: The statement expression failed to execute
+ or the evaluation result can not be JSON-ized.
+ """
+ return self._tab.EvaluateJavaScript(expression)
+
def Wait(self, seconds):
"""Wait for the number of seconds specified.
@@ -98,8 +141,10 @@ class ActionRunner(object):
def WaitForElement(self, selector=None, text=None, element_function=None,
timeout=60):
- """Wait for an element to appear in the document. Only one of selector,
- text, or element_function must be specified.
+ """Wait for an element to appear in the document.
+
+ The element may be selected via selector, text, or element_function.
+ Only one of these arguments must be specified.
Args:
selector: A CSS selector describing the element.
@@ -114,6 +159,40 @@ class ActionRunner(object):
attr, selector, text, element_function)
self.RunAction(WaitAction(attr))
+ def TapElement(self, selector=None, text=None, element_function=None):
+ """Tap an element.
+
+ The element may be selected via selector, text, or element_function.
+ Only one of these arguments must be specified.
+
+ Args:
+ selector: A CSS selector describing the element.
+ text: The element must contains this exact text.
+ element_function: A JavaScript function (as string) that is used
+ to retrieve the element. For example:
+ 'function() { return foo.element; }'.
+ """
+ attr = {'automatically_record_interaction': False}
+ _FillElementSelector(attr, selector, text, element_function)
+ self.RunAction(TapAction(attr))
+
+ def ClickElement(self, selector=None, text=None, element_function=None):
+ """Click an element.
+
+ The element may be selected via selector, text, or element_function.
+ Only one of these arguments must be specified.
+
+ Args:
+ selector: A CSS selector describing the element.
+ text: The element must contains this exact text.
+ element_function: A JavaScript function (as string) that is used
+ to retrieve the element. For example:
+ 'function() { return foo.element; }'.
+ """
+ attr = {'automatically_record_interaction': False}
+ _FillElementSelector(attr, selector, text, element_function)
+ self.RunAction(ClickElementAction(attr))
+
def _FillElementSelector(attr, selector=None, text=None, element_function=None):
count = 0
« no previous file with comments | « tools/perf/page_sets/webrtc_cases.py ('k') | tools/telemetry/telemetry/page/actions/action_runner_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698