aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/actions/mouse_click.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/internal/actions/mouse_click.py')
-rw-r--r--catapult/telemetry/telemetry/internal/actions/mouse_click.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/actions/mouse_click.py b/catapult/telemetry/telemetry/internal/actions/mouse_click.py
new file mode 100644
index 00000000..3eec57bc
--- /dev/null
+++ b/catapult/telemetry/telemetry/internal/actions/mouse_click.py
@@ -0,0 +1,36 @@
+# Copyright 2015 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.
+
+from telemetry.internal.actions import page_action
+from telemetry.internal.actions import utils
+
+
+class MouseClickAction(page_action.PageAction):
+ def __init__(self, selector=None):
+ super(MouseClickAction, self).__init__()
+ self._selector = selector
+
+ def WillRunAction(self, tab):
+ """Load the mouse click JS code prior to running the action."""
+ super(MouseClickAction, self).WillRunAction(tab)
+ utils.InjectJavaScript(tab, 'mouse_click.js')
+ tab.ExecuteJavaScript("""
+ window.__mouseClickActionDone = false;
+ window.__mouseClickAction = new __MouseClickAction(function() {
+ window.__mouseClickActionDone = true;
+ });""")
+
+ def RunAction(self, tab):
+ code = '''
+ function(element, info) {
+ if (!element) {
+ throw Error('Cannot find element: ' + info);
+ }
+ window.__mouseClickAction.start({
+ element: element
+ });
+ }'''
+ page_action.EvaluateCallbackWithElement(
+ tab, code, selector=self._selector)
+ tab.WaitForJavaScriptExpression('window.__mouseClickActionDone', 60)