• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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# pylint: disable=W0401,W0614
5from telemetry.page.actions.all_page_actions import *
6from telemetry.page import page as page_module
7from telemetry.page import page_set as page_set_module
8
9
10class KeyMobileSitesPage(page_module.Page):
11
12  def __init__(self, url, page_set, name=''):
13    super(KeyMobileSitesPage, self).__init__(url=url, page_set=page_set,
14                                             name=name)
15    self.credentials_path = 'data/credentials.json'
16    self.user_agent_type = 'mobile'
17    self.archive_data_file = 'data/key_mobile_sites.json'
18
19  def RunSmoothness(self, action_runner):
20    action_runner.RunAction(ScrollAction())
21
22  def RunRepaint(self, action_runner):
23    action_runner.RunAction(RepaintContinuouslyAction({'seconds': 5}))
24
25
26class Page1(KeyMobileSitesPage):
27
28  """ Why: Top news site """
29
30  def __init__(self, page_set):
31    super(Page1, self).__init__(
32      url='http://nytimes.com/',
33      page_set=page_set)
34
35    self.fastpath = True
36
37
38class Page2(KeyMobileSitesPage):
39
40  """ Why: Typical mobile business site """
41
42  def __init__(self, page_set):
43    super(Page2, self).__init__(
44      url=('http://iphone.capitolvolkswagen.com/index.htm'
45           '#new-inventory_p_2Fsb-new_p_2Ehtm_p_3Freset_p_3DInventoryListing'),
46      page_set=page_set)
47
48  def RunNavigateSteps(self, action_runner):
49    action_runner.NavigateToPage(self)
50    action_runner.WaitForElement(text='Next 35')
51    action_runner.WaitForJavaScriptCondition(
52        'document.body.scrollHeight > 2560')
53
54
55class Page3(KeyMobileSitesPage):
56
57  """ Why: Image-heavy site """
58
59  def __init__(self, page_set):
60    super(Page3, self).__init__(
61      url='http://cuteoverload.com',
62      page_set=page_set)
63
64    self.fastpath = True
65
66
67class Page4(KeyMobileSitesPage):
68
69  """ Why: Top tech blog """
70
71  def __init__(self, page_set):
72    super(Page4, self).__init__(
73      # pylint: disable=C0301
74      url='http://www.theverge.com/2012/10/28/3568746/amazon-7-inch-fire-hd-ipad-mini-ad-ballsy',
75      page_set=page_set)
76
77  def RunNavigateSteps(self, action_runner):
78    action_runner.NavigateToPage(self)
79    action_runner.WaitForJavaScriptCondition(
80        'window.Chorus !== undefined &&'
81        'window.Chorus.Comments !== undefined &&'
82        'window.Chorus.Comments.Json !== undefined &&'
83        '(window.Chorus.Comments.loaded ||'
84        ' window.Chorus.Comments.Json.load_comments())')
85
86
87class Page5(KeyMobileSitesPage):
88
89  """ Why: Top news site """
90
91  def __init__(self, page_set):
92    super(Page5, self).__init__(
93      # pylint: disable=C0301
94      url='http://www.cnn.com/2012/10/03/politics/michelle-obama-debate/index.html',
95      page_set=page_set)
96
97  def RunNavigateSteps(self, action_runner):
98    action_runner.NavigateToPage(self)
99    action_runner.Wait(8)
100
101
102class Page6(KeyMobileSitesPage):
103
104  """ Why: Social; top Google property; Public profile; infinite scrolls """
105
106  def __init__(self, page_set):
107    super(Page6, self).__init__(
108      # pylint: disable=C0301
109      url='https://plus.google.com/app/basic/110031535020051778989/posts?source=apppromo',
110      page_set=page_set)
111
112  def RunSmoothness(self, action_runner):
113    action_runner.RunAction(ScrollAction({'scroll_is_infinite': True}))
114
115
116class Page7(KeyMobileSitesPage):
117
118  """ Why: #1 (Alexa global) """
119
120  def __init__(self, page_set):
121    super(Page7, self).__init__(
122      url='https://facebook.com/barackobama',
123      page_set=page_set)
124
125  def RunNavigateSteps(self, action_runner):
126    action_runner.NavigateToPage(self)
127    action_runner.WaitForJavaScriptCondition(
128        'document.getElementById("u_0_c") !== null &&'
129        'document.body.scrollHeight > window.innerHeight')
130
131
132class Page8(KeyMobileSitesPage):
133
134  """ Why: #3 (Alexa global) """
135
136  def __init__(self, page_set):
137    super(Page8, self).__init__(
138      url='http://m.youtube.com/watch?v=9hBpF_Zj4OA',
139      page_set=page_set)
140
141  def RunNavigateSteps(self, action_runner):
142    action_runner.NavigateToPage(self)
143    action_runner.WaitForJavaScriptCondition(
144        'document.getElementById("paginatortarget") !== null')
145
146
147class Page9(KeyMobileSitesPage):
148
149  """
150  Why: #11 (Alexa global), google property; some blogger layouts have infinite
151  scroll but more interesting
152  """
153
154  def __init__(self, page_set):
155    super(Page9, self).__init__(
156      url='http://googlewebmastercentral.blogspot.com/',
157      page_set=page_set,
158      name='Blogger')
159
160
161class Page10(KeyMobileSitesPage):
162
163  """ Why: #18 (Alexa global), Picked an interesting post """
164
165  def __init__(self, page_set):
166    super(Page10, self).__init__(
167      # pylint: disable=C0301
168      url='http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/',
169      page_set=page_set,
170      name='Wordpress')
171
172
173class Page11(KeyMobileSitesPage):
174
175  """ Why: #12 (Alexa global),Public profile """
176
177  def __init__(self, page_set):
178    super(Page11, self).__init__(
179      url='https://www.linkedin.com/in/linustorvalds',
180      page_set=page_set,
181      name='LinkedIn')
182
183  def RunNavigateSteps(self, action_runner):
184    action_runner.NavigateToPage(self)
185    action_runner.WaitForJavaScriptCondition(
186        'document.getElementById("profile-view-scroller") !== null')
187
188
189class Page12(KeyMobileSitesPage):
190
191  """ Why: #6 (Alexa) most visited worldwide, picked an interesting page """
192
193  def __init__(self, page_set):
194    super(Page12, self).__init__(
195      url='http://en.wikipedia.org/wiki/Wikipedia',
196      page_set=page_set,
197      name='Wikipedia (1 tab)')
198
199
200class Page13(KeyMobileSitesPage):
201
202  """ Why: #8 (Alexa global), picked an interesting page """
203
204  def __init__(self, page_set):
205    super(Page13, self).__init__(
206      url='http://twitter.com/katyperry',
207      page_set=page_set,
208      name='Twitter')
209    self.disabled = 'Forbidden (Rate Limit Exceeded)'
210
211
212class Page14(KeyMobileSitesPage):
213
214  """ Why: #37 (Alexa global) """
215
216  def __init__(self, page_set):
217    super(Page14, self).__init__(
218      url='http://pinterest.com',
219      page_set=page_set,
220      name='Pinterest')
221
222
223class Page15(KeyMobileSitesPage):
224
225  """ Why: #1 sports """
226
227  def __init__(self, page_set):
228    super(Page15, self).__init__(
229      url='http://espn.go.com',
230      page_set=page_set,
231      name='ESPN')
232    self.disabled = 'Fails often; crbug.com/249722'
233
234
235class Page16(KeyMobileSitesPage):
236
237  """ Why: #1 Alexa reference """
238
239  def __init__(self, page_set):
240    super(Page16, self).__init__(
241      # pylint: disable=C0301
242      url='http://answers.yahoo.com/question/index?qid=20110117024343AAopj8f',
243      page_set=page_set)
244
245  def RunNavigateSteps(self, action_runner):
246    action_runner.NavigateToPage(self)
247    action_runner.WaitForElement(text='Other Answers (1 - 20 of 149)')
248    action_runner.ClickElement(text='Other Answers (1 - 20 of 149)')
249
250
251class Page17(KeyMobileSitesPage):
252
253  """ Why: productivity, top google properties """
254
255  def __init__(self, page_set):
256    super(Page17, self).__init__(
257      url='https://mail.google.com/mail/',
258      page_set=page_set)
259
260    self.credentials = 'google'
261
262  def RunNavigateSteps(self, action_runner):
263    action_runner.NavigateToPage(self)
264    action_runner.WaitForJavaScriptCondition(
265        'document.getElementById("og_user_warning") !== null')
266    action_runner.WaitForJavaScriptCondition(
267        'document.getElementById("og_user_warning") === null')
268
269  def RunSmoothness(self, action_runner):
270    action_runner.RunAction(ScrollAction(
271      {
272        'scrollable_element_function':
273          ('function(callback) {'
274           'callback(document.getElementById("views")'
275           '.childNodes[1].firstChild); }')
276      }))
277    action_runner.RunAction(ScrollAction(
278      {
279        'scrollable_element_function':
280          ('function(callback) { '
281           'callback(document.getElementById("views")'
282           '.childNodes[1].firstChild); }')
283      }))
284
285
286class Page18(KeyMobileSitesPage):
287
288  """ Why: crbug.com/169827 """
289
290  def __init__(self, page_set):
291    super(Page18, self).__init__(
292      url='http://slashdot.org/',
293      page_set=page_set)
294
295    self.fastpath = True
296
297
298class Page19(KeyMobileSitesPage):
299
300  """ Why: #5 Alexa news """
301
302  def __init__(self, page_set):
303    super(Page19, self).__init__(
304      url='http://www.reddit.com/r/programming/comments/1g96ve',
305      page_set=page_set)
306
307    self.fastpath = True
308
309
310class Page20(KeyMobileSitesPage):
311
312  """ Why: Problematic use of fixed position elements """
313
314  def __init__(self, page_set):
315    super(Page20, self).__init__(
316      url='http://www.boingboing.net',
317      page_set=page_set)
318
319    self.fastpath = True
320
321
322class Page21(KeyMobileSitesPage):
323
324  """ Why: crbug.com/172906 """
325
326  def __init__(self, page_set):
327    super(Page21, self).__init__(
328      url='http://groupcloned.com',
329      page_set=page_set)
330
331    self.disabled = ('Page behaves non-deterministically, replaced with test'
332                     'version for now')
333
334  def RunNavigateSteps(self, action_runner):
335    action_runner.NavigateToPage(self)
336    action_runner.Wait(5)
337    action_runner.WaitForJavaScriptCondition('''
338        document.getElementById("element-19") !== null &&
339        document.getElementById("element-19").contentDocument
340          .getElementById("element-22") !== null &&
341        document.getElementById("element-19").contentDocument
342          .getElementsByClassName(
343              "container list-item gc-list-item stretched").length !== 0''')
344
345  def RunSmoothness(self, action_runner):
346    action_runner.RunAction(ScrollAction(
347      {
348        'scroll_distance_function': '''
349          function() {
350            return Math.max(0, 1250 + document.getElementById("element-19")
351                                              .contentDocument
352                                              .getElementById("element-22")
353                                              .getBoundingClientRect().top);
354          }''',
355        'scroll_requires_touch': True
356      }))
357
358
359class Page22(KeyMobileSitesPage):
360
361  """ Why: crbug.com/172906 """
362
363  def __init__(self, page_set):
364    super(Page22, self).__init__(
365      url='http://groupcloned.com/test/list-images-variable/index.html',
366      page_set=page_set)
367
368  def RunNavigateSteps(self, action_runner):
369    action_runner.NavigateToPage(self)
370    action_runner.WaitForJavaScriptCondition(
371        'document.getElementById("element-5") !== null')
372
373  def RunSmoothness(self, action_runner):
374    action_runner.RunAction(ScrollAction(
375      {
376        'scroll_distance_function': '''
377          function() {
378            return Math.max(0, 1250 +
379              document.getElementById("element-5").getBoundingClientRect().top);
380          }''',
381        'scroll_requires_touch': True
382      }))
383
384
385class Page23(KeyMobileSitesPage):
386
387  """ Why: crbug.com/231413 """
388
389  def __init__(self, page_set):
390    super(Page23, self).__init__(
391      url='http://forecast.io',
392      page_set=page_set)
393
394    self.disabled = u"Doesn't scroll; crbug.com/249736"
395
396
397class Page24(KeyMobileSitesPage):
398
399  """ Why: Google News: accelerated scrolling version """
400
401  def __init__(self, page_set):
402    super(Page24, self).__init__(
403      url='http://mobile-news.sandbox.google.com/news/pt1',
404      page_set=page_set)
405
406  def RunNavigateSteps(self, action_runner):
407    action_runner.NavigateToPage(self)
408    action_runner.WaitForJavaScriptCondition(
409        'typeof NEWS_telemetryReady !== "undefined" && '
410        'NEWS_telemetryReady == true')
411
412
413class Page25(KeyMobileSitesPage):
414
415  """
416  Why: Google News: this iOS version is slower than accelerated scrolling
417  """
418
419  def __init__(self, page_set):
420    super(Page25, self).__init__(
421      url='http://mobile-news.sandbox.google.com/news/pt0',
422      page_set=page_set)
423
424  def RunNavigateSteps(self, action_runner):
425    action_runner.NavigateToPage(self)
426    action_runner.WaitForJavaScriptCondition(
427        'document.getElementById(":h") != null')
428    action_runner.Wait(1)
429
430  def RunSmoothness(self, action_runner):
431    action_runner.RunAction(ScrollAction(
432      {
433        'scroll_requires_touch': True,
434        'scrollable_element_function': '''
435          function(callback) {
436            callback(document.getElementById(':5'));
437          }''',
438        'scroll_distance_function': '''
439          function() {
440            return Math.max(0, 2500 +
441              document.getElementById(':h').getBoundingClientRect().top);
442          }'''
443      }))
444
445
446class Page26(KeyMobileSitesPage):
447
448  """
449  Why: #1 world commerce website by visits; #3 commerce in the US by time spent
450  """
451
452  def __init__(self, page_set):
453    super(Page26, self).__init__(
454      url='http://www.amazon.com/gp/aw/s/ref=is_box_?k=nicolas+cage',
455      page_set=page_set)
456
457  def RunSmoothness(self, action_runner):
458    action_runner.RunAction(ScrollAction(
459      {
460        'scrollable_element_function': '''
461          function(callback) {
462            callback(document.getElementById('search'));
463          }''',
464        'scroll_distance_function': '''
465          function() {
466            return document.body.scrollHeight - window.innerHeight;
467          }'''
468      }))
469
470
471class KeyMobileSitesPageSet(page_set_module.PageSet):
472
473  """ Key mobile sites """
474
475  def __init__(self):
476    super(KeyMobileSitesPageSet, self).__init__(
477      credentials_path='data/credentials.json',
478      user_agent_type='mobile',
479      archive_data_file='data/key_mobile_sites.json',
480      bucket=page_set_module.PARTNER_BUCKET)
481
482    self.AddPage(Page1(self))
483    self.AddPage(Page2(self))
484    self.AddPage(Page3(self))
485    self.AddPage(Page4(self))
486    self.AddPage(Page5(self))
487    self.AddPage(Page6(self))
488    self.AddPage(Page7(self))
489    self.AddPage(Page8(self))
490    self.AddPage(Page9(self))
491    self.AddPage(Page10(self))
492    self.AddPage(Page11(self))
493    self.AddPage(Page12(self))
494#    self.AddPage(Page13(self))
495    self.AddPage(Page14(self))
496#    self.AddPage(Page15(self))
497    self.AddPage(Page16(self))
498    self.AddPage(Page17(self))
499    self.AddPage(Page18(self))
500    self.AddPage(Page19(self))
501    self.AddPage(Page20(self))
502    self.AddPage(Page21(self))
503    self.AddPage(Page22(self))
504#    self.AddPage(Page23(self))
505    self.AddPage(Page24(self))
506    self.AddPage(Page25(self))
507    self.AddPage(Page26(self))
508
509    urls_list = [
510      # Why: crbug.com/242544
511      ('http://www.androidpolice.com/2012/10/03/rumor-evidence-mounts-that-an-'
512       'lg-optimus-g-nexus-is-coming-along-with-a-nexus-phone-certification-'
513       'program/'),
514      # Why: crbug.com/149958
515      'http://gsp.ro',
516      # Why: Top tech blog
517      'http://theverge.com',
518      # Why: Top tech site
519      'http://digg.com',
520      # Why: Top Google property; a Google tab is often open
521      'https://www.google.com/#hl=en&q=barack+obama',
522      # Why: #1 news worldwide (Alexa global)
523      'http://news.yahoo.com',
524      # Why: #2 news worldwide
525      'http://www.cnn.com',
526      # Why: #1 commerce website by time spent by users in US
527      'http://shop.mobileweb.ebay.com/searchresults?kw=viking+helmet',
528      # Why: #1 Alexa recreation
529      # pylint: disable=C0301
530      'http://www.booking.com/searchresults.html?src=searchresults&latitude=65.0500&longitude=25.4667',
531      # Why: #1 Alexa sports
532      'http://sports.yahoo.com/',
533      # Why: Top tech blog
534      'http://techcrunch.com',
535      # Why: #6 Alexa sports
536      'http://mlb.com/',
537      # Why: #14 Alexa California
538      'http://www.sfgate.com/',
539      # Why: Non-latin character set
540      'http://worldjournal.com/',
541      # Why: Mobile wiki
542      'http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria',
543      # Why: #15 Alexa news
544      'http://online.wsj.com/home-page',
545      # Why: Image-heavy mobile site
546      'http://www.deviantart.com/',
547      # Why: Top search engine
548      ('http://www.baidu.com/s?wd=barack+obama&rsv_bp=0&rsv_spt=3&rsv_sug3=9&'
549       'rsv_sug=0&rsv_sug4=3824&rsv_sug1=3&inputT=4920'),
550      # Why: Top search engine
551      'http://www.bing.com/search?q=sloths'
552    ]
553
554    for url in urls_list:
555      self.AddPage(KeyMobileSitesPage(url, self))
556