Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: tools/perf/page_sets/system_health/browsing_stories.py

Issue 2168743004: [system health] Add media browsing stories. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: disable facebook on desktop Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 4
5 from page_sets.system_health import platforms 5 from page_sets.system_health import platforms
6 from page_sets.system_health import system_health_story 6 from page_sets.system_health import system_health_story
7 7
8 8
9 class _BrowsingStory(system_health_story.SystemHealthStory): 9 class _BrowsingStory(system_health_story.SystemHealthStory):
10 """Abstract base class for browsing stories. 10 """Abstract base class for browsing stories.
11 11
12 A browsing story visits items on the main page. Subclasses provide 12 A browsing story visits items on the main page. Subclasses provide
13 CSS selector to identify the items and implement interaction using 13 CSS selector to identify the items and implement interaction using
14 the helper methods of this class. 14 the helper methods of this class.
15 """ 15 """
16 16
17 IS_SINGLE_PAGE_APP = False 17 IS_SINGLE_PAGE_APP = False
18 ITEM_SELECTOR = NotImplemented 18 ITEM_SELECTOR = NotImplemented
19 ITEMS_TO_VISIT = 4
20 ABSTRACT_STORY = True 19 ABSTRACT_STORY = True
21 20
22 def _WaitForNavigation(self, action_runner): 21 def _WaitForNavigation(self, action_runner):
23 if not self.IS_SINGLE_PAGE_APP: 22 if not self.IS_SINGLE_PAGE_APP:
24 action_runner.WaitForNavigate() 23 action_runner.WaitForNavigate()
25 24
26 def _NavigateToItem(self, action_runner, index): 25 def _NavigateToItem(self, action_runner, index):
27 item_selector = 'document.querySelectorAll("%s")[%d]' % ( 26 item_selector = 'document.querySelectorAll("%s")[%d]' % (
28 self.ITEM_SELECTOR, index) 27 self.ITEM_SELECTOR, index)
29 self._ClickLink(action_runner, item_selector) 28 self._ClickLink(action_runner, item_selector)
30 29
31 def _ClickLink(self, action_runner, element_function): 30 def _ClickLink(self, action_runner, element_function):
32 action_runner.WaitForElement(element_function=element_function) 31 action_runner.WaitForElement(element_function=element_function)
33 action_runner.ClickElement(element_function=element_function) 32 action_runner.ClickElement(element_function=element_function)
34 self._WaitForNavigation(action_runner) 33 self._WaitForNavigation(action_runner)
35 34
36 def _NavigateBack(self, action_runner): 35 def _NavigateBack(self, action_runner):
37 action_runner.ExecuteJavaScript('window.history.back()') 36 action_runner.ExecuteJavaScript('window.history.back()')
38 self._WaitForNavigation(action_runner) 37 self._WaitForNavigation(action_runner)
39 38
40 39
40 ##############################################################################
41 # News browsing stories.
42 ##############################################################################
43
44
41 class _NewsBrowsingStory(_BrowsingStory): 45 class _NewsBrowsingStory(_BrowsingStory):
42 """Abstract base class for news user stories. 46 """Abstract base class for news user stories.
43 47
44 A news story imitates browsing a news website: 48 A news story imitates browsing a news website:
45 1. Load the main page. 49 1. Load the main page.
46 2. Open and scroll the first news item. 50 2. Open and scroll the first news item.
47 3. Go back to the main page and scroll it. 51 3. Go back to the main page and scroll it.
48 4. Open and scroll the second news item. 52 4. Open and scroll the second news item.
49 5. Go back to the main page and scroll it. 53 5. Go back to the main page and scroll it.
50 6. etc. 54 6. etc.
51 """ 55 """
52 56
53 ITEM_READ_TIME_IN_SECONDS = 3 57 ITEM_READ_TIME_IN_SECONDS = 3
54 ITEM_SCROLL_REPEAT = 2 58 ITEM_SCROLL_REPEAT = 2
59 ITEMS_TO_VISIT = 4
55 MAIN_PAGE_SCROLL_REPEAT = 0 60 MAIN_PAGE_SCROLL_REPEAT = 0
56 ABSTRACT_STORY = True 61 ABSTRACT_STORY = True
57 62
58 def _DidLoadDocument(self, action_runner): 63 def _DidLoadDocument(self, action_runner):
59 for i in xrange(self.ITEMS_TO_VISIT): 64 for i in xrange(self.ITEMS_TO_VISIT):
60 self._NavigateToItem(action_runner, i) 65 self._NavigateToItem(action_runner, i)
61 self._ReadNewsItem(action_runner) 66 self._ReadNewsItem(action_runner)
62 self._NavigateBack(action_runner) 67 self._NavigateBack(action_runner)
63 self._ScrollMainPage(action_runner) 68 self._ScrollMainPage(action_runner)
64 69
65 def _ReadNewsItem(self, action_runner): 70 def _ReadNewsItem(self, action_runner):
66 action_runner.tab.WaitForDocumentReadyStateToBeComplete() 71 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
67 action_runner.Wait(self.ITEM_READ_TIME_IN_SECONDS) 72 action_runner.Wait(self.ITEM_READ_TIME_IN_SECONDS)
68 action_runner.RepeatableBrowserDrivenScroll( 73 action_runner.RepeatableBrowserDrivenScroll(
69 repeat_count=self.ITEM_SCROLL_REPEAT) 74 repeat_count=self.ITEM_SCROLL_REPEAT)
70 75
71 def _ScrollMainPage(self, action_runner): 76 def _ScrollMainPage(self, action_runner):
72 action_runner.tab.WaitForDocumentReadyStateToBeComplete() 77 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
73 action_runner.RepeatableBrowserDrivenScroll( 78 action_runner.RepeatableBrowserDrivenScroll(
74 repeat_count=self.MAIN_PAGE_SCROLL_REPEAT) 79 repeat_count=self.MAIN_PAGE_SCROLL_REPEAT)
75 80
76 81
77 ##############################################################################
78 # News browsing stories.
79 ##############################################################################
80
81
82 class CnnStory(_NewsBrowsingStory): 82 class CnnStory(_NewsBrowsingStory):
83 """The second top website in http://www.alexa.com/topsites/category/News""" 83 """The second top website in http://www.alexa.com/topsites/category/News"""
84 NAME = 'browse:news:cnn' 84 NAME = 'browse:news:cnn'
85 URL = 'http://edition.cnn.com/' 85 URL = 'http://edition.cnn.com/'
86 ITEM_SELECTOR = '.cd__content > h3 > a' 86 ITEM_SELECTOR = '.cd__content > h3 > a'
87 ITEMS_TO_VISIT = 2 87 ITEMS_TO_VISIT = 2
88 # TODO(ulan): Enable this story on mobile once it uses less memory and 88 # TODO(ulan): Enable this story on mobile once it uses less memory and
89 # does not crash with OOM. 89 # does not crash with OOM.
90 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY 90 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
91 91
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 def _DidLoadDocument(self, action_runner): 205 def _DidLoadDocument(self, action_runner):
206 # Close the popup window. On Nexus 9 (and probably other tables) the popup 206 # Close the popup window. On Nexus 9 (and probably other tables) the popup
207 # window does not have a "Close" button, instead it has only a "Send link 207 # window does not have a "Close" button, instead it has only a "Send link
208 # to phone" button. So on tablets we run with the popup window open. The 208 # to phone" button. So on tablets we run with the popup window open. The
209 # popup is transparent, so this is mostly an aesthetical issue. 209 # popup is transparent, so this is mostly an aesthetical issue.
210 has_button = action_runner.EvaluateJavaScript( 210 has_button = action_runner.EvaluateJavaScript(
211 '!!document.querySelector("%s")' % self._CLOSE_BUTTON_SELECTOR) 211 '!!document.querySelector("%s")' % self._CLOSE_BUTTON_SELECTOR)
212 if has_button: 212 if has_button:
213 action_runner.ClickElement(selector=self._CLOSE_BUTTON_SELECTOR) 213 action_runner.ClickElement(selector=self._CLOSE_BUTTON_SELECTOR)
214 super(WashingtonPostMobileStory, self)._DidLoadDocument(action_runner) 214 super(WashingtonPostMobileStory, self)._DidLoadDocument(action_runner)
215
216
217 ##############################################################################
218 # Media browsing stories.
219 ##############################################################################
220
221
222 class _MediaBrowsingStory(_BrowsingStory):
223 """Abstract base class for media user stories
224
225 A media story imitates browsing a website with photo or video content:
226 1. Load a page showing a media item
227 2. Click on the next link to go to the next media item
228 3. etc.
229 """
230
231 ABSTRACT_STORY = True
232 ITEM_VIEW_TIME_IN_SECONDS = 3
233 ITEMS_TO_VISIT = 15
234 ITEM_SELECTOR_INDEX = 0
235
236 def _DidLoadDocument(self, action_runner):
237 for _ in xrange(self.ITEMS_TO_VISIT):
238 self._NavigateToItem(action_runner, self.ITEM_SELECTOR_INDEX)
239 self._ViewMediaItem(action_runner)
240
241 def _ViewMediaItem(self, action_runner):
242 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
243 action_runner.Wait(self.ITEM_VIEW_TIME_IN_SECONDS)
244
245
246 class ImgurMobileStory(_MediaBrowsingStory):
247 NAME = 'browse:media:imgur'
248 URL = 'http://imgur.com/gallery/5UlBN'
249 ITEM_SELECTOR = '.Navbar-customAction'
250 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
251 IS_SINGLE_PAGE_APP = True
252
253
254 class ImgurDesktopStory(_MediaBrowsingStory):
255 NAME = 'browse:media:imgur'
256 URL = 'http://imgur.com/gallery/5UlBN'
257 ITEM_SELECTOR = '.navNext'
258 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
259 IS_SINGLE_PAGE_APP = True
260
261
262 class YouTubeMobileStory(_MediaBrowsingStory):
263 NAME = 'browse:media:youtube'
264 URL = 'https://m.youtube.com/watch?v=QGfhS1hfTWw&autoplay=false'
265 ITEM_SELECTOR = '._mhgb > a'
266 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
267 IS_SINGLE_PAGE_APP = True
268 ITEM_SELECTOR_INDEX = 3
269
270
271 class YouTubeDesktopStory(_MediaBrowsingStory):
272 NAME = 'browse:media:youtube'
273 URL = 'https://www.youtube.com/watch?v=QGfhS1hfTWw&autoplay=false'
274 ITEM_SELECTOR = '.yt-uix-simple-thumb-related'
275 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
276 IS_SINGLE_PAGE_APP = True
277 # A longer view time allows videos to load and play.
278 ITEM_VIEW_TIME_IN_SECONDS = 5
279 ITEMS_TO_VISIT = 8
280 ITEM_SELECTOR_INDEX = 3
281
282
283 class FacebookMobileStory(_MediaBrowsingStory):
284 NAME = 'browse:media:facebook'
285 URL = (
286 'https://m.facebook.com/rihanna/photos/a.207477806675.138795.10092511675/1 0153911739606676/?type=3&source=54&ref=page_internal')
287 ITEM_SELECTOR = '._57-r.touchable'
288 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
289 IS_SINGLE_PAGE_APP = True
290 ITEM_SELECTOR_INDEX = 0
291
292 def _Login(self, action_runner):
293 action_runner.Navigate('https://m.facebook.com/rihanna')
294 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
295
296
297 class FacebookDesktopStory(_MediaBrowsingStory):
298 NAME = 'browse:media:facebook'
299 URL = (
300 'https://www.facebook.com/rihanna/photos/a.207477806675.138795.10092511675 /10153911739606676/?type=3&theater')
301 ITEM_SELECTOR = '.snowliftPager.next'
302 # Recording currently does not work. The page gets stuck in the
303 # theater viewer.
304 SUPPORTED_PLATFORMS = platforms.NO_PLATFORMS
305 IS_SINGLE_PAGE_APP = True
306
307 def _Login(self, action_runner):
308 action_runner.Navigate('https://www.facebook.com/rihanna')
309 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
OLDNEW
« no previous file with comments | « tools/perf/page_sets/login_helpers/facebook_login.py ('k') | tools/perf/page_sets/system_health/loading_stories.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698