| OLD | NEW |
| (Empty) |
| 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 shared_page_state | |
| 6 from telemetry import story | |
| 7 | |
| 8 | |
| 9 def _GetCurrentLocation(action_runner): | |
| 10 return action_runner.EvaluateJavaScript('document.location.href') | |
| 11 | |
| 12 | |
| 13 def _WaitForLocationChange(action_runner, old_href): | |
| 14 action_runner.WaitForJavaScriptCondition( | |
| 15 'document.location.href != {{ old_href }}', old_href=old_href) | |
| 16 | |
| 17 | |
| 18 class Top7StressPage(page_module.Page): | |
| 19 | |
| 20 def __init__(self, url, page_set, name=''): | |
| 21 super(Top7StressPage, self).__init__( | |
| 22 url=url, page_set=page_set, name=name, | |
| 23 shared_page_state_class=shared_page_state.SharedDesktopPageState, | |
| 24 credentials_path = 'data/credentials.json') | |
| 25 self.archive_data_file = 'data/top_7_stress.json' | |
| 26 | |
| 27 def RunPageInteractions(self, action_runner): | |
| 28 raise NotImplementedError() | |
| 29 | |
| 30 | |
| 31 class GoogleWebSearchPage(Top7StressPage): | |
| 32 | |
| 33 """ Why: top google property; a google tab is often open """ | |
| 34 | |
| 35 def __init__(self, page_set): | |
| 36 super(GoogleWebSearchPage, self).__init__( | |
| 37 url='https://www.google.com/#hl=en&q=barack+obama', | |
| 38 page_set=page_set) | |
| 39 | |
| 40 def RunNavigateSteps(self, action_runner): | |
| 41 super(GoogleWebSearchPage, self).RunNavigateSteps(action_runner) | |
| 42 action_runner.WaitForElement(text='Next') | |
| 43 | |
| 44 def RunPageInteractions(self, action_runner): | |
| 45 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 46 action_runner.ScrollPage() | |
| 47 old_href = _GetCurrentLocation(action_runner) | |
| 48 action_runner.ClickElement(text='Next') | |
| 49 _WaitForLocationChange(action_runner, old_href) | |
| 50 action_runner.WaitForElement(text='Next') | |
| 51 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 52 action_runner.ScrollPage() | |
| 53 old_href = _GetCurrentLocation(action_runner) | |
| 54 action_runner.ClickElement(text='Next') | |
| 55 _WaitForLocationChange(action_runner, old_href) | |
| 56 action_runner.WaitForElement(text='Next') | |
| 57 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 58 action_runner.ScrollPage() | |
| 59 old_href = _GetCurrentLocation(action_runner) | |
| 60 action_runner.ClickElement(text='Next') | |
| 61 _WaitForLocationChange(action_runner, old_href) | |
| 62 action_runner.WaitForElement(text='Previous') | |
| 63 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 64 action_runner.ScrollPage() | |
| 65 old_href = _GetCurrentLocation(action_runner) | |
| 66 action_runner.ClickElement(text='Previous') | |
| 67 _WaitForLocationChange(action_runner, old_href) | |
| 68 action_runner.WaitForElement(text='Previous') | |
| 69 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 70 action_runner.ScrollPage() | |
| 71 old_href = _GetCurrentLocation(action_runner) | |
| 72 action_runner.ClickElement(text='Previous') | |
| 73 _WaitForLocationChange(action_runner, old_href) | |
| 74 action_runner.WaitForElement(text='Previous') | |
| 75 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 76 action_runner.ScrollPage() | |
| 77 old_href = _GetCurrentLocation(action_runner) | |
| 78 action_runner.ClickElement(text='Previous') | |
| 79 _WaitForLocationChange(action_runner, old_href) | |
| 80 action_runner.WaitForElement(text='Images') | |
| 81 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 82 action_runner.ScrollPage() | |
| 83 old_href = _GetCurrentLocation(action_runner) | |
| 84 action_runner.ClickElement(text='Images') | |
| 85 _WaitForLocationChange(action_runner, old_href) | |
| 86 action_runner.WaitForElement(text='Images') | |
| 87 | |
| 88 | |
| 89 class GmailPage(Top7StressPage): | |
| 90 | |
| 91 """ Why: productivity, top google properties """ | |
| 92 | |
| 93 def __init__(self, page_set): | |
| 94 super(GmailPage, self).__init__( | |
| 95 url='https://mail.google.com/mail/', | |
| 96 page_set=page_set) | |
| 97 | |
| 98 self.credentials = 'google' | |
| 99 | |
| 100 def RunNavigateSteps(self, action_runner): | |
| 101 super(GmailPage, self).RunNavigateSteps(action_runner) | |
| 102 action_runner.WaitForJavaScriptCondition( | |
| 103 'window.gmonkey !== undefined &&' | |
| 104 'document.getElementById("gb") !== null') | |
| 105 | |
| 106 def RunPageInteractions(self, action_runner): | |
| 107 old_href = _GetCurrentLocation(action_runner) | |
| 108 action_runner.ClickElement( | |
| 109 'a[href="https://mail.google.com/mail/u/0/?shva=1#starred"]') | |
| 110 _WaitForLocationChange(action_runner, old_href) | |
| 111 old_href = _GetCurrentLocation(action_runner) | |
| 112 action_runner.ClickElement( | |
| 113 'a[href="https://mail.google.com/mail/u/0/?shva=1#inbox"]') | |
| 114 _WaitForLocationChange(action_runner, old_href) | |
| 115 | |
| 116 | |
| 117 class GoogleCalendarPage(Top7StressPage): | |
| 118 | |
| 119 """ Why: productivity, top google properties """ | |
| 120 | |
| 121 def __init__(self, page_set): | |
| 122 super(GoogleCalendarPage, self).__init__( | |
| 123 url='https://www.google.com/calendar/', | |
| 124 page_set=page_set) | |
| 125 | |
| 126 self.credentials = 'google' | |
| 127 | |
| 128 def RunNavigateSteps(self, action_runner): | |
| 129 super(GoogleCalendarPage, self).RunNavigateSteps(action_runner) | |
| 130 action_runner.Wait(2) | |
| 131 action_runner.WaitForElement('div[class~="navForward"]') | |
| 132 action_runner.ExecuteJavaScript(''' | |
| 133 (function() { | |
| 134 var elem = document.createElement('meta'); | |
| 135 elem.name='viewport'; | |
| 136 elem.content='initial-scale=1'; | |
| 137 document.body.appendChild(elem); | |
| 138 })();''') | |
| 139 action_runner.Wait(1) | |
| 140 | |
| 141 def RunPageInteractions(self, action_runner): | |
| 142 action_runner.ClickElement('div[class~="navForward"]') | |
| 143 action_runner.Wait(2) | |
| 144 action_runner.WaitForElement('div[class~="navForward"]') | |
| 145 action_runner.ClickElement('div[class~="navForward"]') | |
| 146 action_runner.Wait(2) | |
| 147 action_runner.WaitForElement('div[class~="navForward"]') | |
| 148 action_runner.ClickElement('div[class~="navForward"]') | |
| 149 action_runner.Wait(2) | |
| 150 action_runner.WaitForElement('div[class~="navForward"]') | |
| 151 action_runner.ClickElement('div[class~="navForward"]') | |
| 152 action_runner.Wait(2) | |
| 153 action_runner.WaitForElement('div[class~="navBack"]') | |
| 154 action_runner.ClickElement('div[class~="navBack"]') | |
| 155 action_runner.Wait(2) | |
| 156 action_runner.WaitForElement('div[class~="navBack"]') | |
| 157 action_runner.ClickElement('div[class~="navBack"]') | |
| 158 action_runner.Wait(2) | |
| 159 action_runner.WaitForElement('div[class~="navBack"]') | |
| 160 action_runner.ClickElement('div[class~="navBack"]') | |
| 161 action_runner.Wait(2) | |
| 162 action_runner.WaitForElement('div[class~="navBack"]') | |
| 163 action_runner.ClickElement('div[class~="navBack"]') | |
| 164 action_runner.Wait(2) | |
| 165 action_runner.WaitForElement('div[class~="navBack"]') | |
| 166 | |
| 167 | |
| 168 class GooglePlusPage(Top7StressPage): | |
| 169 | |
| 170 """ Why: social; top google property; Public profile; infinite scrolls """ | |
| 171 | |
| 172 def __init__(self, page_set): | |
| 173 super(GooglePlusPage, self).__init__( | |
| 174 url='https://plus.google.com/110031535020051778989/posts', | |
| 175 page_set=page_set) | |
| 176 | |
| 177 self.credentials = 'google' | |
| 178 | |
| 179 def RunNavigateSteps(self, action_runner): | |
| 180 super(GooglePlusPage, self).RunNavigateSteps(action_runner) | |
| 181 action_runner.WaitForElement(text='Home') | |
| 182 | |
| 183 def RunPageInteractions(self, action_runner): | |
| 184 action_runner.ClickElement(text='Home') | |
| 185 action_runner.Wait(2) | |
| 186 action_runner.WaitForElement(text='Profile') | |
| 187 action_runner.ClickElement(text='Profile') | |
| 188 action_runner.Wait(2) | |
| 189 action_runner.WaitForElement(text='Explore') | |
| 190 action_runner.ClickElement(text='Explore') | |
| 191 action_runner.Wait(2) | |
| 192 action_runner.WaitForElement(text='Events') | |
| 193 action_runner.ClickElement(text='Events') | |
| 194 action_runner.Wait(2) | |
| 195 action_runner.WaitForElement(text='Communities') | |
| 196 action_runner.ClickElement(text='Communities') | |
| 197 action_runner.Wait(2) | |
| 198 action_runner.WaitForElement(text='Home') | |
| 199 | |
| 200 | |
| 201 class BlogspotPage(Top7StressPage): | |
| 202 | |
| 203 """ Why: #11 (Alexa global), google property; some blogger layouts have | |
| 204 infinite scroll but more interesting """ | |
| 205 | |
| 206 def __init__(self, page_set): | |
| 207 super(BlogspotPage, self).__init__( | |
| 208 url='http://googlewebmastercentral.blogspot.com/', | |
| 209 page_set=page_set, | |
| 210 name='Blogger') | |
| 211 | |
| 212 def RunNavigateSteps(self, action_runner): | |
| 213 super(BlogspotPage, self).RunNavigateSteps(action_runner) | |
| 214 action_runner.WaitForElement(text='accessibility') | |
| 215 | |
| 216 def RunPageInteractions(self, action_runner): | |
| 217 action_runner.ClickElement(text='accessibility') | |
| 218 action_runner.WaitForNavigate() | |
| 219 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 220 action_runner.ScrollPage() | |
| 221 # Insert 300ms wait to simulate user finger movement, | |
| 222 # and ensure scheduling of idle tasks. | |
| 223 action_runner.Wait(0.3) | |
| 224 action_runner.ClickElement(text='advanced') | |
| 225 action_runner.WaitForNavigate() | |
| 226 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 227 action_runner.ScrollPage() | |
| 228 action_runner.Wait(0.3) | |
| 229 action_runner.ClickElement(text='beginner') | |
| 230 action_runner.WaitForNavigate() | |
| 231 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 232 action_runner.ScrollPage() | |
| 233 action_runner.Wait(0.3) | |
| 234 action_runner.ClickElement(text='Home') | |
| 235 action_runner.WaitForNavigate() | |
| 236 | |
| 237 | |
| 238 class WordpressPage(Top7StressPage): | |
| 239 | |
| 240 """ Why: #18 (Alexa global), Picked an interesting post """ | |
| 241 | |
| 242 def __init__(self, page_set): | |
| 243 super(WordpressPage, self).__init__( | |
| 244 # pylint: disable=line-too-long | |
| 245 url='http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks
-for-august-2012/', | |
| 246 page_set=page_set, | |
| 247 name='Wordpress') | |
| 248 | |
| 249 def RunNavigateSteps(self, action_runner): | |
| 250 super(WordpressPage, self).RunNavigateSteps(action_runner) | |
| 251 action_runner.WaitForElement( | |
| 252 # pylint: disable=line-too-long | |
| 253 'a[href="http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sig
ht/"]') | |
| 254 | |
| 255 def RunPageInteractions(self, action_runner): | |
| 256 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 257 action_runner.ScrollPage() | |
| 258 # Insert 300ms wait to simulate user finger movement, | |
| 259 # and ensure scheduling of idle tasks. | |
| 260 action_runner.Wait(0.3) | |
| 261 action_runner.ClickElement( | |
| 262 # pylint: disable=line-too-long | |
| 263 'a[href="http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sig
ht/"]') | |
| 264 action_runner.WaitForNavigate() | |
| 265 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 266 action_runner.ScrollPage() | |
| 267 action_runner.Wait(0.3) | |
| 268 action_runner.ClickElement(text='Features') | |
| 269 action_runner.WaitForNavigate() | |
| 270 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 271 action_runner.ScrollPage() | |
| 272 action_runner.Wait(0.3) | |
| 273 action_runner.ClickElement(text='News') | |
| 274 action_runner.WaitForNavigate() | |
| 275 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 276 action_runner.ScrollPage() | |
| 277 | |
| 278 | |
| 279 class FacebookPage(Top7StressPage): | |
| 280 | |
| 281 """ Why: top social,Public profile """ | |
| 282 | |
| 283 def __init__(self, page_set): | |
| 284 super(FacebookPage, self).__init__( | |
| 285 url='https://www.facebook.com/barackobama', | |
| 286 page_set=page_set, | |
| 287 name='Facebook') | |
| 288 self.credentials = 'facebook2' | |
| 289 | |
| 290 def RunNavigateSteps(self, action_runner): | |
| 291 super(FacebookPage, self).RunNavigateSteps(action_runner) | |
| 292 action_runner.WaitForElement(text='About') | |
| 293 | |
| 294 def RunPageInteractions(self, action_runner): | |
| 295 # Scroll and wait for the next page to be loaded. | |
| 296 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 297 action_runner.ScrollPage() | |
| 298 action_runner.WaitForJavaScriptCondition( | |
| 299 'document.documentElement.scrollHeight - window.innerHeight - ' | |
| 300 'window.pageYOffset > 0') | |
| 301 | |
| 302 # Scroll and wait again. | |
| 303 with action_runner.CreateGestureInteraction('ScrollAction'): | |
| 304 action_runner.ScrollPage() | |
| 305 action_runner.WaitForJavaScriptCondition( | |
| 306 'document.documentElement.scrollHeight - window.innerHeight - ' | |
| 307 'window.pageYOffset > 0') | |
| 308 | |
| 309 class Top7StressPageSet(story.StorySet): | |
| 310 | |
| 311 """ Pages hand-picked for stress testing. """ | |
| 312 | |
| 313 def __init__(self): | |
| 314 super(Top7StressPageSet, self).__init__( | |
| 315 archive_data_file='data/top_7_stress.json', | |
| 316 cloud_storage_bucket=story.PARTNER_BUCKET) | |
| 317 | |
| 318 self.AddStory(GoogleWebSearchPage(self)) | |
| 319 self.AddStory(GmailPage(self)) | |
| 320 self.AddStory(GoogleCalendarPage(self)) | |
| 321 self.AddStory(GooglePlusPage(self)) | |
| 322 self.AddStory(BlogspotPage(self)) | |
| 323 self.AddStory(WordpressPage(self)) | |
| 324 self.AddStory(FacebookPage(self)) | |
| OLD | NEW |