blob: eb8f154fd99903c8b7a4955e06b8a9c4b6c8ed37 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from telemetry.page import page as page_module
from telemetry.page import page_set as page_set_module
class KeyMobileSitesPage(page_module.Page):
def __init__(self, url, page_set, name=''):
super(KeyMobileSitesPage, self).__init__(url=url, page_set=page_set,
name=name)
self.credentials_path = 'data/credentials.json'
self.user_agent_type = 'mobile'
self.archive_data_file = 'data/key_mobile_sites.json'
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollPage()
interaction.End()
def RunRepaint(self, action_runner):
action_runner.RepaintContinuously(seconds=5)
class Page1(KeyMobileSitesPage):
""" Why: Top news site """
def __init__(self, page_set):
super(Page1, self).__init__(
url='http://nytimes.com/',
page_set=page_set)
self.fastpath = True
class Page2(KeyMobileSitesPage):
""" Why: Typical mobile business site """
def __init__(self, page_set):
super(Page2, self).__init__(
url=('http://iphone.capitolvolkswagen.com/index.htm'
'#new-inventory_p_2Fsb-new_p_2Ehtm_p_3Freset_p_3DInventoryListing'),
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForElement(text='Next 35')
action_runner.WaitForJavaScriptCondition(
'document.body.scrollHeight > 2560')
class Page3(KeyMobileSitesPage):
""" Why: Image-heavy site """
def __init__(self, page_set):
super(Page3, self).__init__(
url='http://cuteoverload.com',
page_set=page_set)
self.fastpath = True
class Page4(KeyMobileSitesPage):
""" Why: Top tech blog """
def __init__(self, page_set):
super(Page4, self).__init__(
# pylint: disable=C0301
url='http://www.theverge.com/2012/10/28/3568746/amazon-7-inch-fire-hd-ipad-mini-ad-ballsy',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'window.Chorus !== undefined &&'
'window.Chorus.Comments !== undefined &&'
'window.Chorus.Comments.Json !== undefined &&'
'(window.Chorus.Comments.loaded ||'
' window.Chorus.Comments.Json.load_comments())')
class Page5(KeyMobileSitesPage):
""" Why: Top news site """
def __init__(self, page_set):
super(Page5, self).__init__(
# pylint: disable=C0301
url='http://www.cnn.com/2012/10/03/politics/michelle-obama-debate/index.html',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.Wait(8)
class Page6(KeyMobileSitesPage):
""" Why: Social; top Google property; Public profile; infinite scrolls """
def __init__(self, page_set):
super(Page6, self).__init__(
# pylint: disable=C0301
url='https://plus.google.com/app/basic/110031535020051778989/posts?source=apppromo',
page_set=page_set)
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollPage()
interaction.End()
class Page7(KeyMobileSitesPage):
""" Why: #1 (Alexa global) """
def __init__(self, page_set):
super(Page7, self).__init__(
url='https://facebook.com/barackobama',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'document.getElementById("u_0_c") !== null &&'
'document.body.scrollHeight > window.innerHeight')
class Page8(KeyMobileSitesPage):
""" Why: #3 (Alexa global) """
def __init__(self, page_set):
super(Page8, self).__init__(
url='http://m.youtube.com/watch?v=9hBpF_Zj4OA',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'document.getElementById("paginatortarget") !== null')
class Page9(KeyMobileSitesPage):
"""
Why: #11 (Alexa global), google property; some blogger layouts have infinite
scroll but more interesting
"""
def __init__(self, page_set):
super(Page9, self).__init__(
url='http://googlewebmastercentral.blogspot.com/',
page_set=page_set,
name='Blogger')
class Page10(KeyMobileSitesPage):
""" Why: #18 (Alexa global), Picked an interesting post """
def __init__(self, page_set):
super(Page10, self).__init__(
# pylint: disable=C0301
url='http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/',
page_set=page_set,
name='Wordpress')
class Page11(KeyMobileSitesPage):
""" Why: #12 (Alexa global),Public profile """
def __init__(self, page_set):
super(Page11, self).__init__(
url='https://www.linkedin.com/in/linustorvalds',
page_set=page_set,
name='LinkedIn')
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'document.getElementById("profile-view-scroller") !== null')
class Page12(KeyMobileSitesPage):
""" Why: #6 (Alexa) most visited worldwide, picked an interesting page """
def __init__(self, page_set):
super(Page12, self).__init__(
url='http://en.wikipedia.org/wiki/Wikipedia',
page_set=page_set,
name='Wikipedia (1 tab)')
class Page13(KeyMobileSitesPage):
""" Why: #8 (Alexa global), picked an interesting page """
def __init__(self, page_set):
super(Page13, self).__init__(
url='http://twitter.com/katyperry',
page_set=page_set,
name='Twitter')
self.disabled = 'Forbidden (Rate Limit Exceeded)'
class Page14(KeyMobileSitesPage):
""" Why: #37 (Alexa global) """
def __init__(self, page_set):
super(Page14, self).__init__(
url='http://pinterest.com',
page_set=page_set,
name='Pinterest')
class Page15(KeyMobileSitesPage):
""" Why: #1 sports """
def __init__(self, page_set):
super(Page15, self).__init__(
url='http://espn.go.com',
page_set=page_set,
name='ESPN')
self.disabled = 'Fails often; crbug.com/249722'
class Page16(KeyMobileSitesPage):
""" Why: #1 Alexa reference """
def __init__(self, page_set):
super(Page16, self).__init__(
# pylint: disable=C0301
url='http://answers.yahoo.com/question/index?qid=20110117024343AAopj8f',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForElement(text='Other Answers (1 - 20 of 149)')
action_runner.ClickElement(text='Other Answers (1 - 20 of 149)')
class Page17(KeyMobileSitesPage):
""" Why: productivity, top google properties """
def __init__(self, page_set):
super(Page17, self).__init__(
url='https://mail.google.com/mail/',
page_set=page_set)
self.credentials = 'google'
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'document.getElementById("og_user_warning") !== null')
action_runner.WaitForJavaScriptCondition(
'document.getElementById("og_user_warning") === null')
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollElement(element_function=(
'document.getElementById("views").childNodes[1].firstChild'))
interaction.End()
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollElement(element_function=(
'document.getElementById("views").childNodes[1].firstChild'))
interaction.End()
class Page18(KeyMobileSitesPage):
""" Why: crbug.com/169827 """
def __init__(self, page_set):
super(Page18, self).__init__(
url='http://slashdot.org/',
page_set=page_set)
self.fastpath = True
class Page19(KeyMobileSitesPage):
""" Why: #5 Alexa news """
def __init__(self, page_set):
super(Page19, self).__init__(
url='http://www.reddit.com/r/programming/comments/1g96ve',
page_set=page_set)
self.fastpath = True
class Page20(KeyMobileSitesPage):
""" Why: Problematic use of fixed position elements """
def __init__(self, page_set):
super(Page20, self).__init__(
url='http://www.boingboing.net',
page_set=page_set)
self.fastpath = True
class Page21(KeyMobileSitesPage):
""" Why: crbug.com/172906 """
def __init__(self, page_set):
super(Page21, self).__init__(
url='http://groupcloned.com',
page_set=page_set)
self.disabled = ('Page behaves non-deterministically, replaced with test'
'version for now')
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.Wait(5)
action_runner.WaitForJavaScriptCondition('''
document.getElementById("element-19") !== null &&
document.getElementById("element-19").contentDocument
.getElementById("element-22") !== null &&
document.getElementById("element-19").contentDocument
.getElementsByClassName(
"container list-item gc-list-item stretched").length !== 0''')
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollPage(
distance_expr='''
Math.max(0, 1250 + document.getElementById("element-19")
.contentDocument
.getElementById("element-22")
.getBoundingClientRect().top);''',
use_touch=True)
interaction.End()
class Page22(KeyMobileSitesPage):
""" Why: crbug.com/172906 """
def __init__(self, page_set):
super(Page22, self).__init__(
url='http://groupcloned.com/test/list-images-variable/index.html',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'document.getElementById("element-5") !== null')
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollPage(
distance_expr='''
Math.max(0, 1250 +
document.getElementById("element-5")
.getBoundingClientRect().top);''',
use_touch=True)
interaction.End()
class Page23(KeyMobileSitesPage):
""" Why: crbug.com/231413 """
def __init__(self, page_set):
super(Page23, self).__init__(
url='http://forecast.io',
page_set=page_set)
self.disabled = u"Doesn't scroll; crbug.com/249736"
class Page24(KeyMobileSitesPage):
""" Why: Google News: accelerated scrolling version """
def __init__(self, page_set):
super(Page24, self).__init__(
url='http://mobile-news.sandbox.google.com/news/pt1',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'typeof NEWS_telemetryReady !== "undefined" && '
'NEWS_telemetryReady == true')
class Page25(KeyMobileSitesPage):
"""
Why: Google News: this iOS version is slower than accelerated scrolling
"""
def __init__(self, page_set):
super(Page25, self).__init__(
url='http://mobile-news.sandbox.google.com/news/pt0',
page_set=page_set)
def RunNavigateSteps(self, action_runner):
action_runner.NavigateToPage(self)
action_runner.WaitForJavaScriptCondition(
'document.getElementById(":h") != null')
action_runner.Wait(1)
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollElement(
element_function='document.getElementById(":5")',
distance_expr='''
Math.max(0, 2500 +
document.getElementById(':h').getBoundingClientRect().top)''',
use_touch=True)
interaction.End()
class Page26(KeyMobileSitesPage):
"""
Why: #1 world commerce website by visits; #3 commerce in the US by time spent
"""
def __init__(self, page_set):
super(Page26, self).__init__(
url='http://www.amazon.com/gp/aw/s/ref=is_box_?k=nicolas+cage',
page_set=page_set)
def RunSmoothness(self, action_runner):
interaction = action_runner.BeginGestureInteraction(
'ScrollAction', is_smooth=True)
action_runner.ScrollElement(
selector='#search',
distance_expr='document.body.scrollHeight - window.innerHeight')
interaction.End()
class KeyMobileSitesPageSet(page_set_module.PageSet):
""" Key mobile sites """
def __init__(self):
super(KeyMobileSitesPageSet, self).__init__(
credentials_path='data/credentials.json',
user_agent_type='mobile',
archive_data_file='data/key_mobile_sites.json',
bucket=page_set_module.PARTNER_BUCKET)
self.AddPage(Page1(self))
self.AddPage(Page2(self))
self.AddPage(Page3(self))
self.AddPage(Page4(self))
self.AddPage(Page5(self))
self.AddPage(Page6(self))
self.AddPage(Page7(self))
self.AddPage(Page8(self))
self.AddPage(Page9(self))
self.AddPage(Page10(self))
self.AddPage(Page11(self))
self.AddPage(Page12(self))
# self.AddPage(Page13(self))
self.AddPage(Page14(self))
# self.AddPage(Page15(self))
self.AddPage(Page16(self))
self.AddPage(Page17(self))
self.AddPage(Page18(self))
self.AddPage(Page19(self))
self.AddPage(Page20(self))
self.AddPage(Page21(self))
self.AddPage(Page22(self))
# self.AddPage(Page23(self))
self.AddPage(Page24(self))
self.AddPage(Page25(self))
self.AddPage(Page26(self))
urls_list = [
# Why: crbug.com/242544
('http://www.androidpolice.com/2012/10/03/rumor-evidence-mounts-that-an-'
'lg-optimus-g-nexus-is-coming-along-with-a-nexus-phone-certification-'
'program/'),
# Why: crbug.com/149958
'http://gsp.ro',
# Why: Top tech blog
'http://theverge.com',
# Why: Top tech site
'http://digg.com',
# Why: Top Google property; a Google tab is often open
'https://www.google.com/#hl=en&q=barack+obama',
# Why: #1 news worldwide (Alexa global)
'http://news.yahoo.com',
# Why: #2 news worldwide
'http://www.cnn.com',
# Why: #1 commerce website by time spent by users in US
'http://shop.mobileweb.ebay.com/searchresults?kw=viking+helmet',
# Why: #1 Alexa recreation
# pylint: disable=C0301
'http://www.booking.com/searchresults.html?src=searchresults&latitude=65.0500&longitude=25.4667',
# Why: #1 Alexa sports
'http://sports.yahoo.com/',
# Why: Top tech blog
'http://techcrunch.com',
# Why: #6 Alexa sports
'http://mlb.com/',
# Why: #14 Alexa California
'http://www.sfgate.com/',
# Why: Non-latin character set
'http://worldjournal.com/',
# Why: Mobile wiki
'http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria',
# Why: #15 Alexa news
'http://online.wsj.com/home-page',
# Why: Image-heavy mobile site
'http://www.deviantart.com/',
# Why: Top search engine
('http://www.baidu.com/s?wd=barack+obama&rsv_bp=0&rsv_spt=3&rsv_sug3=9&'
'rsv_sug=0&rsv_sug4=3824&rsv_sug1=3&inputT=4920'),
# Why: Top search engine
'http://www.bing.com/search?q=sloths'
]
for url in urls_list:
self.AddPage(KeyMobileSitesPage(url, self))