| 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 | 7 |
| 8 class KeySilkCasesPage(page_module.Page): | 8 class KeySilkCasesPage(page_module.Page): |
| 9 | 9 |
| 10 def __init__(self, url, page_set): | 10 def __init__(self, url, page_set, run_no_page_interactions): |
| 11 """ Base class for all key silk cases pages. |
| 12 |
| 13 Args: |
| 14 run_no_page_interactions: whether the page will run any interactions after |
| 15 navigate steps. |
| 16 """ |
| 11 super(KeySilkCasesPage, self).__init__( | 17 super(KeySilkCasesPage, self).__init__( |
| 12 url=url, page_set=page_set, credentials_path = 'data/credentials.json') | 18 url=url, page_set=page_set, credentials_path = 'data/credentials.json') |
| 13 self.user_agent_type = 'mobile' | 19 self.user_agent_type = 'mobile' |
| 14 self.archive_data_file = 'data/key_silk_cases.json' | 20 self.archive_data_file = 'data/key_silk_cases.json' |
| 21 self._run_no_page_interactions = run_no_page_interactions |
| 15 | 22 |
| 16 def RunNavigateSteps(self, action_runner): | 23 def RunNavigateSteps(self, action_runner): |
| 17 super(KeySilkCasesPage, self).RunNavigateSteps(action_runner) | 24 super(KeySilkCasesPage, self).RunNavigateSteps(action_runner) |
| 18 action_runner.Wait(2) | 25 action_runner.Wait(2) |
| 19 | 26 |
| 20 def RunPageInteractions(self, action_runner): | 27 def RunPageInteractions(self, action_runner): |
| 28 # If a key silk case page wants to customize it actions, it should |
| 29 # overrides the PerformPageInteractions method instead of this method. |
| 30 if self._run_no_page_interactions: |
| 31 return |
| 32 self.PerformPageInteractions(action_runner) |
| 33 |
| 34 def PerformPageInteractions(self, action_runner): |
| 35 """ Perform interactions on page after navigate steps. |
| 36 Override this to define custom actions to be run after navigate steps. |
| 37 """ |
| 21 interaction = action_runner.BeginGestureInteraction( | 38 interaction = action_runner.BeginGestureInteraction( |
| 22 'ScrollAction', is_smooth=True) | 39 'ScrollAction', is_smooth=True) |
| 23 action_runner.ScrollPage() | 40 action_runner.ScrollPage() |
| 24 interaction.End() | 41 interaction.End() |
| 25 | 42 |
| 26 | 43 |
| 27 class Page1(KeySilkCasesPage): | 44 class Page1(KeySilkCasesPage): |
| 28 | 45 |
| 29 """ Why: Infinite scroll. Brings out all of our perf issues. """ | 46 """ Why: Infinite scroll. Brings out all of our perf issues. """ |
| 30 | 47 |
| 31 def __init__(self, page_set): | 48 def __init__(self, page_set, run_no_page_interactions): |
| 32 super(Page1, self).__init__( | 49 super(Page1, self).__init__( |
| 33 url='http://groupcloned.com/test/plain/list-recycle-transform.html', | 50 url='http://groupcloned.com/test/plain/list-recycle-transform.html', |
| 34 page_set=page_set) | 51 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 35 | 52 |
| 36 def RunPageInteractions(self, action_runner): | 53 def PerformPageInteractions(self, action_runner): |
| 37 interaction = action_runner.BeginGestureInteraction( | 54 interaction = action_runner.BeginGestureInteraction( |
| 38 'ScrollAction', is_smooth=True) | 55 'ScrollAction', is_smooth=True) |
| 39 action_runner.ScrollElement(selector='#scrollable') | 56 action_runner.ScrollElement(selector='#scrollable') |
| 40 interaction.End() | 57 interaction.End() |
| 41 | 58 |
| 42 | 59 |
| 43 class Page2(KeySilkCasesPage): | 60 class Page2(KeySilkCasesPage): |
| 44 | 61 |
| 45 """ Why: Brings out layer management bottlenecks. """ | 62 """ Why: Brings out layer management bottlenecks. """ |
| 46 | 63 |
| 47 def __init__(self, page_set): | 64 def __init__(self, page_set, run_no_page_interactions): |
| 48 super(Page2, self).__init__( | 65 super(Page2, self).__init__( |
| 49 url='http://groupcloned.com/test/plain/list-animation-simple.html', | 66 url='http://groupcloned.com/test/plain/list-animation-simple.html', |
| 50 page_set=page_set) | 67 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 51 | 68 |
| 52 def RunPageInteractions(self, action_runner): | 69 def PerformPageInteractions(self, action_runner): |
| 53 action_runner.Wait(2) | 70 action_runner.Wait(2) |
| 54 | 71 |
| 55 | 72 |
| 56 class Page3(KeySilkCasesPage): | 73 class Page3(KeySilkCasesPage): |
| 57 | 74 |
| 58 """ | 75 """ |
| 59 Why: Best-known method for fake sticky. Janks sometimes. Interacts badly with | 76 Why: Best-known method for fake sticky. Janks sometimes. Interacts badly with |
| 60 compositor scrolls. | 77 compositor scrolls. |
| 61 """ | 78 """ |
| 62 | 79 |
| 63 def __init__(self, page_set): | 80 def __init__(self, page_set, run_no_page_interactions): |
| 64 super(Page3, self).__init__( | 81 super(Page3, self).__init__( |
| 65 # pylint: disable=C0301 | 82 # pylint: disable=C0301 |
| 66 url='http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibi
lity.html', | 83 url='http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibi
lity.html', |
| 67 page_set=page_set) | 84 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 68 | 85 |
| 69 def RunPageInteractions(self, action_runner): | 86 def PerformPageInteractions(self, action_runner): |
| 70 interaction = action_runner.BeginGestureInteraction( | 87 interaction = action_runner.BeginGestureInteraction( |
| 71 'ScrollAction', is_smooth=True) | 88 'ScrollAction', is_smooth=True) |
| 72 action_runner.ScrollElement(selector='#container') | 89 action_runner.ScrollElement(selector='#container') |
| 73 interaction.End() | 90 interaction.End() |
| 74 | 91 |
| 75 | 92 |
| 76 class Page4(KeySilkCasesPage): | 93 class Page4(KeySilkCasesPage): |
| 77 | 94 |
| 78 """ | 95 """ |
| 79 Why: Card expansion: only the card should repaint, but in reality lots of | 96 Why: Card expansion: only the card should repaint, but in reality lots of |
| 80 storms happen. | 97 storms happen. |
| 81 """ | 98 """ |
| 82 | 99 |
| 83 def __init__(self, page_set): | 100 def __init__(self, page_set, run_no_page_interactions): |
| 84 super(Page4, self).__init__( | 101 super(Page4, self).__init__( |
| 85 url='http://jsfiddle.net/3yDKh/15/show/', | 102 url='http://jsfiddle.net/3yDKh/15/show/', |
| 86 page_set=page_set) | 103 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 87 | 104 |
| 88 def RunPageInteractions(self, action_runner): | 105 def PerformPageInteractions(self, action_runner): |
| 89 action_runner.Wait(3) | 106 action_runner.Wait(3) |
| 90 | 107 |
| 91 | 108 |
| 92 class Page5(KeySilkCasesPage): | 109 class Page5(KeySilkCasesPage): |
| 93 | 110 |
| 94 """ | 111 """ |
| 95 Why: Card expansion with animated contents, using will-change on the card | 112 Why: Card expansion with animated contents, using will-change on the card |
| 96 """ | 113 """ |
| 97 | 114 |
| 98 def __init__(self, page_set): | 115 def __init__(self, page_set, run_no_page_interactions): |
| 99 super(Page5, self).__init__( | 116 super(Page5, self).__init__( |
| 100 url='http://jsfiddle.net/jx5De/14/show/', | 117 url='http://jsfiddle.net/jx5De/14/show/', |
| 101 page_set=page_set) | 118 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 102 | 119 |
| 103 self.gpu_raster = True | 120 self.gpu_raster = True |
| 104 | 121 |
| 105 def RunPageInteractions(self, action_runner): | 122 def PerformPageInteractions(self, action_runner): |
| 106 action_runner.Wait(4) | 123 action_runner.Wait(4) |
| 107 | 124 |
| 108 | 125 |
| 109 class Page6(KeySilkCasesPage): | 126 class Page6(KeySilkCasesPage): |
| 110 | 127 |
| 111 """ | 128 """ |
| 112 Why: Card fly-in: It should be fast to animate in a bunch of cards using | 129 Why: Card fly-in: It should be fast to animate in a bunch of cards using |
| 113 margin-top and letting layout do the rest. | 130 margin-top and letting layout do the rest. |
| 114 """ | 131 """ |
| 115 | 132 |
| 116 def __init__(self, page_set): | 133 def __init__(self, page_set, run_no_page_interactions): |
| 117 super(Page6, self).__init__( | 134 super(Page6, self).__init__( |
| 118 url='http://jsfiddle.net/3yDKh/16/show/', | 135 url='http://jsfiddle.net/3yDKh/16/show/', |
| 119 page_set=page_set) | 136 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 120 | 137 |
| 121 def RunPageInteractions(self, action_runner): | 138 def PerformPageInteractions(self, action_runner): |
| 122 action_runner.Wait(3) | 139 action_runner.Wait(3) |
| 123 | 140 |
| 124 | 141 |
| 125 class Page7(KeySilkCasesPage): | 142 class Page7(KeySilkCasesPage): |
| 126 | 143 |
| 127 """ | 144 """ |
| 128 Why: Image search expands a spacer div when you click an image to accomplish | 145 Why: Image search expands a spacer div when you click an image to accomplish |
| 129 a zoomin effect. Each image has a layer. Even so, this triggers a lot of | 146 a zoomin effect. Each image has a layer. Even so, this triggers a lot of |
| 130 unnecessary repainting. | 147 unnecessary repainting. |
| 131 """ | 148 """ |
| 132 | 149 |
| 133 def __init__(self, page_set): | 150 def __init__(self, page_set, run_no_page_interactions): |
| 134 super(Page7, self).__init__( | 151 super(Page7, self).__init__( |
| 135 url='http://jsfiddle.net/R8DX9/4/show/', | 152 url='http://jsfiddle.net/R8DX9/4/show/', |
| 136 page_set=page_set) | 153 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 137 | 154 |
| 138 def RunPageInteractions(self, action_runner): | 155 def PerformPageInteractions(self, action_runner): |
| 139 action_runner.Wait(3) | 156 action_runner.Wait(3) |
| 140 | 157 |
| 141 | 158 |
| 142 class Page8(KeySilkCasesPage): | 159 class Page8(KeySilkCasesPage): |
| 143 | 160 |
| 144 """ | 161 """ |
| 145 Why: Swipe to dismiss of an element that has a fixed-position child that is | 162 Why: Swipe to dismiss of an element that has a fixed-position child that is |
| 146 its pseudo-sticky header. Brings out issues with layer creation and | 163 its pseudo-sticky header. Brings out issues with layer creation and |
| 147 repainting. | 164 repainting. |
| 148 """ | 165 """ |
| 149 | 166 |
| 150 def __init__(self, page_set): | 167 def __init__(self, page_set, run_no_page_interactions): |
| 151 super(Page8, self).__init__( | 168 super(Page8, self).__init__( |
| 152 url='http://jsfiddle.net/rF9Gh/7/show/', | 169 url='http://jsfiddle.net/rF9Gh/7/show/', |
| 153 page_set=page_set) | 170 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 154 | 171 |
| 155 def RunPageInteractions(self, action_runner): | 172 def PerformPageInteractions(self, action_runner): |
| 156 action_runner.Wait(3) | 173 action_runner.Wait(3) |
| 157 | 174 |
| 158 | 175 |
| 159 class Page9(KeySilkCasesPage): | 176 class Page9(KeySilkCasesPage): |
| 160 | 177 |
| 161 """ | 178 """ |
| 162 Why: Horizontal and vertical expansion of a card that is cheap to layout but | 179 Why: Horizontal and vertical expansion of a card that is cheap to layout but |
| 163 costly to rasterize. | 180 costly to rasterize. |
| 164 """ | 181 """ |
| 165 | 182 |
| 166 def __init__(self, page_set): | 183 def __init__(self, page_set, run_no_page_interactions): |
| 167 super(Page9, self).__init__( | 184 super(Page9, self).__init__( |
| 168 url='http://jsfiddle.net/TLXLu/3/show/', | 185 url='http://jsfiddle.net/TLXLu/3/show/', |
| 169 page_set=page_set) | 186 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 170 | 187 |
| 171 self.gpu_raster = True | 188 self.gpu_raster = True |
| 172 | 189 |
| 173 def RunPageInteractions(self, action_runner): | 190 def PerformPageInteractions(self, action_runner): |
| 174 action_runner.Wait(4) | 191 action_runner.Wait(4) |
| 175 | 192 |
| 176 | 193 |
| 177 class Page10(KeySilkCasesPage): | 194 class Page10(KeySilkCasesPage): |
| 178 | 195 |
| 179 """ | 196 """ |
| 180 Why: Vertical Expansion of a card that is cheap to layout but costly to | 197 Why: Vertical Expansion of a card that is cheap to layout but costly to |
| 181 rasterize. | 198 rasterize. |
| 182 """ | 199 """ |
| 183 | 200 |
| 184 def __init__(self, page_set): | 201 def __init__(self, page_set, run_no_page_interactions): |
| 185 super(Page10, self).__init__( | 202 super(Page10, self).__init__( |
| 186 url='http://jsfiddle.net/cKB9D/7/show/', | 203 url='http://jsfiddle.net/cKB9D/7/show/', |
| 187 page_set=page_set) | 204 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 188 | 205 |
| 189 self.gpu_raster = True | 206 self.gpu_raster = True |
| 190 | 207 |
| 191 def RunPageInteractions(self, action_runner): | 208 def PerformPageInteractions(self, action_runner): |
| 192 action_runner.Wait(4) | 209 action_runner.Wait(4) |
| 193 | 210 |
| 194 | 211 |
| 195 class Page11(KeySilkCasesPage): | 212 class Page11(KeySilkCasesPage): |
| 196 | 213 |
| 197 """ | 214 """ |
| 198 Why: Parallax effect is common on photo-viewer-like applications, overloading | 215 Why: Parallax effect is common on photo-viewer-like applications, overloading |
| 199 software rasterization | 216 software rasterization |
| 200 """ | 217 """ |
| 201 | 218 |
| 202 def __init__(self, page_set): | 219 def __init__(self, page_set, run_no_page_interactions): |
| 203 super(Page11, self).__init__( | 220 super(Page11, self).__init__( |
| 204 url='http://jsfiddle.net/vBQHH/11/show/', | 221 url='http://jsfiddle.net/vBQHH/11/show/', |
| 205 page_set=page_set) | 222 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 206 | 223 |
| 207 self.gpu_raster = True | 224 self.gpu_raster = True |
| 208 | 225 |
| 209 def RunPageInteractions(self, action_runner): | 226 def PerformPageInteractions(self, action_runner): |
| 210 action_runner.Wait(4) | 227 action_runner.Wait(4) |
| 211 | 228 |
| 212 | 229 |
| 213 class Page12(KeySilkCasesPage): | 230 class Page12(KeySilkCasesPage): |
| 214 | 231 |
| 215 """ Why: Addressing paint storms during coordinated animations. """ | 232 """ Why: Addressing paint storms during coordinated animations. """ |
| 216 | 233 |
| 217 def __init__(self, page_set): | 234 def __init__(self, page_set, run_no_page_interactions): |
| 218 super(Page12, self).__init__( | 235 super(Page12, self).__init__( |
| 219 url='http://jsfiddle.net/ugkd4/10/show/', | 236 url='http://jsfiddle.net/ugkd4/10/show/', |
| 220 page_set=page_set) | 237 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 221 | 238 |
| 222 def RunPageInteractions(self, action_runner): | 239 def PerformPageInteractions(self, action_runner): |
| 223 action_runner.Wait(5) | 240 action_runner.Wait(5) |
| 224 | 241 |
| 225 | 242 |
| 226 class Page13(KeySilkCasesPage): | 243 class Page13(KeySilkCasesPage): |
| 227 | 244 |
| 228 """ Why: Mask transitions are common mobile use cases. """ | 245 """ Why: Mask transitions are common mobile use cases. """ |
| 229 | 246 |
| 230 def __init__(self, page_set): | 247 def __init__(self, page_set, run_no_page_interactions): |
| 231 super(Page13, self).__init__( | 248 super(Page13, self).__init__( |
| 232 url='http://jsfiddle.net/xLuvC/1/show/', | 249 url='http://jsfiddle.net/xLuvC/1/show/', |
| 233 page_set=page_set) | 250 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 234 | 251 |
| 235 self.gpu_raster = True | 252 self.gpu_raster = True |
| 236 | 253 |
| 237 def RunPageInteractions(self, action_runner): | 254 def PerformPageInteractions(self, action_runner): |
| 238 action_runner.Wait(4) | 255 action_runner.Wait(4) |
| 239 | 256 |
| 240 | 257 |
| 241 class Page14(KeySilkCasesPage): | 258 class Page14(KeySilkCasesPage): |
| 242 | 259 |
| 243 """ Why: Card expansions with images and text are pretty and common. """ | 260 """ Why: Card expansions with images and text are pretty and common. """ |
| 244 | 261 |
| 245 def __init__(self, page_set): | 262 def __init__(self, page_set, run_no_page_interactions): |
| 246 super(Page14, self).__init__( | 263 super(Page14, self).__init__( |
| 247 url='http://jsfiddle.net/bNp2h/3/show/', | 264 url='http://jsfiddle.net/bNp2h/3/show/', |
| 248 page_set=page_set) | 265 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 249 | 266 |
| 250 self.gpu_raster = True | 267 self.gpu_raster = True |
| 251 | 268 |
| 252 def RunPageInteractions(self, action_runner): | 269 def PerformPageInteractions(self, action_runner): |
| 253 action_runner.Wait(4) | 270 action_runner.Wait(4) |
| 254 | 271 |
| 255 | 272 |
| 256 class Page15(KeySilkCasesPage): | 273 class Page15(KeySilkCasesPage): |
| 257 | 274 |
| 258 """ Why: Coordinated animations for expanding elements. """ | 275 """ Why: Coordinated animations for expanding elements. """ |
| 259 | 276 |
| 260 def __init__(self, page_set): | 277 def __init__(self, page_set, run_no_page_interactions): |
| 261 super(Page15, self).__init__( | 278 super(Page15, self).__init__( |
| 262 url='file://key_silk_cases/font_wipe.html', | 279 url='file://key_silk_cases/font_wipe.html', |
| 263 page_set=page_set) | 280 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 264 | 281 |
| 265 def RunPageInteractions(self, action_runner): | 282 def PerformPageInteractions(self, action_runner): |
| 266 action_runner.Wait(5) | 283 action_runner.Wait(5) |
| 267 | 284 |
| 268 | 285 |
| 269 class Page16(KeySilkCasesPage): | 286 class Page16(KeySilkCasesPage): |
| 270 | 287 |
| 271 def __init__(self, page_set): | 288 def __init__(self, page_set, run_no_page_interactions): |
| 272 super(Page16, self).__init__( | 289 super(Page16, self).__init__( |
| 273 url='file://key_silk_cases/inbox_app.html?swipe_to_dismiss', | 290 url='file://key_silk_cases/inbox_app.html?swipe_to_dismiss', |
| 274 page_set=page_set) | 291 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 275 | 292 |
| 276 def SwipeToDismiss(self, action_runner): | 293 def SwipeToDismiss(self, action_runner): |
| 277 interaction = action_runner.BeginGestureInteraction( | 294 interaction = action_runner.BeginGestureInteraction( |
| 278 'SwipeAction', is_smooth=True) | 295 'SwipeAction', is_smooth=True) |
| 279 action_runner.SwipeElement( | 296 action_runner.SwipeElement( |
| 280 left_start_ratio=0.8, top_start_ratio=0.2, | 297 left_start_ratio=0.8, top_start_ratio=0.2, |
| 281 direction='left', distance=400, speed_in_pixels_per_second=5000, | 298 direction='left', distance=400, speed_in_pixels_per_second=5000, |
| 282 element_function='document.getElementsByClassName("message")[2]') | 299 element_function='document.getElementsByClassName("message")[2]') |
| 283 interaction.End() | 300 interaction.End() |
| 284 | 301 |
| 285 def RunPageInteractions(self, action_runner): | 302 def PerformPageInteractions(self, action_runner): |
| 286 self.SwipeToDismiss(action_runner) | 303 self.SwipeToDismiss(action_runner) |
| 287 | 304 |
| 288 | 305 |
| 289 class Page17(KeySilkCasesPage): | 306 class Page17(KeySilkCasesPage): |
| 290 | 307 |
| 291 def __init__(self, page_set): | 308 def __init__(self, page_set, run_no_page_interactions): |
| 292 super(Page17, self).__init__( | 309 super(Page17, self).__init__( |
| 293 url='file://key_silk_cases/inbox_app.html?stress_hidey_bars', | 310 url='file://key_silk_cases/inbox_app.html?stress_hidey_bars', |
| 294 page_set=page_set) | 311 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 295 | 312 |
| 296 def RunPageInteractions(self, action_runner): | 313 def PerformPageInteractions(self, action_runner): |
| 297 self.StressHideyBars(action_runner) | 314 self.StressHideyBars(action_runner) |
| 298 | 315 |
| 299 def StressHideyBars(self, action_runner): | 316 def StressHideyBars(self, action_runner): |
| 300 interaction = action_runner.BeginGestureInteraction( | 317 interaction = action_runner.BeginGestureInteraction( |
| 301 'ScrollAction', is_smooth=True) | 318 'ScrollAction', is_smooth=True) |
| 302 action_runner.ScrollElement( | 319 action_runner.ScrollElement( |
| 303 selector='#messages', direction='down', speed_in_pixels_per_second=200) | 320 selector='#messages', direction='down', speed_in_pixels_per_second=200) |
| 304 interaction.End() | 321 interaction.End() |
| 305 interaction = action_runner.BeginGestureInteraction( | 322 interaction = action_runner.BeginGestureInteraction( |
| 306 'ScrollAction', is_smooth=True) | 323 'ScrollAction', is_smooth=True) |
| 307 action_runner.ScrollElement( | 324 action_runner.ScrollElement( |
| 308 selector='#messages', direction='up', speed_in_pixels_per_second=200) | 325 selector='#messages', direction='up', speed_in_pixels_per_second=200) |
| 309 interaction.End() | 326 interaction.End() |
| 310 interaction = action_runner.BeginGestureInteraction( | 327 interaction = action_runner.BeginGestureInteraction( |
| 311 'ScrollAction', is_smooth=True) | 328 'ScrollAction', is_smooth=True) |
| 312 action_runner.ScrollElement( | 329 action_runner.ScrollElement( |
| 313 selector='#messages', direction='down', speed_in_pixels_per_second=200) | 330 selector='#messages', direction='down', speed_in_pixels_per_second=200) |
| 314 interaction.End() | 331 interaction.End() |
| 315 | 332 |
| 316 | 333 |
| 317 class Page18(KeySilkCasesPage): | 334 class Page18(KeySilkCasesPage): |
| 318 | 335 |
| 319 def __init__(self, page_set): | 336 def __init__(self, page_set, run_no_page_interactions): |
| 320 super(Page18, self).__init__( | 337 super(Page18, self).__init__( |
| 321 url='file://key_silk_cases/inbox_app.html?toggle_drawer', | 338 url='file://key_silk_cases/inbox_app.html?toggle_drawer', |
| 322 page_set=page_set) | 339 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 323 | 340 |
| 324 def RunPageInteractions(self, action_runner): | 341 def PerformPageInteractions(self, action_runner): |
| 325 for _ in xrange(6): | 342 for _ in xrange(6): |
| 326 self.ToggleDrawer(action_runner) | 343 self.ToggleDrawer(action_runner) |
| 327 | 344 |
| 328 def ToggleDrawer(self, action_runner): | 345 def ToggleDrawer(self, action_runner): |
| 329 interaction = action_runner.BeginInteraction( | 346 interaction = action_runner.BeginInteraction( |
| 330 'Action_TapAction', is_smooth=True) | 347 'Action_TapAction', is_smooth=True) |
| 331 action_runner.TapElement('#menu-button') | 348 action_runner.TapElement('#menu-button') |
| 332 action_runner.Wait(1) | 349 action_runner.Wait(1) |
| 333 interaction.End() | 350 interaction.End() |
| 334 | 351 |
| 335 | 352 |
| 336 class Page19(KeySilkCasesPage): | 353 class Page19(KeySilkCasesPage): |
| 337 | 354 |
| 338 def __init__(self, page_set): | 355 def __init__(self, page_set, run_no_page_interactions): |
| 339 super(Page19, self).__init__( | 356 super(Page19, self).__init__( |
| 340 url='file://key_silk_cases/inbox_app.html?slide_drawer', | 357 url='file://key_silk_cases/inbox_app.html?slide_drawer', |
| 341 page_set=page_set) | 358 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 342 | 359 |
| 343 def ToggleDrawer(self, action_runner): | 360 def ToggleDrawer(self, action_runner): |
| 344 interaction = action_runner.BeginGestureInteraction( | 361 interaction = action_runner.BeginGestureInteraction( |
| 345 'TapAction', is_smooth=True) | 362 'TapAction', is_smooth=True) |
| 346 action_runner.TapElement('#menu-button') | 363 action_runner.TapElement('#menu-button') |
| 347 interaction.End() | 364 interaction.End() |
| 348 | 365 |
| 349 interaction = action_runner.BeginInteraction('Wait', is_smooth=True) | 366 interaction = action_runner.BeginInteraction('Wait', is_smooth=True) |
| 350 action_runner.WaitForJavaScriptCondition(''' | 367 action_runner.WaitForJavaScriptCondition(''' |
| 351 document.getElementById("nav-drawer").active && | 368 document.getElementById("nav-drawer").active && |
| 352 document.getElementById("nav-drawer").children[0] | 369 document.getElementById("nav-drawer").children[0] |
| 353 .getBoundingClientRect().left == 0''') | 370 .getBoundingClientRect().left == 0''') |
| 354 interaction.End() | 371 interaction.End() |
| 355 | 372 |
| 356 def RunNavigateSteps(self, action_runner): | 373 def RunNavigateSteps(self, action_runner): |
| 357 super(Page19, self).RunNavigateSteps(action_runner) | 374 super(Page19, self).RunNavigateSteps(action_runner) |
| 358 action_runner.Wait(2) | 375 action_runner.Wait(2) |
| 359 self.ToggleDrawer(action_runner) | 376 self.ToggleDrawer(action_runner) |
| 360 | 377 |
| 361 def RunPageInteractions(self, action_runner): | 378 def PerformPageInteractions(self, action_runner): |
| 362 self.SlideDrawer(action_runner) | 379 self.SlideDrawer(action_runner) |
| 363 | 380 |
| 364 def SlideDrawer(self, action_runner): | 381 def SlideDrawer(self, action_runner): |
| 365 interaction = action_runner.BeginInteraction( | 382 interaction = action_runner.BeginInteraction( |
| 366 'Action_SwipeAction', is_smooth=True) | 383 'Action_SwipeAction', is_smooth=True) |
| 367 action_runner.SwipeElement( | 384 action_runner.SwipeElement( |
| 368 left_start_ratio=0.8, top_start_ratio=0.2, | 385 left_start_ratio=0.8, top_start_ratio=0.2, |
| 369 direction='left', distance=200, | 386 direction='left', distance=200, |
| 370 element_function='document.getElementById("nav-drawer").children[0]') | 387 element_function='document.getElementById("nav-drawer").children[0]') |
| 371 action_runner.WaitForJavaScriptCondition( | 388 action_runner.WaitForJavaScriptCondition( |
| 372 '!document.getElementById("nav-drawer").active') | 389 '!document.getElementById("nav-drawer").active') |
| 373 interaction.End() | 390 interaction.End() |
| 374 | 391 |
| 375 | 392 |
| 376 class Page20(KeySilkCasesPage): | 393 class Page20(KeySilkCasesPage): |
| 377 | 394 |
| 378 """ Why: Shadow DOM infinite scrolling. """ | 395 """ Why: Shadow DOM infinite scrolling. """ |
| 379 | 396 |
| 380 def __init__(self, page_set): | 397 def __init__(self, page_set, run_no_page_interactions): |
| 381 super(Page20, self).__init__( | 398 super(Page20, self).__init__( |
| 382 url='file://key_silk_cases/infinite_scrolling.html', | 399 url='file://key_silk_cases/infinite_scrolling.html', |
| 383 page_set=page_set) | 400 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 384 | 401 |
| 385 def RunPageInteractions(self, action_runner): | 402 def PerformPageInteractions(self, action_runner): |
| 386 interaction = action_runner.BeginGestureInteraction( | 403 interaction = action_runner.BeginGestureInteraction( |
| 387 'ScrollAction', is_smooth=True) | 404 'ScrollAction', is_smooth=True) |
| 388 action_runner.ScrollElement( | 405 action_runner.ScrollElement( |
| 389 selector='#container', speed_in_pixels_per_second=5000) | 406 selector='#container', speed_in_pixels_per_second=5000) |
| 390 interaction.End() | 407 interaction.End() |
| 391 | 408 |
| 392 | 409 |
| 393 class GwsExpansionPage(KeySilkCasesPage): | 410 class GwsExpansionPage(KeySilkCasesPage): |
| 394 """Abstract base class for pages that expand Google knowledge panels.""" | 411 """Abstract base class for pages that expand Google knowledge panels.""" |
| 395 | 412 |
| 396 def NavigateWait(self, action_runner): | 413 def NavigateWait(self, action_runner): |
| 397 super(GwsExpansionPage, self).RunNavigateSteps(action_runner) | 414 super(GwsExpansionPage, self).RunNavigateSteps(action_runner) |
| 398 action_runner.Wait(3) | 415 action_runner.Wait(3) |
| 399 | 416 |
| 400 def ExpandKnowledgeCard(self, action_runner): | 417 def ExpandKnowledgeCard(self, action_runner): |
| 401 # expand card | 418 # expand card |
| 402 interaction = action_runner.BeginInteraction( | 419 interaction = action_runner.BeginInteraction( |
| 403 'Action_TapAction', is_smooth=True) | 420 'Action_TapAction', is_smooth=True) |
| 404 action_runner.TapElement( | 421 action_runner.TapElement( |
| 405 element_function='document.getElementsByClassName("vk_arc")[0]') | 422 element_function='document.getElementsByClassName("vk_arc")[0]') |
| 406 action_runner.Wait(2) | 423 action_runner.Wait(2) |
| 407 interaction.End() | 424 interaction.End() |
| 408 | 425 |
| 409 def ScrollKnowledgeCardToTop(self, action_runner, card_id): | 426 def ScrollKnowledgeCardToTop(self, action_runner, card_id): |
| 410 # scroll until the knowledge card is at the top | 427 # scroll until the knowledge card is at the top |
| 411 action_runner.ExecuteJavaScript( | 428 action_runner.ExecuteJavaScript( |
| 412 "document.getElementById('%s').scrollIntoView()" % card_id) | 429 "document.getElementById('%s').scrollIntoView()" % card_id) |
| 413 | 430 |
| 414 def RunPageInteractions(self, action_runner): | 431 def PerformPageInteractions(self, action_runner): |
| 415 self.ExpandKnowledgeCard(action_runner) | 432 self.ExpandKnowledgeCard(action_runner) |
| 416 | 433 |
| 417 | 434 |
| 418 class GwsGoogleExpansion(GwsExpansionPage): | 435 class GwsGoogleExpansion(GwsExpansionPage): |
| 419 | 436 |
| 420 """ Why: Animating height of a complex content card is common. """ | 437 """ Why: Animating height of a complex content card is common. """ |
| 421 | 438 |
| 422 def __init__(self, page_set): | 439 def __init__(self, page_set, run_no_page_interactions): |
| 423 super(GwsGoogleExpansion, self).__init__( | 440 super(GwsGoogleExpansion, self).__init__( |
| 424 url='http://www.google.com/#q=google', | 441 url='http://www.google.com/#q=google', |
| 425 page_set=page_set) | 442 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 426 | 443 |
| 427 def RunNavigateSteps(self, action_runner): | 444 def RunNavigateSteps(self, action_runner): |
| 428 self.NavigateWait(action_runner) | 445 self.NavigateWait(action_runner) |
| 429 self.ScrollKnowledgeCardToTop(action_runner, 'kno-result') | 446 self.ScrollKnowledgeCardToTop(action_runner, 'kno-result') |
| 430 | 447 |
| 431 | 448 |
| 432 class GwsBoogieExpansion(GwsExpansionPage): | 449 class GwsBoogieExpansion(GwsExpansionPage): |
| 433 | 450 |
| 434 """ Why: Same case as Google expansion but text-heavy rather than image. """ | 451 """ Why: Same case as Google expansion but text-heavy rather than image. """ |
| 435 | 452 |
| 436 def __init__(self, page_set): | 453 def __init__(self, page_set, run_no_page_interactions): |
| 437 super(GwsBoogieExpansion, self).__init__( | 454 super(GwsBoogieExpansion, self).__init__( |
| 438 url='https://www.google.com/search?hl=en&q=define%3Aboogie', | 455 url='https://www.google.com/search?hl=en&q=define%3Aboogie', |
| 439 page_set=page_set) | 456 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 440 | 457 |
| 441 def RunNavigateSteps(self, action_runner): | 458 def RunNavigateSteps(self, action_runner): |
| 442 self.NavigateWait(action_runner) | 459 self.NavigateWait(action_runner) |
| 443 self.ScrollKnowledgeCardToTop(action_runner, 'rso') | 460 self.ScrollKnowledgeCardToTop(action_runner, 'rso') |
| 444 | 461 |
| 445 | 462 |
| 446 class Page22(KeySilkCasesPage): | 463 class Page22(KeySilkCasesPage): |
| 447 | 464 |
| 448 def __init__(self, page_set): | 465 def __init__(self, page_set, run_no_page_interactions): |
| 449 super(Page22, self).__init__( | 466 super(Page22, self).__init__( |
| 450 url='http://plus.google.com/app/basic/stream', | 467 url='http://plus.google.com/app/basic/stream', |
| 451 page_set=page_set) | 468 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 452 | 469 |
| 453 self.credentials = 'google' | 470 self.credentials = 'google' |
| 454 | 471 |
| 455 def RunNavigateSteps(self, action_runner): | 472 def RunNavigateSteps(self, action_runner): |
| 456 super(Page22, self).RunNavigateSteps(action_runner) | 473 super(Page22, self).RunNavigateSteps(action_runner) |
| 457 action_runner.WaitForJavaScriptCondition( | 474 action_runner.WaitForJavaScriptCondition( |
| 458 'document.getElementsByClassName("fHa").length > 0') | 475 'document.getElementsByClassName("fHa").length > 0') |
| 459 action_runner.Wait(2) | 476 action_runner.Wait(2) |
| 460 | 477 |
| 461 def RunPageInteractions(self, action_runner): | 478 def PerformPageInteractions(self, action_runner): |
| 462 interaction = action_runner.BeginGestureInteraction( | 479 interaction = action_runner.BeginGestureInteraction( |
| 463 'ScrollAction', is_smooth=True) | 480 'ScrollAction', is_smooth=True) |
| 464 action_runner.ScrollElement(selector='#mainContent') | 481 action_runner.ScrollElement(selector='#mainContent') |
| 465 interaction.End() | 482 interaction.End() |
| 466 | 483 |
| 467 | 484 |
| 468 class Page23(KeySilkCasesPage): | 485 class Page23(KeySilkCasesPage): |
| 469 | 486 |
| 470 """ | 487 """ |
| 471 Why: Physical simulation demo that does a lot of element.style mutation | 488 Why: Physical simulation demo that does a lot of element.style mutation |
| 472 triggering JS and recalc slowness | 489 triggering JS and recalc slowness |
| 473 """ | 490 """ |
| 474 | 491 |
| 475 def __init__(self, page_set): | 492 def __init__(self, page_set, run_no_page_interactions): |
| 476 super(Page23, self).__init__( | 493 super(Page23, self).__init__( |
| 477 url='http://jsbin.com/UVIgUTa/38/quiet', | 494 url='http://jsbin.com/UVIgUTa/38/quiet', |
| 478 page_set=page_set) | 495 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 479 | 496 |
| 480 def RunPageInteractions(self, action_runner): | 497 def PerformPageInteractions(self, action_runner): |
| 481 interaction = action_runner.BeginGestureInteraction( | 498 interaction = action_runner.BeginGestureInteraction( |
| 482 'ScrollAction', is_smooth=True) | 499 'ScrollAction', is_smooth=True) |
| 483 action_runner.ScrollPage( | 500 action_runner.ScrollPage( |
| 484 distance_expr='window.innerHeight / 2', | 501 distance_expr='window.innerHeight / 2', |
| 485 direction='down', | 502 direction='down', |
| 486 use_touch=True) | 503 use_touch=True) |
| 487 interaction.End() | 504 interaction.End() |
| 488 interaction = action_runner.BeginInteraction('Wait', is_smooth=True) | 505 interaction = action_runner.BeginInteraction('Wait', is_smooth=True) |
| 489 action_runner.Wait(1) | 506 action_runner.Wait(1) |
| 490 interaction.End() | 507 interaction.End() |
| 491 | 508 |
| 492 | 509 |
| 493 class Page24(KeySilkCasesPage): | 510 class Page24(KeySilkCasesPage): |
| 494 | 511 |
| 495 """ | 512 """ |
| 496 Why: Google News: this iOS version is slower than accelerated scrolling | 513 Why: Google News: this iOS version is slower than accelerated scrolling |
| 497 """ | 514 """ |
| 498 | 515 |
| 499 def __init__(self, page_set): | 516 def __init__(self, page_set, run_no_page_interactions): |
| 500 super(Page24, self).__init__( | 517 super(Page24, self).__init__( |
| 501 url='http://mobile-news.sandbox.google.com/news/pt0?scroll', | 518 url='http://mobile-news.sandbox.google.com/news/pt0?scroll', |
| 502 page_set=page_set) | 519 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 503 | 520 |
| 504 def RunNavigateSteps(self, action_runner): | 521 def RunNavigateSteps(self, action_runner): |
| 505 super(Page24, self).RunNavigateSteps(action_runner) | 522 super(Page24, self).RunNavigateSteps(action_runner) |
| 506 action_runner.WaitForJavaScriptCondition( | 523 action_runner.WaitForJavaScriptCondition( |
| 507 'document.getElementById(":h") != null') | 524 'document.getElementById(":h") != null') |
| 508 action_runner.Wait(1) | 525 action_runner.Wait(1) |
| 509 | 526 |
| 510 def RunPageInteractions(self, action_runner): | 527 def PerformPageInteractions(self, action_runner): |
| 511 interaction = action_runner.BeginGestureInteraction( | 528 interaction = action_runner.BeginGestureInteraction( |
| 512 'ScrollAction', is_smooth=True) | 529 'ScrollAction', is_smooth=True) |
| 513 action_runner.ScrollElement( | 530 action_runner.ScrollElement( |
| 514 element_function='document.getElementById(":5")', | 531 element_function='document.getElementById(":5")', |
| 515 distance=2500, | 532 distance=2500, |
| 516 use_touch=True) | 533 use_touch=True) |
| 517 interaction.End() | 534 interaction.End() |
| 518 | 535 |
| 519 | 536 |
| 520 class Page25(KeySilkCasesPage): | 537 class Page25(KeySilkCasesPage): |
| 521 | 538 |
| 522 def __init__(self, page_set): | 539 def __init__(self, page_set, run_no_page_interactions): |
| 523 super(Page25, self).__init__( | 540 super(Page25, self).__init__( |
| 524 url='http://mobile-news.sandbox.google.com/news/pt0?swipe', | 541 url='http://mobile-news.sandbox.google.com/news/pt0?swipe', |
| 525 page_set=page_set) | 542 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 526 | 543 |
| 527 def RunNavigateSteps(self, action_runner): | 544 def RunNavigateSteps(self, action_runner): |
| 528 super(Page25, self).RunNavigateSteps(action_runner) | 545 super(Page25, self).RunNavigateSteps(action_runner) |
| 529 action_runner.WaitForJavaScriptCondition( | 546 action_runner.WaitForJavaScriptCondition( |
| 530 'document.getElementById(":h") != null') | 547 'document.getElementById(":h") != null') |
| 531 action_runner.Wait(1) | 548 action_runner.Wait(1) |
| 532 | 549 |
| 533 def RunPageInteractions(self, action_runner): | 550 def PerformPageInteractions(self, action_runner): |
| 534 interaction = action_runner.BeginGestureInteraction( | 551 interaction = action_runner.BeginGestureInteraction( |
| 535 'SwipeAction', is_smooth=True) | 552 'SwipeAction', is_smooth=True) |
| 536 action_runner.SwipeElement( | 553 action_runner.SwipeElement( |
| 537 direction='left', distance=100, | 554 direction='left', distance=100, |
| 538 element_function='document.getElementById(":f")') | 555 element_function='document.getElementById(":f")') |
| 539 interaction.End() | 556 interaction.End() |
| 540 interaction = action_runner.BeginInteraction('Wait', is_smooth=True) | 557 interaction = action_runner.BeginInteraction('Wait', is_smooth=True) |
| 541 action_runner.Wait(1) | 558 action_runner.Wait(1) |
| 542 interaction.End() | 559 interaction.End() |
| 543 | 560 |
| 544 | 561 |
| 545 class Page26(KeySilkCasesPage): | 562 class Page26(KeySilkCasesPage): |
| 546 | 563 |
| 547 """ Why: famo.us twitter demo """ | 564 """ Why: famo.us twitter demo """ |
| 548 | 565 |
| 549 def __init__(self, page_set): | 566 def __init__(self, page_set, run_no_page_interactions): |
| 550 super(Page26, self).__init__( | 567 super(Page26, self).__init__( |
| 551 url='http://s.codepen.io/befamous/fullpage/pFsqb?scroll', | 568 url='http://s.codepen.io/befamous/fullpage/pFsqb?scroll', |
| 552 page_set=page_set) | 569 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 553 | 570 |
| 554 def RunNavigateSteps(self, action_runner): | 571 def RunNavigateSteps(self, action_runner): |
| 555 super(Page26, self).RunNavigateSteps(action_runner) | 572 super(Page26, self).RunNavigateSteps(action_runner) |
| 556 action_runner.WaitForJavaScriptCondition( | 573 action_runner.WaitForJavaScriptCondition( |
| 557 'document.getElementsByClassName("tweet").length > 0') | 574 'document.getElementsByClassName("tweet").length > 0') |
| 558 action_runner.Wait(1) | 575 action_runner.Wait(1) |
| 559 | 576 |
| 560 def RunPageInteractions(self, action_runner): | 577 def PerformPageInteractions(self, action_runner): |
| 561 interaction = action_runner.BeginGestureInteraction( | 578 interaction = action_runner.BeginGestureInteraction( |
| 562 'ScrollAction', is_smooth=True) | 579 'ScrollAction', is_smooth=True) |
| 563 action_runner.ScrollPage(distance=5000) | 580 action_runner.ScrollPage(distance=5000) |
| 564 interaction.End() | 581 interaction.End() |
| 565 | 582 |
| 566 | 583 |
| 567 class SVGIconRaster(KeySilkCasesPage): | 584 class SVGIconRaster(KeySilkCasesPage): |
| 568 | 585 |
| 569 """ Why: Mutating SVG icons; these paint storm and paint slowly. """ | 586 """ Why: Mutating SVG icons; these paint storm and paint slowly. """ |
| 570 | 587 |
| 571 def __init__(self, page_set): | 588 def __init__(self, page_set, run_no_page_interactions): |
| 572 super(SVGIconRaster, self).__init__( | 589 super(SVGIconRaster, self).__init__( |
| 573 url='http://wiltzius.github.io/shape-shifter/', | 590 url='http://wiltzius.github.io/shape-shifter/', |
| 574 page_set=page_set) | 591 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 575 | 592 |
| 576 def RunNavigateSteps(self, action_runner): | 593 def RunNavigateSteps(self, action_runner): |
| 577 super(SVGIconRaster, self).RunNavigateSteps(action_runner) | 594 super(SVGIconRaster, self).RunNavigateSteps(action_runner) |
| 578 action_runner.WaitForJavaScriptCondition( | 595 action_runner.WaitForJavaScriptCondition( |
| 579 'loaded = true') | 596 'loaded = true') |
| 580 action_runner.Wait(1) | 597 action_runner.Wait(1) |
| 581 | 598 |
| 582 def RunPageInteractions(self, action_runner): | 599 def PerformPageInteractions(self, action_runner): |
| 583 for i in xrange(9): | 600 for i in xrange(9): |
| 584 button_func = ('document.getElementById("demo").$.' | 601 button_func = ('document.getElementById("demo").$.' |
| 585 'buttons.children[%d]') % i | 602 'buttons.children[%d]') % i |
| 586 interaction = action_runner.BeginInteraction( | 603 interaction = action_runner.BeginInteraction( |
| 587 'Action_TapAction', is_smooth=True) | 604 'Action_TapAction', is_smooth=True) |
| 588 action_runner.TapElement(element_function=button_func) | 605 action_runner.TapElement(element_function=button_func) |
| 589 action_runner.Wait(1) | 606 action_runner.Wait(1) |
| 590 interaction.End() | 607 interaction.End() |
| 591 | 608 |
| 592 | 609 |
| 593 class UpdateHistoryState(KeySilkCasesPage): | 610 class UpdateHistoryState(KeySilkCasesPage): |
| 594 | 611 |
| 595 """ Why: Modern apps often update history state, which currently is janky.""" | 612 """ Why: Modern apps often update history state, which currently is janky.""" |
| 596 | 613 |
| 597 def __init__(self, page_set): | 614 def __init__(self, page_set, run_no_page_interactions): |
| 598 super(UpdateHistoryState, self).__init__( | 615 super(UpdateHistoryState, self).__init__( |
| 599 url='file://key_silk_cases/pushState.html', | 616 url='file://key_silk_cases/pushState.html', |
| 600 page_set=page_set) | 617 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 601 | 618 |
| 602 def RunNavigateSteps(self, action_runner): | 619 def RunNavigateSteps(self, action_runner): |
| 603 super(UpdateHistoryState, self).RunNavigateSteps(action_runner) | 620 super(UpdateHistoryState, self).RunNavigateSteps(action_runner) |
| 604 action_runner.ExecuteJavaScript(''' | 621 action_runner.ExecuteJavaScript(''' |
| 605 window.requestAnimationFrame(function() { | 622 window.requestAnimationFrame(function() { |
| 606 window.__history_state_loaded = true; | 623 window.__history_state_loaded = true; |
| 607 }); | 624 }); |
| 608 ''') | 625 ''') |
| 609 action_runner.WaitForJavaScriptCondition( | 626 action_runner.WaitForJavaScriptCondition( |
| 610 'window.__history_state_loaded == true;') | 627 'window.__history_state_loaded == true;') |
| 611 | 628 |
| 612 def RunPageInteractions(self, action_runner): | 629 def PerformPageInteractions(self, action_runner): |
| 613 interaction = action_runner.BeginInteraction('animation_interaction', | 630 interaction = action_runner.BeginInteraction('animation_interaction', |
| 614 is_smooth=True) | 631 is_smooth=True) |
| 615 action_runner.Wait(5) # JS runs the animation continuously on the page | 632 action_runner.Wait(5) # JS runs the animation continuously on the page |
| 616 interaction.End() | 633 interaction.End() |
| 617 | 634 |
| 618 | 635 |
| 619 class SilkFinance(KeySilkCasesPage): | 636 class SilkFinance(KeySilkCasesPage): |
| 620 | 637 |
| 621 """ Why: Some effects repaint the page, possibly including plenty of text. """ | 638 """ Why: Some effects repaint the page, possibly including plenty of text. """ |
| 622 | 639 |
| 623 def __init__(self, page_set): | 640 def __init__(self, page_set, run_no_page_interactions): |
| 624 super(SilkFinance, self).__init__( | 641 super(SilkFinance, self).__init__( |
| 625 url='file://key_silk_cases/silk_finance.html', | 642 url='file://key_silk_cases/silk_finance.html', |
| 626 page_set=page_set) | 643 page_set=page_set, run_no_page_interactions=run_no_page_interactions) |
| 627 | 644 |
| 628 def RunPageInteractions(self, action_runner): | 645 def PerformPageInteractions(self, action_runner): |
| 629 interaction = action_runner.BeginInteraction('animation_interaction', | 646 interaction = action_runner.BeginInteraction('animation_interaction', |
| 630 is_smooth=True) | 647 is_smooth=True) |
| 631 action_runner.Wait(10) # animation runs automatically | 648 action_runner.Wait(10) # animation runs automatically |
| 632 interaction.End() | 649 interaction.End() |
| 633 | 650 |
| 634 | 651 |
| 635 class KeySilkCasesPageSet(page_set_module.PageSet): | 652 class KeySilkCasesPageSet(page_set_module.PageSet): |
| 636 | 653 |
| 637 """ Pages hand-picked for project Silk. """ | 654 """ Pages hand-picked for project Silk. """ |
| 638 | 655 |
| 639 def __init__(self): | 656 def __init__(self, run_no_page_interactions=False): |
| 640 super(KeySilkCasesPageSet, self).__init__( | 657 super(KeySilkCasesPageSet, self).__init__( |
| 641 user_agent_type='mobile', | 658 user_agent_type='mobile', |
| 642 archive_data_file='data/key_silk_cases.json', | 659 archive_data_file='data/key_silk_cases.json', |
| 643 bucket=page_set_module.PARTNER_BUCKET) | 660 bucket=page_set_module.PARTNER_BUCKET) |
| 644 | 661 |
| 645 self.AddUserStory(Page1(self)) | 662 self.AddUserStory(Page1(self, run_no_page_interactions)) |
| 646 self.AddUserStory(Page2(self)) | 663 self.AddUserStory(Page2(self, run_no_page_interactions)) |
| 647 self.AddUserStory(Page3(self)) | 664 self.AddUserStory(Page3(self, run_no_page_interactions)) |
| 648 self.AddUserStory(Page4(self)) | 665 self.AddUserStory(Page4(self, run_no_page_interactions)) |
| 649 self.AddUserStory(Page5(self)) | 666 self.AddUserStory(Page5(self, run_no_page_interactions)) |
| 650 self.AddUserStory(Page6(self)) | 667 self.AddUserStory(Page6(self, run_no_page_interactions)) |
| 651 self.AddUserStory(Page7(self)) | 668 self.AddUserStory(Page7(self, run_no_page_interactions)) |
| 652 self.AddUserStory(Page8(self)) | 669 self.AddUserStory(Page8(self, run_no_page_interactions)) |
| 653 self.AddUserStory(Page9(self)) | 670 self.AddUserStory(Page9(self, run_no_page_interactions)) |
| 654 self.AddUserStory(Page10(self)) | 671 self.AddUserStory(Page10(self, run_no_page_interactions)) |
| 655 self.AddUserStory(Page11(self)) | 672 self.AddUserStory(Page11(self, run_no_page_interactions)) |
| 656 self.AddUserStory(Page12(self)) | 673 self.AddUserStory(Page12(self, run_no_page_interactions)) |
| 657 self.AddUserStory(Page13(self)) | 674 self.AddUserStory(Page13(self, run_no_page_interactions)) |
| 658 self.AddUserStory(Page14(self)) | 675 self.AddUserStory(Page14(self, run_no_page_interactions)) |
| 659 self.AddUserStory(Page15(self)) | 676 self.AddUserStory(Page15(self, run_no_page_interactions)) |
| 660 self.AddUserStory(Page16(self)) | 677 self.AddUserStory(Page16(self, run_no_page_interactions)) |
| 661 self.AddUserStory(Page17(self)) | 678 self.AddUserStory(Page17(self, run_no_page_interactions)) |
| 662 self.AddUserStory(Page18(self)) | 679 self.AddUserStory(Page18(self, run_no_page_interactions)) |
| 663 # Missing frames during tap interaction; crbug.com/446332 | 680 # Missing frames during tap interaction; crbug.com/446332 |
| 664 # self.AddUserStory(Page19(self)) | 681 # self.AddUserStory(Page19(self, run_no_page_interactions)) |
| 665 self.AddUserStory(Page20(self)) | 682 self.AddUserStory(Page20(self, run_no_page_interactions)) |
| 666 self.AddUserStory(GwsGoogleExpansion(self)) | 683 self.AddUserStory(GwsGoogleExpansion(self, run_no_page_interactions)) |
| 667 self.AddUserStory(GwsBoogieExpansion(self)) | 684 self.AddUserStory(GwsBoogieExpansion(self, run_no_page_interactions)) |
| 668 # Times out on Windows; crbug.com/338838 | 685 # Times out on Windows; crbug.com/338838 |
| 669 # self.AddUserStory(Page22(self)) | 686 # self.AddUserStory(Page22(self, run_no_page_interactions)) |
| 670 self.AddUserStory(Page23(self)) | 687 self.AddUserStory(Page23(self, run_no_page_interactions)) |
| 671 self.AddUserStory(Page24(self)) | 688 self.AddUserStory(Page24(self, run_no_page_interactions)) |
| 672 self.AddUserStory(Page25(self)) | 689 self.AddUserStory(Page25(self, run_no_page_interactions)) |
| 673 self.AddUserStory(Page26(self)) | 690 self.AddUserStory(Page26(self, run_no_page_interactions)) |
| 674 self.AddUserStory(SVGIconRaster(self)) | 691 self.AddUserStory(SVGIconRaster(self, run_no_page_interactions)) |
| 675 self.AddUserStory(UpdateHistoryState(self)) | 692 self.AddUserStory(UpdateHistoryState(self, run_no_page_interactions)) |
| 676 self.AddUserStory(SilkFinance(self)) | 693 self.AddUserStory(SilkFinance(self, run_no_page_interactions)) |
| 694 |
| 695 for page in self: |
| 696 assert (page.__class__.RunPageInteractions == |
| 697 KeySilkCasesPage.RunPageInteractions), ( |
| 698 'Pages in this page set must not override KeySilkCasesPage\' ' |
| 699 'RunPageInteractions method.') |
| OLD | NEW |