1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry import benchmark 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.core import exceptions 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.core import util 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from telemetry.core.platform import tracing_category_filter 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from telemetry.core.platform import tracing_options 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)from telemetry.page.actions import action_runner as action_runner_module 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.page.actions import page_action 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.timeline import model 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)from telemetry.unittest import tab_test_case 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)from telemetry.web_perf import timeline_interaction_record as tir_module 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ActionRunnerInteractionTest(tab_test_case.TabTestCase): 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetInteractionRecords(self, trace_data): 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch timeline_model = model.TimelineModel(trace_data) 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch renderer_thread = timeline_model.GetRendererThreadFromTabId(self._tab.id) 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return [ 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tir_module.TimelineInteractionRecord.FromAsyncEvent(e) 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for e in renderer_thread.async_slices 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if tir_module.IsTimelineInteractionRecord(e.name) 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ] 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def VerifyIssuingInteractionRecords(self, **interaction_kwargs): 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.Navigate('interaction_enabled_page.html') 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.Wait(1) 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) options = tracing_options.TracingOptions() 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) options.enable_chrome_trace = True 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self._browser.platform.tracing_controller.Start( 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) options, tracing_category_filter.CreateNoOverheadFilter()) 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch interaction = action_runner.BeginInteraction('InteractionName', 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch **interaction_kwargs) 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) interaction.End() 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) trace_data = self._browser.platform.tracing_controller.Stop() 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch records = self.GetInteractionRecords(trace_data) 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertEqual( 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1, len(records), 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'Failed to issue the interaction record on the tracing timeline.' 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ' Trace data:\n%s' % repr(trace_data.EventData())) 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertEqual('InteractionName', records[0].label) 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for attribute_name in interaction_kwargs: 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(getattr(records[0], attribute_name)) 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @benchmark.Disabled('chromeos') 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def testIssuingMultipleMeasurementInteractionRecords(self): 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.VerifyIssuingInteractionRecords(is_fast=True) 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.VerifyIssuingInteractionRecords(is_responsive=True) 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.VerifyIssuingInteractionRecords(is_smooth=True) 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.VerifyIssuingInteractionRecords(is_fast=True, is_smooth=True) 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ActionRunnerTest(tab_test_case.TabTestCase): 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) def testExecuteJavaScript(self): 6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self.Navigate('blank.html') 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) action_runner.ExecuteJavaScript('var testing = 42;') 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self.assertEqual(42, self._tab.EvaluateJavaScript('testing')) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) def testWaitForNavigate(self): 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self.Navigate('page_with_link.html') 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ClickElement('#clickme') 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) action_runner.WaitForNavigate() 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self.assertTrue(self._tab.EvaluateJavaScript( 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 'document.readyState == "interactive" || ' 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 'document.readyState == "complete"')) 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual( 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self._tab.EvaluateJavaScript('document.location.pathname;'), 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) '/blank.html') 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testWait(self): 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab) 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('blank.html') 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'window.setTimeout(function() { window.testing = 101; }, 50);') 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.Wait(0.1) 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(101, self._tab.EvaluateJavaScript('window.testing')) 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'window.setTimeout(function() { window.testing = 102; }, 100);') 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.Wait(0.2) 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(102, self._tab.EvaluateJavaScript('window.testing')) 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testWaitForJavaScriptCondition(self): 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('blank.html') 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('window.testing = 219;') 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.WaitForJavaScriptCondition( 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'window.testing == 219', timeout_in_seconds=0.1) 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'window.setTimeout(function() { window.testing = 220; }, 50);') 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.WaitForJavaScriptCondition( 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'window.testing == 220', timeout_in_seconds=0.1) 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(220, self._tab.EvaluateJavaScript('window.testing')) 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testWaitForElement(self): 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('blank.html') 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) '(function() {' 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' var el = document.createElement("div");' 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' el.id = "test1";' 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' el.textContent = "foo";' 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' document.body.appendChild(el);' 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) '})()') 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.WaitForElement('#test1', timeout_in_seconds=0.1) 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.WaitForElement(text='foo', timeout_in_seconds=0.1) 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.WaitForElement( 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) element_function='document.getElementById("test1")') 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'window.setTimeout(function() {' 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' var el = document.createElement("div");' 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' el.id = "test2";' 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' document.body.appendChild(el);' 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) '}, 50)') 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.WaitForElement('#test2', timeout_in_seconds=0.1) 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'window.setTimeout(function() {' 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' document.getElementById("test2").textContent = "bar";' 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) '}, 50)') 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.WaitForElement(text='bar', timeout_in_seconds=0.1) 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'window.setTimeout(function() {' 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' var el = document.createElement("div");' 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' el.id = "test3";' 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' document.body.appendChild(el);' 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) '}, 50)') 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.WaitForElement( 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) element_function='document.getElementById("test3")') 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testWaitForElementWithWrongText(self): 14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('blank.html') 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript( 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) '(function() {' 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' var el = document.createElement("div");' 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' el.id = "test1";' 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' el.textContent = "foo";' 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ' document.body.appendChild(el);' 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) '})()') 1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.WaitForElement('#test1', timeout_in_seconds=0.2) 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def WaitForElement(): 1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) action_runner.WaitForElement(text='oo', timeout_in_seconds=0.2) 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertRaises(util.TimeoutException, WaitForElement) 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testClickElement(self): 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('page_with_clickables.html') 16503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 16603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('valueSettableByTest = 1;') 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ClickElement('#test') 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(1, action_runner.EvaluateJavaScript('valueToTest')) 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('valueSettableByTest = 2;') 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ClickElement(text='Click/tap me') 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(2, action_runner.EvaluateJavaScript('valueToTest')) 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('valueSettableByTest = 3;') 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ClickElement( 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) element_function='document.body.firstElementChild;') 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(3, action_runner.EvaluateJavaScript('valueToTest')) 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def WillFail(): 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ClickElement('#notfound') 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertRaises(exceptions.EvaluateException, WillFail) 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @benchmark.Disabled('debug') 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testTapElement(self): 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('page_with_clickables.html') 18803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 18903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('valueSettableByTest = 1;') 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.TapElement('#test') 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(1, action_runner.EvaluateJavaScript('valueToTest')) 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('valueSettableByTest = 2;') 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.TapElement(text='Click/tap me') 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(2, action_runner.EvaluateJavaScript('valueToTest')) 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.ExecuteJavaScript('valueSettableByTest = 3;') 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.TapElement( 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) element_function='document.body.firstElementChild') 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertEqual(3, action_runner.EvaluateJavaScript('valueToTest')) 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def WillFail(): 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.TapElement('#notfound') 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertRaises(exceptions.EvaluateException, WillFail) 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def testScroll(self): 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if not page_action.IsGestureSourceTypeSupported( 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._tab, 'touch'): 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.Navigate('page_with_swipeables.html') 21403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 21503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch action_runner.ScrollElement( 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch selector='#left-right', direction='right', left_start_ratio=0.9) 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(action_runner.EvaluateJavaScript( 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'document.querySelector("#left-right").scrollLeft') > 75) 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch action_runner.ScrollElement( 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch selector='#top-bottom', direction='down', top_start_ratio=0.9) 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(action_runner.EvaluateJavaScript( 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'document.querySelector("#top-bottom").scrollTop') > 75) 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch action_runner.ScrollPage(direction='right', left_start_ratio=0.9, 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch distance=100) 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertTrue(action_runner.EvaluateJavaScript( 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'document.body.scrollLeft') > 75) 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def testSwipe(self): 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if not page_action.IsGestureSourceTypeSupported( 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self._tab, 'touch'): 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.Navigate('page_with_swipeables.html') 23703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) action_runner = action_runner_module.ActionRunner(self._tab, 23803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) skip_waits=True) 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.SwipeElement( 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) selector='#left-right', direction='left', left_start_ratio=0.9) 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertTrue(action_runner.EvaluateJavaScript( 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'document.querySelector("#left-right").scrollLeft') > 75) 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.SwipeElement( 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) selector='#top-bottom', direction='up', top_start_ratio=0.9) 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertTrue(action_runner.EvaluateJavaScript( 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'document.querySelector("#top-bottom").scrollTop') > 75) 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.SwipePage(direction='left', left_start_ratio=0.9) 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) self.assertTrue(action_runner.EvaluateJavaScript( 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'document.body.scrollLeft') > 75) 252