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
3 # found in the LICENSE file.
4 from telemetry
.page
import page
as page_module
5 from telemetry
.page
import page_set
as page_set_module
8 class KeySilkCasesPage(page_module
.Page
):
10 def __init__(self
, url
, page_set
, run_no_page_interactions
):
11 """ Base class for all key silk cases pages.
14 run_no_page_interactions: whether the page will run any interactions after
17 super(KeySilkCasesPage
, self
).__init
__(
18 url
=url
, page_set
=page_set
, credentials_path
= 'data/credentials.json')
19 self
.user_agent_type
= 'mobile'
20 self
.archive_data_file
= 'data/key_silk_cases.json'
21 self
._run
_no
_page
_interactions
= run_no_page_interactions
23 def RunNavigateSteps(self
, action_runner
):
24 super(KeySilkCasesPage
, self
).RunNavigateSteps(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
:
32 self
.PerformPageInteractions(action_runner
)
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.
38 interaction
= action_runner
.BeginGestureInteraction(
39 'ScrollAction', is_smooth
=True)
40 action_runner
.ScrollPage()
44 class Page1(KeySilkCasesPage
):
46 """ Why: Infinite scroll. Brings out all of our perf issues. """
48 def __init__(self
, page_set
, run_no_page_interactions
):
49 super(Page1
, self
).__init
__(
50 url
='http://groupcloned.com/test/plain/list-recycle-transform.html',
51 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
53 def PerformPageInteractions(self
, action_runner
):
54 interaction
= action_runner
.BeginGestureInteraction(
55 'ScrollAction', is_smooth
=True)
56 action_runner
.ScrollElement(selector
='#scrollable')
60 class Page2(KeySilkCasesPage
):
62 """ Why: Brings out layer management bottlenecks. """
64 def __init__(self
, page_set
, run_no_page_interactions
):
65 super(Page2
, self
).__init
__(
66 url
='file://key_silk_cases/list_animation_simple.html',
67 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
69 def PerformPageInteractions(self
, action_runner
):
73 class Page3(KeySilkCasesPage
):
76 Why: Best-known method for fake sticky. Janks sometimes. Interacts badly with
80 def __init__(self
, page_set
, run_no_page_interactions
):
81 super(Page3
, self
).__init
__(
82 # pylint: disable=C0301
83 url
='http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html',
84 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
86 def PerformPageInteractions(self
, action_runner
):
87 interaction
= action_runner
.BeginGestureInteraction(
88 'ScrollAction', is_smooth
=True)
89 action_runner
.ScrollElement(selector
='#container')
93 class Page4(KeySilkCasesPage
):
96 Why: Card expansion: only the card should repaint, but in reality lots of
100 def __init__(self
, page_set
, run_no_page_interactions
):
101 super(Page4
, self
).__init
__(
102 url
='http://jsfiddle.net/3yDKh/15/show/',
103 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
105 def PerformPageInteractions(self
, action_runner
):
106 action_runner
.Wait(3)
109 class Page5(KeySilkCasesPage
):
112 Why: Card expansion with animated contents, using will-change on the card
115 def __init__(self
, page_set
, run_no_page_interactions
):
116 super(Page5
, self
).__init
__(
117 url
='http://jsfiddle.net/jx5De/14/show/',
118 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
120 self
.gpu_raster
= True
122 def PerformPageInteractions(self
, action_runner
):
123 action_runner
.Wait(4)
126 class Page6(KeySilkCasesPage
):
129 Why: Card fly-in: It should be fast to animate in a bunch of cards using
130 margin-top and letting layout do the rest.
133 def __init__(self
, page_set
, run_no_page_interactions
):
134 super(Page6
, self
).__init
__(
135 url
='http://jsfiddle.net/3yDKh/16/show/',
136 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
138 def PerformPageInteractions(self
, action_runner
):
139 action_runner
.Wait(3)
142 class Page7(KeySilkCasesPage
):
145 Why: Image search expands a spacer div when you click an image to accomplish
146 a zoomin effect. Each image has a layer. Even so, this triggers a lot of
147 unnecessary repainting.
150 def __init__(self
, page_set
, run_no_page_interactions
):
151 super(Page7
, self
).__init
__(
152 url
='http://jsfiddle.net/R8DX9/4/show/',
153 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
155 def PerformPageInteractions(self
, action_runner
):
156 action_runner
.Wait(3)
159 class Page8(KeySilkCasesPage
):
162 Why: Swipe to dismiss of an element that has a fixed-position child that is
163 its pseudo-sticky header. Brings out issues with layer creation and
167 def __init__(self
, page_set
, run_no_page_interactions
):
168 super(Page8
, self
).__init
__(
169 url
='http://jsfiddle.net/rF9Gh/7/show/',
170 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
172 def PerformPageInteractions(self
, action_runner
):
173 action_runner
.Wait(3)
176 class Page9(KeySilkCasesPage
):
179 Why: Horizontal and vertical expansion of a card that is cheap to layout but
183 def __init__(self
, page_set
, run_no_page_interactions
):
184 super(Page9
, self
).__init
__(
185 url
='http://jsfiddle.net/TLXLu/3/show/',
186 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
188 self
.gpu_raster
= True
190 def PerformPageInteractions(self
, action_runner
):
191 action_runner
.Wait(4)
194 class Page10(KeySilkCasesPage
):
197 Why: Vertical Expansion of a card that is cheap to layout but costly to
201 def __init__(self
, page_set
, run_no_page_interactions
):
202 super(Page10
, self
).__init
__(
203 url
='http://jsfiddle.net/cKB9D/7/show/',
204 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
206 self
.gpu_raster
= True
208 def PerformPageInteractions(self
, action_runner
):
209 action_runner
.Wait(4)
212 class Page11(KeySilkCasesPage
):
215 Why: Parallax effect is common on photo-viewer-like applications, overloading
216 software rasterization
219 def __init__(self
, page_set
, run_no_page_interactions
):
220 super(Page11
, self
).__init
__(
221 url
='http://jsfiddle.net/vBQHH/11/show/',
222 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
224 self
.gpu_raster
= True
226 def PerformPageInteractions(self
, action_runner
):
227 action_runner
.Wait(4)
230 class Page12(KeySilkCasesPage
):
232 """ Why: Addressing paint storms during coordinated animations. """
234 def __init__(self
, page_set
, run_no_page_interactions
):
235 super(Page12
, self
).__init
__(
236 url
='http://jsfiddle.net/ugkd4/10/show/',
237 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
239 def PerformPageInteractions(self
, action_runner
):
240 action_runner
.Wait(5)
243 class Page13(KeySilkCasesPage
):
245 """ Why: Mask transitions are common mobile use cases. """
247 def __init__(self
, page_set
, run_no_page_interactions
):
248 super(Page13
, self
).__init
__(
249 url
='http://jsfiddle.net/xLuvC/1/show/',
250 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
252 self
.gpu_raster
= True
254 def PerformPageInteractions(self
, action_runner
):
255 action_runner
.Wait(4)
258 class Page14(KeySilkCasesPage
):
260 """ Why: Card expansions with images and text are pretty and common. """
262 def __init__(self
, page_set
, run_no_page_interactions
):
263 super(Page14
, self
).__init
__(
264 url
='http://jsfiddle.net/bNp2h/3/show/',
265 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
267 self
.gpu_raster
= True
269 def PerformPageInteractions(self
, action_runner
):
270 action_runner
.Wait(4)
273 class Page15(KeySilkCasesPage
):
275 """ Why: Coordinated animations for expanding elements. """
277 def __init__(self
, page_set
, run_no_page_interactions
):
278 super(Page15
, self
).__init
__(
279 url
='file://key_silk_cases/font_wipe.html',
280 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
282 def PerformPageInteractions(self
, action_runner
):
283 action_runner
.Wait(5)
286 class Page16(KeySilkCasesPage
):
288 def __init__(self
, page_set
, run_no_page_interactions
):
289 super(Page16
, self
).__init
__(
290 url
='file://key_silk_cases/inbox_app.html?swipe_to_dismiss',
291 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
293 def SwipeToDismiss(self
, action_runner
):
294 interaction
= action_runner
.BeginGestureInteraction(
295 'SwipeAction', is_smooth
=True)
296 action_runner
.SwipeElement(
297 left_start_ratio
=0.8, top_start_ratio
=0.2,
298 direction
='left', distance
=400, speed_in_pixels_per_second
=5000,
299 element_function
='document.getElementsByClassName("message")[2]')
302 def PerformPageInteractions(self
, action_runner
):
303 self
.SwipeToDismiss(action_runner
)
306 class Page17(KeySilkCasesPage
):
308 def __init__(self
, page_set
, run_no_page_interactions
):
309 super(Page17
, self
).__init
__(
310 url
='file://key_silk_cases/inbox_app.html?stress_hidey_bars',
311 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
313 def PerformPageInteractions(self
, action_runner
):
314 self
.StressHideyBars(action_runner
)
316 def StressHideyBars(self
, action_runner
):
317 interaction
= action_runner
.BeginGestureInteraction(
318 'ScrollAction', is_smooth
=True)
319 action_runner
.ScrollElement(
320 selector
='#messages', direction
='down', speed_in_pixels_per_second
=200)
322 interaction
= action_runner
.BeginGestureInteraction(
323 'ScrollAction', is_smooth
=True)
324 action_runner
.ScrollElement(
325 selector
='#messages', direction
='up', speed_in_pixels_per_second
=200)
327 interaction
= action_runner
.BeginGestureInteraction(
328 'ScrollAction', is_smooth
=True)
329 action_runner
.ScrollElement(
330 selector
='#messages', direction
='down', speed_in_pixels_per_second
=200)
334 class Page18(KeySilkCasesPage
):
336 def __init__(self
, page_set
, run_no_page_interactions
):
337 super(Page18
, self
).__init
__(
338 url
='file://key_silk_cases/inbox_app.html?toggle_drawer',
339 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
341 def PerformPageInteractions(self
, action_runner
):
343 self
.ToggleDrawer(action_runner
)
345 def ToggleDrawer(self
, action_runner
):
346 interaction
= action_runner
.BeginInteraction(
347 'Action_TapAction', is_smooth
=True)
348 action_runner
.TapElement('#menu-button')
349 action_runner
.Wait(1)
353 class Page19(KeySilkCasesPage
):
355 def __init__(self
, page_set
, run_no_page_interactions
):
356 super(Page19
, self
).__init
__(
357 url
='file://key_silk_cases/inbox_app.html?slide_drawer',
358 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
360 def ToggleDrawer(self
, action_runner
):
361 interaction
= action_runner
.BeginGestureInteraction(
362 'TapAction', is_smooth
=True)
363 action_runner
.TapElement('#menu-button')
366 interaction
= action_runner
.BeginInteraction('Wait', is_smooth
=True)
367 action_runner
.WaitForJavaScriptCondition('''
368 document.getElementById("nav-drawer").active &&
369 document.getElementById("nav-drawer").children[0]
370 .getBoundingClientRect().left == 0''')
373 def RunNavigateSteps(self
, action_runner
):
374 super(Page19
, self
).RunNavigateSteps(action_runner
)
375 action_runner
.Wait(2)
376 self
.ToggleDrawer(action_runner
)
378 def PerformPageInteractions(self
, action_runner
):
379 self
.SlideDrawer(action_runner
)
381 def SlideDrawer(self
, action_runner
):
382 interaction
= action_runner
.BeginInteraction(
383 'Action_SwipeAction', is_smooth
=True)
384 action_runner
.SwipeElement(
385 left_start_ratio
=0.8, top_start_ratio
=0.2,
386 direction
='left', distance
=200,
387 element_function
='document.getElementById("nav-drawer").children[0]')
388 action_runner
.WaitForJavaScriptCondition(
389 '!document.getElementById("nav-drawer").active')
393 class Page20(KeySilkCasesPage
):
395 """ Why: Shadow DOM infinite scrolling. """
397 def __init__(self
, page_set
, run_no_page_interactions
):
398 super(Page20
, self
).__init
__(
399 url
='file://key_silk_cases/infinite_scrolling.html',
400 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
402 def PerformPageInteractions(self
, action_runner
):
403 interaction
= action_runner
.BeginGestureInteraction(
404 'ScrollAction', is_smooth
=True)
405 action_runner
.ScrollElement(
406 selector
='#container', speed_in_pixels_per_second
=5000)
410 class GwsExpansionPage(KeySilkCasesPage
):
411 """Abstract base class for pages that expand Google knowledge panels."""
413 def NavigateWait(self
, action_runner
):
414 super(GwsExpansionPage
, self
).RunNavigateSteps(action_runner
)
415 action_runner
.Wait(3)
417 def ExpandKnowledgeCard(self
, action_runner
):
419 interaction
= action_runner
.BeginInteraction(
420 'Action_TapAction', is_smooth
=True)
421 action_runner
.TapElement(
422 element_function
='document.getElementsByClassName("vk_arc")[0]')
423 action_runner
.Wait(2)
426 def ScrollKnowledgeCardToTop(self
, action_runner
, card_id
):
427 # scroll until the knowledge card is at the top
428 action_runner
.ExecuteJavaScript(
429 "document.getElementById('%s').scrollIntoView()" % card_id
)
431 def PerformPageInteractions(self
, action_runner
):
432 self
.ExpandKnowledgeCard(action_runner
)
435 class GwsGoogleExpansion(GwsExpansionPage
):
437 """ Why: Animating height of a complex content card is common. """
439 def __init__(self
, page_set
, run_no_page_interactions
):
440 super(GwsGoogleExpansion
, self
).__init
__(
441 url
='http://www.google.com/#q=google',
442 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
444 def RunNavigateSteps(self
, action_runner
):
445 self
.NavigateWait(action_runner
)
446 self
.ScrollKnowledgeCardToTop(action_runner
, 'kno-result')
449 class GwsBoogieExpansion(GwsExpansionPage
):
451 """ Why: Same case as Google expansion but text-heavy rather than image. """
453 def __init__(self
, page_set
, run_no_page_interactions
):
454 super(GwsBoogieExpansion
, self
).__init
__(
455 url
='https://www.google.com/search?hl=en&q=define%3Aboogie',
456 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
458 def RunNavigateSteps(self
, action_runner
):
459 self
.NavigateWait(action_runner
)
460 self
.ScrollKnowledgeCardToTop(action_runner
, 'rso')
463 class Page22(KeySilkCasesPage
):
465 def __init__(self
, page_set
, run_no_page_interactions
):
466 super(Page22
, self
).__init
__(
467 url
='http://plus.google.com/app/basic/stream',
468 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
470 self
.credentials
= 'google'
472 def RunNavigateSteps(self
, action_runner
):
473 super(Page22
, self
).RunNavigateSteps(action_runner
)
474 action_runner
.WaitForJavaScriptCondition(
475 'document.getElementsByClassName("fHa").length > 0')
476 action_runner
.Wait(2)
478 def PerformPageInteractions(self
, action_runner
):
479 interaction
= action_runner
.BeginGestureInteraction(
480 'ScrollAction', is_smooth
=True)
481 action_runner
.ScrollElement(selector
='#mainContent')
485 class Page23(KeySilkCasesPage
):
488 Why: Physical simulation demo that does a lot of element.style mutation
489 triggering JS and recalc slowness
492 def __init__(self
, page_set
, run_no_page_interactions
):
493 super(Page23
, self
).__init
__(
494 url
='http://jsbin.com/UVIgUTa/38/quiet',
495 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
497 def PerformPageInteractions(self
, action_runner
):
498 interaction
= action_runner
.BeginGestureInteraction(
499 'ScrollAction', is_smooth
=True)
500 action_runner
.ScrollPage(
501 distance_expr
='window.innerHeight / 2',
505 interaction
= action_runner
.BeginInteraction('Wait', is_smooth
=True)
506 action_runner
.Wait(1)
510 class Page24(KeySilkCasesPage
):
513 Why: Google News: this iOS version is slower than accelerated scrolling
516 def __init__(self
, page_set
, run_no_page_interactions
):
517 super(Page24
, self
).__init
__(
518 url
='http://mobile-news.sandbox.google.com/news/pt0?scroll',
519 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
521 def RunNavigateSteps(self
, action_runner
):
522 super(Page24
, self
).RunNavigateSteps(action_runner
)
523 action_runner
.WaitForJavaScriptCondition(
524 'document.getElementById(":h") != null')
525 action_runner
.Wait(1)
527 def PerformPageInteractions(self
, action_runner
):
528 interaction
= action_runner
.BeginGestureInteraction(
529 'ScrollAction', is_smooth
=True)
530 action_runner
.ScrollElement(
531 element_function
='document.getElementById(":5")',
537 class Page25(KeySilkCasesPage
):
539 def __init__(self
, page_set
, run_no_page_interactions
):
540 super(Page25
, self
).__init
__(
541 url
='http://mobile-news.sandbox.google.com/news/pt0?swipe',
542 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
544 def RunNavigateSteps(self
, action_runner
):
545 super(Page25
, self
).RunNavigateSteps(action_runner
)
546 action_runner
.WaitForJavaScriptCondition(
547 'document.getElementById(":h") != null')
548 action_runner
.Wait(1)
550 def PerformPageInteractions(self
, action_runner
):
551 interaction
= action_runner
.BeginGestureInteraction(
552 'SwipeAction', is_smooth
=True)
553 action_runner
.SwipeElement(
554 direction
='left', distance
=100,
555 element_function
='document.getElementById(":f")')
557 interaction
= action_runner
.BeginInteraction('Wait', is_smooth
=True)
558 action_runner
.Wait(1)
562 class Page26(KeySilkCasesPage
):
564 """ Why: famo.us twitter demo """
566 def __init__(self
, page_set
, run_no_page_interactions
):
567 super(Page26
, self
).__init
__(
568 url
='http://s.codepen.io/befamous/fullpage/pFsqb?scroll',
569 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
571 def RunNavigateSteps(self
, action_runner
):
572 super(Page26
, self
).RunNavigateSteps(action_runner
)
573 action_runner
.WaitForJavaScriptCondition(
574 'document.getElementsByClassName("tweet").length > 0')
575 action_runner
.Wait(1)
577 def PerformPageInteractions(self
, action_runner
):
578 interaction
= action_runner
.BeginGestureInteraction(
579 'ScrollAction', is_smooth
=True)
580 action_runner
.ScrollPage(distance
=5000)
584 class SVGIconRaster(KeySilkCasesPage
):
586 """ Why: Mutating SVG icons; these paint storm and paint slowly. """
588 def __init__(self
, page_set
, run_no_page_interactions
):
589 super(SVGIconRaster
, self
).__init
__(
590 url
='http://wiltzius.github.io/shape-shifter/',
591 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
593 def RunNavigateSteps(self
, action_runner
):
594 super(SVGIconRaster
, self
).RunNavigateSteps(action_runner
)
595 action_runner
.WaitForJavaScriptCondition(
597 action_runner
.Wait(1)
599 def PerformPageInteractions(self
, action_runner
):
601 button_func
= ('document.getElementById("demo").$.'
602 'buttons.children[%d]') % i
603 interaction
= action_runner
.BeginInteraction(
604 'Action_TapAction', is_smooth
=True)
605 action_runner
.TapElement(element_function
=button_func
)
606 action_runner
.Wait(1)
610 class UpdateHistoryState(KeySilkCasesPage
):
612 """ Why: Modern apps often update history state, which currently is janky."""
614 def __init__(self
, page_set
, run_no_page_interactions
):
615 super(UpdateHistoryState
, self
).__init
__(
616 url
='file://key_silk_cases/pushState.html',
617 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
619 def RunNavigateSteps(self
, action_runner
):
620 super(UpdateHistoryState
, self
).RunNavigateSteps(action_runner
)
621 action_runner
.ExecuteJavaScript('''
622 window.requestAnimationFrame(function() {
623 window.__history_state_loaded = true;
626 action_runner
.WaitForJavaScriptCondition(
627 'window.__history_state_loaded == true;')
629 def PerformPageInteractions(self
, action_runner
):
630 interaction
= action_runner
.BeginInteraction('animation_interaction',
632 action_runner
.Wait(5) # JS runs the animation continuously on the page
636 class SilkFinance(KeySilkCasesPage
):
638 """ Why: Some effects repaint the page, possibly including plenty of text. """
640 def __init__(self
, page_set
, run_no_page_interactions
):
641 super(SilkFinance
, self
).__init
__(
642 url
='file://key_silk_cases/silk_finance.html',
643 page_set
=page_set
, run_no_page_interactions
=run_no_page_interactions
)
645 def PerformPageInteractions(self
, action_runner
):
646 interaction
= action_runner
.BeginInteraction('animation_interaction',
648 action_runner
.Wait(10) # animation runs automatically
652 class KeySilkCasesPageSet(page_set_module
.PageSet
):
654 """ Pages hand-picked for project Silk. """
656 def __init__(self
, run_no_page_interactions
=False):
657 super(KeySilkCasesPageSet
, self
).__init
__(
658 user_agent_type
='mobile',
659 archive_data_file
='data/key_silk_cases.json',
660 bucket
=page_set_module
.PARTNER_BUCKET
)
662 self
.AddUserStory(Page1(self
, run_no_page_interactions
))
663 self
.AddUserStory(Page2(self
, run_no_page_interactions
))
664 self
.AddUserStory(Page3(self
, run_no_page_interactions
))
665 self
.AddUserStory(Page4(self
, run_no_page_interactions
))
666 self
.AddUserStory(Page5(self
, run_no_page_interactions
))
667 self
.AddUserStory(Page6(self
, run_no_page_interactions
))
668 self
.AddUserStory(Page7(self
, run_no_page_interactions
))
669 self
.AddUserStory(Page8(self
, run_no_page_interactions
))
670 self
.AddUserStory(Page9(self
, run_no_page_interactions
))
671 self
.AddUserStory(Page10(self
, run_no_page_interactions
))
672 self
.AddUserStory(Page11(self
, run_no_page_interactions
))
673 self
.AddUserStory(Page12(self
, run_no_page_interactions
))
674 self
.AddUserStory(Page13(self
, run_no_page_interactions
))
675 self
.AddUserStory(Page14(self
, run_no_page_interactions
))
676 self
.AddUserStory(Page15(self
, run_no_page_interactions
))
677 self
.AddUserStory(Page16(self
, run_no_page_interactions
))
678 self
.AddUserStory(Page17(self
, run_no_page_interactions
))
679 self
.AddUserStory(Page18(self
, run_no_page_interactions
))
680 # Missing frames during tap interaction; crbug.com/446332
681 # self.AddUserStory(Page19(self, run_no_page_interactions))
682 self
.AddUserStory(Page20(self
, run_no_page_interactions
))
683 self
.AddUserStory(GwsGoogleExpansion(self
, run_no_page_interactions
))
684 self
.AddUserStory(GwsBoogieExpansion(self
, run_no_page_interactions
))
685 # Times out on Windows; crbug.com/338838
686 # self.AddUserStory(Page22(self, run_no_page_interactions))
687 self
.AddUserStory(Page23(self
, run_no_page_interactions
))
688 self
.AddUserStory(Page24(self
, run_no_page_interactions
))
689 self
.AddUserStory(Page25(self
, run_no_page_interactions
))
690 self
.AddUserStory(Page26(self
, run_no_page_interactions
))
691 self
.AddUserStory(SVGIconRaster(self
, run_no_page_interactions
))
692 self
.AddUserStory(UpdateHistoryState(self
, run_no_page_interactions
))
693 self
.AddUserStory(SilkFinance(self
, run_no_page_interactions
))
696 assert (page
.__class
__.RunPageInteractions
==
697 KeySilkCasesPage
.RunPageInteractions
), (
698 'Pages in this page set must not override KeySilkCasesPage\' '
699 'RunPageInteractions method.')