Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 from telemetry.page import page as page_module | 4 from telemetry.page import page as page_module |
| 5 from telemetry.page import page_set as page_set_module | 5 from telemetry.page import page_set as page_set_module |
| 6 | 6 |
| 7 class PolymerPage(page_module.Page): | 7 class PolymerPage(page_module.Page): |
| 8 | 8 |
| 9 def __init__(self, url, page_set): | 9 def __init__(self, url, page_set, run_no_page_interactions): |
| 10 """ Base class for all polymer pages. | |
| 11 | |
| 12 Args: | |
| 13 run_no_page_interactions: whether the page will run any interactions after | |
| 14 navigate steps. | |
| 15 """ | |
| 10 super(PolymerPage, self).__init__( | 16 super(PolymerPage, self).__init__( |
| 11 url=url, | 17 url=url, |
| 12 page_set=page_set) | 18 page_set=page_set) |
| 13 self.script_to_evaluate_on_commit = ''' | 19 self.script_to_evaluate_on_commit = ''' |
| 14 document.addEventListener("polymer-ready", function() { | 20 document.addEventListener("polymer-ready", function() { |
| 15 window.__polymer_ready = true; | 21 window.__polymer_ready = true; |
| 16 }); | 22 }); |
| 17 ''' | 23 ''' |
| 24 self._run_no_page_interactions = run_no_page_interactions | |
| 25 | |
| 26 def RunPageInteraction(self, action_runner): | |
| 27 # If a polymer page wants to customize it actions, it should | |
| 28 # overrides the PerformPageInteractions method instead of this method. | |
| 29 if self._run_no_page_interactions: | |
| 30 return | |
| 31 self.PerformPageInteractions(action_runner) | |
| 32 | |
| 33 def PerformPageInteractions(self, action_runner): | |
| 34 """ Override this to perform actions after the page has navigated. """ | |
| 35 pass | |
| 18 | 36 |
| 19 def RunNavigateSteps(self, action_runner): | 37 def RunNavigateSteps(self, action_runner): |
| 20 super(PolymerPage, self).RunNavigateSteps(action_runner) | 38 super(PolymerPage, self).RunNavigateSteps(action_runner) |
| 21 action_runner.WaitForJavaScriptCondition( | 39 action_runner.WaitForJavaScriptCondition( |
| 22 'window.__polymer_ready') | 40 'window.__polymer_ready') |
| 23 | 41 |
| 24 | 42 |
| 25 class PolymerCalculatorPage(PolymerPage): | 43 class PolymerCalculatorPage(PolymerPage): |
| 26 | 44 |
| 27 def __init__(self, page_set): | 45 def __init__(self, page_set, run_no_page_interactions): |
| 28 super(PolymerCalculatorPage, self).__init__( | 46 super(PolymerCalculatorPage, self).__init__( |
| 29 url=('http://www.polymer-project.org/components/paper-calculator/' | 47 url=('http://www.polymer-project.org/components/paper-calculator/' |
| 30 'demo.html'), | 48 'demo.html'), |
| 31 page_set=page_set) | 49 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 32 | 50 |
| 33 def RunPageInteractions(self, action_runner): | 51 def PerformPageInteractions(self, action_runner): |
| 34 self.TapButton(action_runner) | 52 self.TapButton(action_runner) |
| 35 self.SlidePanel(action_runner) | 53 self.SlidePanel(action_runner) |
| 36 | 54 |
| 37 def TapButton(self, action_runner): | 55 def TapButton(self, action_runner): |
| 38 interaction = action_runner.BeginInteraction( | 56 interaction = action_runner.BeginInteraction( |
| 39 'Action_TapAction', is_smooth=True) | 57 'Action_TapAction', is_smooth=True) |
| 40 action_runner.TapElement(element_function=''' | 58 action_runner.TapElement(element_function=''' |
| 41 document.querySelector( | 59 document.querySelector( |
| 42 'body /deep/ #outerPanels' | 60 'body /deep/ #outerPanels' |
| 43 ).querySelector( | 61 ).querySelector( |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 70 '.handle-bar' | 88 '.handle-bar' |
| 71 )''') | 89 )''') |
| 72 action_runner.WaitForJavaScriptCondition(''' | 90 action_runner.WaitForJavaScriptCondition(''' |
| 73 var outer = document.querySelector("body /deep/ #outerPanels"); | 91 var outer = document.querySelector("body /deep/ #outerPanels"); |
| 74 outer.opened || outer.wideMode;''') | 92 outer.opened || outer.wideMode;''') |
| 75 interaction.End() | 93 interaction.End() |
| 76 | 94 |
| 77 | 95 |
| 78 class PolymerShadowPage(PolymerPage): | 96 class PolymerShadowPage(PolymerPage): |
| 79 | 97 |
| 80 def __init__(self, page_set): | 98 def __init__(self, page_set, run_no_page_interactions): |
| 81 super(PolymerShadowPage, self).__init__( | 99 super(PolymerShadowPage, self).__init__( |
| 82 url='http://www.polymer-project.org/components/paper-shadow/demo.html', | 100 url='http://www.polymer-project.org/components/paper-shadow/demo.html', |
| 83 page_set=page_set) | 101 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 84 | 102 |
| 85 def RunPageInteractions(self, action_runner): | 103 def PerformPageInteractions(self, action_runner): |
| 86 action_runner.ExecuteJavaScript( | 104 action_runner.ExecuteJavaScript( |
| 87 "document.getElementById('fab').scrollIntoView()") | 105 "document.getElementById('fab').scrollIntoView()") |
| 88 action_runner.Wait(5) | 106 action_runner.Wait(5) |
| 89 self.AnimateShadow(action_runner, 'card') | 107 self.AnimateShadow(action_runner, 'card') |
| 90 #FIXME(wiltzius) disabling until this issue is fixed: | 108 #FIXME(wiltzius) disabling until this issue is fixed: |
| 91 # https://github.com/Polymer/paper-shadow/issues/12 | 109 # https://github.com/Polymer/paper-shadow/issues/12 |
| 92 #self.AnimateShadow(action_runner, 'fab') | 110 #self.AnimateShadow(action_runner, 'fab') |
| 93 | 111 |
| 94 def AnimateShadow(self, action_runner, eid): | 112 def AnimateShadow(self, action_runner, eid): |
| 95 for i in range(1, 6): | 113 for i in range(1, 6): |
| 96 action_runner.ExecuteJavaScript( | 114 action_runner.ExecuteJavaScript( |
| 97 'document.getElementById("{0}").z = {1}'.format(eid, i)) | 115 'document.getElementById("{0}").z = {1}'.format(eid, i)) |
| 98 action_runner.Wait(1) | 116 action_runner.Wait(1) |
| 99 | 117 |
| 100 | 118 |
| 101 class PolymerSampler(PolymerPage): | 119 class PolymerSampler(PolymerPage): |
| 102 | 120 |
| 103 def __init__(self, page_set, anchor, scrolling_page=False): | 121 def __init__(self, page_set, anchor, run_no_page_interactions, |
| 122 scrolling_page=False): | |
| 104 """Page exercising interactions with a single Paper Sampler subpage. | 123 """Page exercising interactions with a single Paper Sampler subpage. |
| 105 | 124 |
| 106 Args: | 125 Args: |
| 107 page_set: Page set to inforporate this page into. | 126 page_set: Page set to inforporate this page into. |
| 108 anchor: string indicating which subpage to load (matches the element | 127 anchor: string indicating which subpage to load (matches the element |
| 109 type that page is displaying) | 128 type that page is displaying) |
| 110 scrolling_page: Whether scrolling the content pane is relevant to this | 129 scrolling_page: Whether scrolling the content pane is relevant to this |
| 111 content page or not. | 130 content page or not. |
| 112 """ | 131 """ |
| 113 super(PolymerSampler, self).__init__( | 132 super(PolymerSampler, self).__init__( |
| 114 url=('http://www.polymer-project.org/components/%s/demo.html' % anchor), | 133 url=('http://www.polymer-project.org/components/%s/demo.html' % anchor), |
| 115 page_set=page_set) | 134 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 116 self.scrolling_page = scrolling_page | 135 self.scrolling_page = scrolling_page |
| 117 self.iframe_js = 'document' | 136 self.iframe_js = 'document' |
| 118 | 137 |
| 119 def RunNavigateSteps(self, action_runner): | 138 def RunNavigateSteps(self, action_runner): |
| 120 super(PolymerSampler, self).RunNavigateSteps(action_runner) | 139 super(PolymerSampler, self).RunNavigateSteps(action_runner) |
| 121 waitForLoadJS = """ | 140 waitForLoadJS = """ |
| 122 window.Polymer.whenPolymerReady(function() { | 141 window.Polymer.whenPolymerReady(function() { |
| 123 %s.contentWindow.Polymer.whenPolymerReady(function() { | 142 %s.contentWindow.Polymer.whenPolymerReady(function() { |
| 124 window.__polymer_ready = true; | 143 window.__polymer_ready = true; |
| 125 }) | 144 }) |
| 126 }); | 145 }); |
| 127 """ % self.iframe_js | 146 """ % self.iframe_js |
| 128 action_runner.ExecuteJavaScript(waitForLoadJS) | 147 action_runner.ExecuteJavaScript(waitForLoadJS) |
| 129 action_runner.WaitForJavaScriptCondition( | 148 action_runner.WaitForJavaScriptCondition( |
| 130 'window.__polymer_ready') | 149 'window.__polymer_ready') |
| 131 | 150 |
| 132 def RunPageInteractions(self, action_runner): | 151 def PerformPageInteractions(self, action_runner): |
| 133 #TODO(wiltzius) Add interactions for input elements and shadow pages | 152 #TODO(wiltzius) Add interactions for input elements and shadow pages |
| 134 if self.scrolling_page: | 153 if self.scrolling_page: |
| 135 # Only bother scrolling the page if its been marked as worthwhile | 154 # Only bother scrolling the page if its been marked as worthwhile |
| 136 self.ScrollContentPane(action_runner) | 155 self.ScrollContentPane(action_runner) |
| 137 self.TouchEverything(action_runner) | 156 self.TouchEverything(action_runner) |
| 138 | 157 |
| 139 def ScrollContentPane(self, action_runner): | 158 def ScrollContentPane(self, action_runner): |
| 140 element_function = (self.iframe_js + '.querySelector(' | 159 element_function = (self.iframe_js + '.querySelector(' |
| 141 '"core-scroll-header-panel").$.mainContainer') | 160 '"core-scroll-header-panel").$.mainContainer') |
| 142 interaction = action_runner.BeginInteraction('Scroll_Page', is_smooth=True) | 161 interaction = action_runner.BeginInteraction('Scroll_Page', is_smooth=True) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 197 interaction = action_runner.BeginInteraction( | 216 interaction = action_runner.BeginInteraction( |
| 198 'Swipe_Widget', is_smooth=True) | 217 'Swipe_Widget', is_smooth=True) |
| 199 action_runner.SwipeElement(element_function=element_function, | 218 action_runner.SwipeElement(element_function=element_function, |
| 200 left_start_ratio=0.75, | 219 left_start_ratio=0.75, |
| 201 speed_in_pixels_per_second=300) | 220 speed_in_pixels_per_second=300) |
| 202 interaction.End() | 221 interaction.End() |
| 203 | 222 |
| 204 | 223 |
| 205 class PolymerPageSet(page_set_module.PageSet): | 224 class PolymerPageSet(page_set_module.PageSet): |
| 206 | 225 |
| 207 def __init__(self): | 226 def __init__(self, run_no_page_interactions=False): |
| 208 super(PolymerPageSet, self).__init__( | 227 super(PolymerPageSet, self).__init__( |
| 209 user_agent_type='mobile', | 228 user_agent_type='mobile', |
| 210 archive_data_file='data/polymer.json', | 229 archive_data_file='data/polymer.json', |
| 211 bucket=page_set_module.PUBLIC_BUCKET) | 230 bucket=page_set_module.PUBLIC_BUCKET) |
| 212 | 231 |
| 213 self.AddUserStory(PolymerCalculatorPage(self)) | 232 self.AddUserStory(PolymerCalculatorPage(self, run_no_page_interactions)) |
| 214 self.AddUserStory(PolymerShadowPage(self)) | 233 self.AddUserStory(PolymerShadowPage(self, run_no_page_interactions)) |
| 215 | 234 |
| 216 # Polymer Sampler subpages that are interesting to tap / swipe elements on | 235 # Polymer Sampler subpages that are interesting to tap / swipe elements on |
| 217 TAPPABLE_PAGES = [ | 236 TAPPABLE_PAGES = [ |
| 218 'paper-button', | 237 'paper-button', |
| 219 'paper-checkbox', | 238 'paper-checkbox', |
| 220 'paper-fab', | 239 'paper-fab', |
| 221 'paper-icon-button', | 240 'paper-icon-button', |
| 222 # crbug.com/394756 | 241 # crbug.com/394756 |
| 223 # 'paper-radio-button', | 242 # 'paper-radio-button', |
| 224 #FIXME(wiltzius) Disabling x-shadow until this issue is fixed: | 243 #FIXME(wiltzius) Disabling x-shadow until this issue is fixed: |
| 225 # https://github.com/Polymer/paper-shadow/issues/12 | 244 # https://github.com/Polymer/paper-shadow/issues/12 |
| 226 #'paper-shadow', | 245 #'paper-shadow', |
| 227 'paper-tabs', | 246 'paper-tabs', |
| 228 'paper-toggle-button', | 247 'paper-toggle-button', |
| 229 ] | 248 ] |
| 230 for p in TAPPABLE_PAGES: | 249 for p in TAPPABLE_PAGES: |
| 231 self.AddUserStory(PolymerSampler(self, p)) | 250 self.AddUserStory(PolymerSampler( |
| 251 self, p, run_no_page_interactions=run_no_page_interactions)) | |
| 232 | 252 |
| 233 # Polymer Sampler subpages that are interesting to scroll | 253 # Polymer Sampler subpages that are interesting to scroll |
| 234 SCROLLABLE_PAGES = [ | 254 SCROLLABLE_PAGES = [ |
| 235 'core-scroll-header-panel', | 255 'core-scroll-header-panel', |
| 236 ] | 256 ] |
| 237 for p in SCROLLABLE_PAGES: | 257 for p in SCROLLABLE_PAGES: |
| 238 self.AddUserStory(PolymerSampler(self, p, scrolling_page=True)) | 258 self.AddUserStory(PolymerSampler( |
| 259 self, p, run_no_page_interactions=run_no_page_interactions, | |
| 260 scrolling_page=True)) | |
| 261 | |
| 262 for page in self: | |
| 263 assert (page.__class__.RunPageInteractions == | |
| 264 PolymerPage.RunPageInteractions), ( | |
| 265 'Pages in this page set must not override KeySilkCasesPage\' ' | |
|
sullivan
2015/02/16 02:03:15
s/KeySilkCasesPage/PolymerPage/
| |
| 266 'RunPageInteractions method.') | |
| OLD | NEW |