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

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: Created 4 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.login_helpers import mobile_facebook_login
5 from page_sets.system_health import platforms 6 from page_sets.system_health import platforms
6 from page_sets.system_health import system_health_story 7 from page_sets.system_health import system_health_story
7 8
8 9
9 class _BrowsingStory(system_health_story.SystemHealthStory): 10 class _BrowsingStory(system_health_story.SystemHealthStory):
10 """Abstract base class for browsing stories. 11 """Abstract base class for browsing stories.
11 12
12 A browsing story visits items on the main page. Subclasses provide 13 A browsing story visits items on the main page. Subclasses provide
13 CSS selector to identify the items and implement interaction using 14 CSS selector to identify the items and implement interaction using
14 the helper methods of this class. 15 the helper methods of this class.
(...skipping 16 matching lines...) Expand all
31 def _ClickLink(self, action_runner, element_function): 32 def _ClickLink(self, action_runner, element_function):
32 action_runner.WaitForElement(element_function=element_function) 33 action_runner.WaitForElement(element_function=element_function)
33 action_runner.ClickElement(element_function=element_function) 34 action_runner.ClickElement(element_function=element_function)
34 self._WaitForNavigation(action_runner) 35 self._WaitForNavigation(action_runner)
35 36
36 def _NavigateBack(self, action_runner): 37 def _NavigateBack(self, action_runner):
37 action_runner.ExecuteJavaScript('window.history.back()') 38 action_runner.ExecuteJavaScript('window.history.back()')
38 self._WaitForNavigation(action_runner) 39 self._WaitForNavigation(action_runner)
39 40
40 41
41 class _NewsBrowsingStory(_BrowsingStory): 42 class _NewsBrowsingStory(_BrowsingStory):
petrcermak 2016/07/21 19:38:42 I suggest you move the _NewsBrowsingStory and _Med
Hannes Payer (out of office) 2016/07/26 16:02:09 Done.
42 """Abstract base class for news user stories. 43 """Abstract base class for news user stories.
43 44
44 A news story imitates browsing a news website: 45 A news story imitates browsing a news website:
45 1. Load the main page. 46 1. Load the main page.
46 2. Open and scroll the first news item. 47 2. Open and scroll the first news item.
47 3. Go back to the main page and scroll it. 48 3. Go back to the main page and scroll it.
48 4. Open and scroll the second news item. 49 4. Open and scroll the second news item.
49 5. Go back to the main page and scroll it. 50 5. Go back to the main page and scroll it.
50 6. etc. 51 6. etc.
51 """ 52 """
(...skipping 13 matching lines...) Expand all
65 def _ReadNewsItem(self, action_runner): 66 def _ReadNewsItem(self, action_runner):
66 action_runner.tab.WaitForDocumentReadyStateToBeComplete() 67 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
67 action_runner.Wait(self.ITEM_READ_TIME_IN_SECONDS) 68 action_runner.Wait(self.ITEM_READ_TIME_IN_SECONDS)
68 action_runner.RepeatableBrowserDrivenScroll( 69 action_runner.RepeatableBrowserDrivenScroll(
69 repeat_count=self.ITEM_SCROLL_REPEAT) 70 repeat_count=self.ITEM_SCROLL_REPEAT)
70 71
71 def _ScrollMainPage(self, action_runner): 72 def _ScrollMainPage(self, action_runner):
72 action_runner.tab.WaitForDocumentReadyStateToBeComplete() 73 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
73 action_runner.RepeatableBrowserDrivenScroll( 74 action_runner.RepeatableBrowserDrivenScroll(
74 repeat_count=self.MAIN_PAGE_SCROLL_REPEAT) 75 repeat_count=self.MAIN_PAGE_SCROLL_REPEAT)
75 76
petrcermak 2016/07/21 19:38:42 nit: add extra blank line (I added justification i
Hannes Payer (out of office) 2016/07/26 16:02:09 Done.
77 class _MediaBrowsingStory(_BrowsingStory):
78 """ Abstract base class for media user stories
79
80 A media story imitates browsing a website with photo or video content:
81 1. Load a page showing a media item
82 2. Click on the next link to go to the next media item
83 3. etc.
84 """
85
86 ABSTRACT_STORY = True
87 ITEM_VIEW_TIME_IN_SECONDS = 1
88 ITEMS_TO_VISIT = 30
89
90 def _DidLoadDocument(self, action_runner):
91 for i in xrange(self.ITEMS_TO_VISIT):
92 self._NavigateToItem(action_runner, self._ItemSelector(i))
petrcermak 2016/07/21 19:38:42 Why do you define the _ItemSelector method when yo
Hannes Payer (out of office) 2016/07/26 16:02:09 Done. That is was leftover code experimenting with
93 self._ViewMediaItem(action_runner)
94
95 def _ViewMediaItem(self, action_runner):
96 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
97 action_runner.Wait(self.ITEM_VIEW_TIME_IN_SECONDS)
98
76 99
77 ############################################################################## 100 ##############################################################################
78 # News browsing stories. 101 # News browsing stories.
79 ############################################################################## 102 ##############################################################################
80 103
81 104
82 class CnnStory(_NewsBrowsingStory): 105 class CnnStory(_NewsBrowsingStory):
83 """The second top website in http://www.alexa.com/topsites/category/News""" 106 """The second top website in http://www.alexa.com/topsites/category/News"""
84 NAME = 'browse:news:cnn' 107 NAME = 'browse:news:cnn'
85 URL = 'http://edition.cnn.com/' 108 URL = 'http://edition.cnn.com/'
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 NAME = 'browse:news:washingtonpost' 193 NAME = 'browse:news:washingtonpost'
171 URL = 'https://www.washingtonpost.com/pwa' 194 URL = 'https://www.washingtonpost.com/pwa'
172 IS_SINGLE_PAGE_APP = True 195 IS_SINGLE_PAGE_APP = True
173 ITEM_SELECTOR = '.hed > a' 196 ITEM_SELECTOR = '.hed > a'
174 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY 197 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
175 198
176 def _DidLoadDocument(self, action_runner): 199 def _DidLoadDocument(self, action_runner):
177 # Close the popup window. 200 # Close the popup window.
178 action_runner.ClickElement(selector='.close') 201 action_runner.ClickElement(selector='.close')
179 super(WashingtonPostMobileStory, self)._DidLoadDocument(action_runner) 202 super(WashingtonPostMobileStory, self)._DidLoadDocument(action_runner)
203
petrcermak 2016/07/21 19:38:42 nit: There should be two spaces between top-level
Hannes Payer (out of office) 2016/07/26 16:02:09 Done.
204 ##############################################################################
205 # Media browsing stories.
206 ##############################################################################
207
208 class FlickrMobileStory(_MediaBrowsingStory):
209 NAME = 'browse:media:flickr'
210 URL = ("https://www.flickr.com/photos/albertdros/27815579924/in/"
petrcermak 2016/07/21 19:38:42 s/"/'/g everywhere
Hannes Payer (out of office) 2016/07/26 16:02:09 Done.
211 "explore-2016-07-20")
212 ITEM_SELECTOR = '.next-photo.photo-link'
213 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
214 IS_SINGLE_PAGE_APP = True
215
216 def _ItemSelector(self, _):
217 return 0
218
219 class FlickrDesktopStory(_MediaBrowsingStory):
220 NAME = 'browse:media:flickr'
221 URL = ("https://www.flickr.com/photos/albertdros/27815579924/in/"
222 "explore-2016-07-20")
223 ITEM_SELECTOR = '.navigate-target.navigate-next'
224 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
225 IS_SINGLE_PAGE_APP = True
226
227 def _ItemSelector(self, _):
228 return 0
229
230 class ImgurMobileStory(_MediaBrowsingStory):
231 NAME = 'browse:media:imgur'
232 URL = 'http://imgur.com/gallery/e6gPQ'
233 ITEM_SELECTOR = '.Navbar-customAction'
234 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
235 IS_SINGLE_PAGE_APP = True
236 def _ItemSelector(self, _):
237 return 0
238
239 class ImgurDesktopStory(_MediaBrowsingStory):
240 NAME = 'browse:media:imgur'
241 URL = 'http://imgur.com/gallery/e6gPQ'
242 ITEM_SELECTOR = '.navNext'
243 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
244 IS_SINGLE_PAGE_APP = True
245 def _ItemSelector(self, _):
246 return 0
247
248 class YoutubeMobileStory(_MediaBrowsingStory):
charliea (OOO until 10-5) 2016/07/29 20:10:01 I think it's worth noting that there are known iss
Hannes Payer (out of office) 2016/08/04 11:38:01 Acknowledged.
249 NAME = 'browse:media:youtube'
250 URL = 'https://m.youtube.com/watch?v=njCDZWTI-xg'
251 ITEM_SELECTOR = '._mpfb > a'
252 IS_SINGLE_PAGE_APP = True
253 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
254 ITEM_VIEW_TIME_IN_SECONDS = 2
charliea (OOO until 10-5) 2016/07/29 20:10:01 maybe petrcermak@chromium.org has an opinion here,
Hannes Payer (out of office) 2016/08/04 11:38:01 I will change it for all to two seconds.
255 ITEMS_TO_VISIT = 15
256 def _ItemSelector(self, _):
257 return 3
258
259 class YoutubeDesktopStory(_MediaBrowsingStory):
260 NAME = 'browse:media:youtube'
261 URL = 'https://www.youtube.com/watch?v=Ic07xTJoP34'
262 ITEM_SELECTOR = '.yt-uix-simple-thumb-related'
263 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
264 IS_SINGLE_PAGE_APP = True
265 ITEM_VIEW_TIME_IN_SECONDS = 2
266 ITEMS_TO_VISIT = 15
267 def _ItemSelector(self, _):
268 return 0
269
270 class FacebookMobileStory(_MediaBrowsingStory):
271 NAME = 'browse:media:facebookphotos'
272 URL = ("https://facebook.com/photo.php?fbid=10154398154450513&"
273 "id=255110695512&set=a.406278500512.172778.255110695512&"
274 "source=54&refid=13")
275 ITEM_SELECTOR = '._57-p > a'
276 IS_SINGLE_PAGE_APP = True
277 SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
278 ITEM_VIEW_TIME_IN_SECONDS = 2
279 ITEMS_TO_VISIT = 20
280
281 def _ItemSelector(self, _):
282 return 1
283
284 class FacebookDesktopStory(_MediaBrowsingStory):
285 NAME = 'browse:media:facebookphotos'
286 URL = ("https://www.facebook.com/NASA/photos/a.67899501771.69169.54971236771/"
287 "10154267233981772/?type=3&theater")
288 ITEM_SELECTOR = '.snowliftPager.next'
289 IS_SINGLE_PAGE_APP = True
290 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
291 ITEM_VIEW_TIME_IN_SECONDS = 2
292 ITEMS_TO_VISIT = 20
293
294 def _ItemSelector(self, _):
295 return 0
296
297 def _Login(self, action_runner):
298 mobile_facebook_login.LoginAccount(action_runner, 'facebook3',
nednguyen 2016/07/21 17:32:00 Can you not use mobile_facebook_login here but: 1)
Hannes Payer (out of office) 2016/07/26 16:02:09 I experimented with that. The Desktop version gets
299 self.credentials_path)
300 action_runner.Navigate("https://www.facebook.com")
301 action_runner.tab.WaitForDocumentReadyStateToBeComplete()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698