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

Unified Diff: tools/perf/page_sets/system_health/browsing_stories.py

Issue 2787103003: Add System health stories for Emerging market (Closed)
Patch Set: nits. Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: tools/perf/page_sets/system_health/browsing_stories.py
diff --git a/tools/perf/page_sets/system_health/browsing_stories.py b/tools/perf/page_sets/system_health/browsing_stories.py
index 8d5ac935d8503c05d11bece299827635e1659110..6cabc99f00d03685f9dbe6e422720295cf2b9395 100644
--- a/tools/perf/page_sets/system_health/browsing_stories.py
+++ b/tools/perf/page_sets/system_health/browsing_stories.py
@@ -1,4 +1,3 @@
-# encoding: utf-8
# Copyright 2016 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.
@@ -7,13 +6,10 @@ from page_sets.system_health import platforms
from page_sets.system_health import story_tags
from page_sets.system_health import system_health_story
-from page_sets.login_helpers import pinterest_login
-
from telemetry import decorators
-from telemetry.util import js_template
-class _BrowsingStory(system_health_story.SystemHealthStory):
+class BrowsingStory(system_health_story.SystemHealthStory):
"""Abstract base class for browsing stories.
A browsing story visits items on the main page. Subclasses provide
@@ -51,19 +47,14 @@ class _BrowsingStory(system_health_story.SystemHealthStory):
self._WaitForNavigation(action_runner)
-##############################################################################
-# News browsing stories.
-##############################################################################
-
-
-class _NewsBrowsingStory(_BrowsingStory):
- """Abstract base class for news user stories.
+class ArticleBrowsingStory(BrowsingStory):
+ """Abstract base class for user stories browsing news / shopping articles.
- A news story imitates browsing a news website:
+ An article browsing story imitates browsing a articles:
1. Load the main page.
- 2. Open and scroll the first news item.
+ 2. Open and scroll the first article.
3. Go back to the main page and scroll it.
- 4. Open and scroll the second news item.
+ 4. Open and scroll the second article.
5. Go back to the main page and scroll it.
6. etc.
"""
@@ -77,11 +68,11 @@ class _NewsBrowsingStory(_BrowsingStory):
def _DidLoadDocument(self, action_runner):
for i in xrange(self.ITEMS_TO_VISIT):
self._NavigateToItem(action_runner, i)
- self._ReadNewsItem(action_runner)
+ self._ReadNextArticle(action_runner)
self._NavigateBack(action_runner)
self._ScrollMainPage(action_runner)
- def _ReadNewsItem(self, action_runner):
+ def _ReadNextArticle(self, action_runner):
action_runner.tab.WaitForDocumentReadyStateToBeComplete()
action_runner.Wait(self.ITEM_READ_TIME_IN_SECONDS/2.0)
action_runner.RepeatableBrowserDrivenScroll(
@@ -94,7 +85,12 @@ class _NewsBrowsingStory(_BrowsingStory):
repeat_count=self.MAIN_PAGE_SCROLL_REPEAT)
-class CnnStory(_NewsBrowsingStory):
+##############################################################################
+# News browsing stories.
+##############################################################################
+
+
+class CnnStory(ArticleBrowsingStory):
"""The second top website in http://www.alexa.com/topsites/category/News"""
NAME = 'browse:news:cnn'
URL = 'http://edition.cnn.com/'
@@ -103,7 +99,7 @@ class CnnStory(_NewsBrowsingStory):
TAGS = [story_tags.JAVASCRIPT_HEAVY]
-class FacebookMobileStory(_NewsBrowsingStory):
+class FacebookMobileStory(ArticleBrowsingStory):
NAME = 'browse:social:facebook'
URL = 'https://www.facebook.com/rihanna'
ITEM_SELECTOR = 'article ._5msj'
@@ -113,7 +109,7 @@ class FacebookMobileStory(_NewsBrowsingStory):
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
-class FacebookDesktopStory(_NewsBrowsingStory):
+class FacebookDesktopStory(ArticleBrowsingStory):
NAME = 'browse:social:facebook'
URL = 'https://www.facebook.com/rihanna'
ITEM_SELECTOR = '._4-eo'
@@ -123,7 +119,7 @@ class FacebookDesktopStory(_NewsBrowsingStory):
SUPPORTED_PLATFORMS = platforms.NO_PLATFORMS
-class FlipboardMobileStory(_NewsBrowsingStory):
+class FlipboardMobileStory(ArticleBrowsingStory):
NAME = 'browse:news:flipboard'
URL = 'https://flipboard.com/explore'
IS_SINGLE_PAGE_APP = True
@@ -136,7 +132,7 @@ class FlipboardMobileStory(_NewsBrowsingStory):
return possible_browser.platform.IsSvelte() # crbug.com/668097
-class FlipboardDesktopStory(_NewsBrowsingStory):
+class FlipboardDesktopStory(ArticleBrowsingStory):
NAME = 'browse:news:flipboard'
URL = 'https://flipboard.com/explore'
IS_SINGLE_PAGE_APP = True
@@ -146,13 +142,13 @@ class FlipboardDesktopStory(_NewsBrowsingStory):
# crbug.com/657665 for win and mac
@decorators.Disabled('win', 'mac')
-class HackerNewsStory(_NewsBrowsingStory):
+class HackerNewsStory(ArticleBrowsingStory):
NAME = 'browse:news:hackernews'
URL = 'https://news.ycombinator.com'
ITEM_SELECTOR = '.athing .title > a'
-class NytimesMobileStory(_NewsBrowsingStory):
+class NytimesMobileStory(ArticleBrowsingStory):
"""The third top website in http://www.alexa.com/topsites/category/News"""
NAME = 'browse:news:nytimes'
URL = 'http://mobile.nytimes.com'
@@ -162,7 +158,7 @@ class NytimesMobileStory(_NewsBrowsingStory):
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
-class NytimesDesktopStory(_NewsBrowsingStory):
+class NytimesDesktopStory(ArticleBrowsingStory):
"""The third top website in http://www.alexa.com/topsites/category/News"""
NAME = 'browse:news:nytimes'
URL = 'http://www.nytimes.com'
@@ -172,7 +168,7 @@ class NytimesDesktopStory(_NewsBrowsingStory):
# Desktop qq.com opens a news item in a separate tab, for which the back button
# does not work.
-class QqMobileStory(_NewsBrowsingStory):
+class QqMobileStory(ArticleBrowsingStory):
NAME = 'browse:news:qq'
URL = 'http://news.qq.com'
ITEM_SELECTOR = '.list .full a'
@@ -180,7 +176,7 @@ class QqMobileStory(_NewsBrowsingStory):
TAGS = [story_tags.INTERNATIONAL]
-class RedditDesktopStory(_NewsBrowsingStory):
+class RedditDesktopStory(ArticleBrowsingStory):
"""The top website in http://www.alexa.com/topsites/category/News"""
NAME = 'browse:news:reddit'
URL = 'https://www.reddit.com/r/news/top/?sort=top&t=week'
@@ -188,7 +184,7 @@ class RedditDesktopStory(_NewsBrowsingStory):
SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
-class RedditMobileStory(_NewsBrowsingStory):
+class RedditMobileStory(ArticleBrowsingStory):
"""The top website in http://www.alexa.com/topsites/category/News"""
NAME = 'browse:news:reddit'
URL = 'https://www.reddit.com/r/news/top/?sort=top&t=week'
@@ -197,7 +193,7 @@ class RedditMobileStory(_NewsBrowsingStory):
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
-class TwitterMobileStory(_NewsBrowsingStory):
+class TwitterMobileStory(ArticleBrowsingStory):
NAME = 'browse:social:twitter'
URL = 'https://www.twitter.com/nasa'
ITEM_SELECTOR = '.Tweet-text'
@@ -206,7 +202,7 @@ class TwitterMobileStory(_NewsBrowsingStory):
@decorators.Disabled('win') # crbug.com/662971
-class TwitterDesktopStory(_NewsBrowsingStory):
+class TwitterDesktopStory(ArticleBrowsingStory):
NAME = 'browse:social:twitter'
URL = 'https://www.twitter.com/nasa'
IS_SINGLE_PAGE_APP = True
@@ -214,7 +210,7 @@ class TwitterDesktopStory(_NewsBrowsingStory):
SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
-class WashingtonPostMobileStory(_NewsBrowsingStory):
+class WashingtonPostMobileStory(ArticleBrowsingStory):
"""Progressive website"""
NAME = 'browse:news:washingtonpost'
URL = 'https://www.washingtonpost.com/pwa'
@@ -237,253 +233,102 @@ class WashingtonPostMobileStory(_NewsBrowsingStory):
##############################################################################
-# Search browsing stories.
-##############################################################################
-
-
-@decorators.Disabled('win') # crbug.com/673775
-class GoogleDesktopStory(_NewsBrowsingStory):
- """
- A typical google search story:
- _ Start at https://www.google.com/search?q=flower
- _ Click on the wikipedia link & navigate to
- https://en.wikipedia.org/wiki/Flower
- _ Scroll down the wikipedia page about flower.
- _ Back to the search main page.
- _ Refine the search query to 'flower delivery'.
- _ Scroll down the page.
- _ Click the next page result of 'flower delivery'.
- _ Scroll the search page.
-
- """
- NAME = 'browse:search:google'
- URL = 'https://www.google.com/search?q=flower'
- _SEARCH_BOX_SELECTOR = 'input[aria-label="Search"]'
- _SEARCH_PAGE_2_SELECTOR = 'a[aria-label=\'Page 2\']'
- SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
-
- def _DidLoadDocument(self, action_runner):
- # Click on flower Wikipedia link.
- action_runner.Wait(2)
- action_runner.ClickElement(text='Flower - Wikipedia')
- action_runner.WaitForNavigate()
-
- # Scroll the flower Wikipedia page, then navigate back.
- action_runner.Wait(2)
- action_runner.ScrollPage()
- action_runner.Wait(2)
- action_runner.NavigateBack()
-
- # Click on the search box.
- action_runner.WaitForElement(selector=self._SEARCH_BOX_SELECTOR)
- action_runner.ClickElement(selector=self._SEARCH_BOX_SELECTOR)
- action_runner.Wait(2)
-
- # Submit search query.
- action_runner.EnterText(' delivery')
- action_runner.Wait(0.5)
- action_runner.PressKey('Return')
-
- # Scroll down & click next search result page.
- action_runner.Wait(2)
- action_runner.ScrollPageToElement(selector=self._SEARCH_PAGE_2_SELECTOR)
- action_runner.Wait(2)
- action_runner.ClickElement(selector=self._SEARCH_PAGE_2_SELECTOR)
- action_runner.Wait(2)
- action_runner.ScrollPage()
-
-
-class GoogleIndiaDesktopStory(_NewsBrowsingStory):
- """
- A typical google search story in India:
- 1. Start at https://www.google.co.in/search?q=%E0%A4%AB%E0%A5%82%E0%A4%B2`
- 2. Scroll down the page.
- 3. Refine the query & click search box, which navigates to
- https://www.google.co.in/search?q=%E0%A4%AB%E0%A5%82%E0%A4%B2&rct=j#q=%E0%A4%AB%E0%A5%82%E0%A4%B2+%E0%A4%B5%E0%A4%BF%E0%A4%A4%E0%A4%B0%E0%A4%A3
- 4. Scroll down the page.
- 5. Click the next page result
- 6. Scroll the search result page.
-
- """
- NAME = 'browse:search:google_india'
- URL = 'https://www.google.co.in/search?q=%E0%A4%AB%E0%A5%82%E0%A4%B2'
- _SEARCH_BOX_SELECTOR = 'input[aria-label="Search"]'
- _SEARCH_BUTTON_SELECTOR = 'button[aria-label="Google Search"]'
- _SEARCH_PAGE_2_SELECTOR = 'a[aria-label=\'Page 2\']'
- SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
- TAGS = [story_tags.INTERNATIONAL]
-
- def _DidLoadDocument(self, action_runner):
- action_runner.Wait(2)
- action_runner.ScrollPage()
- action_runner.Wait(2)
-
- action_runner.ScrollPage(direction='up')
-
- # Refine search query in the search box.
- # TODO(nednguyen): replace this with input text gesture to make it more
- # realistic.
- action_runner.ExecuteJavaScript(
- js_template.Render(
- 'document.querySelector({{ selector }}).value += "वितरण";',
- selector=self._SEARCH_BOX_SELECTOR))
- action_runner.Wait(2)
- action_runner.ClickElement(selector=self._SEARCH_BUTTON_SELECTOR)
-
- # Scroll down & click next search result page.
- action_runner.Wait(2)
- action_runner.ScrollPageToElement(selector=self._SEARCH_PAGE_2_SELECTOR)
- action_runner.Wait(2)
- action_runner.ClickElement(selector=self._SEARCH_PAGE_2_SELECTOR)
- action_runner.Wait(2)
- action_runner.ScrollPage()
-
-
-##############################################################################
-# Media browsing stories.
+# Emerging market browsing stories.
##############################################################################
-class _MediaBrowsingStory(_BrowsingStory):
- """Abstract base class for media user stories
-
- A media story imitates browsing a website with photo or video content:
- 1. Load a page showing a media item
- 2. Click on the next link to go to the next media item
- 3. etc.
- """
-
- ABSTRACT_STORY = True
- ITEM_VIEW_TIME_IN_SECONDS = 3
- ITEMS_TO_VISIT = 15
- ITEM_SELECTOR_INDEX = 0
- INCREMENT_INDEX_AFTER_EACH_ITEM = False
-
- def _DidLoadDocument(self, action_runner):
- index = self.ITEM_SELECTOR_INDEX
- for _ in xrange(self.ITEMS_TO_VISIT):
- self._NavigateToItem(action_runner, index)
- self._ViewMediaItem(action_runner, index)
- if self.INCREMENT_INDEX_AFTER_EACH_ITEM:
- index += 1
+class BrowseFlipKartMobileStory(ArticleBrowsingStory):
+ NAME = 'browse:shopping:flipkart'
+ URL = 'https://flipkart.com/search?q=Mobile%20phone'
+ SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+ TAGS = [story_tags.EMERGING_MARKET]
+ ITEM_SELECTOR = '.mEOukM'
+ BACK_SELECTOR = '._3NH1qf'
+ ITEMS_TO_VISIT = 4
+ IS_SINGLE_PAGE_APP = True
- def _ViewMediaItem(self, action_runner, index):
- del index # Unused.
- action_runner.tab.WaitForDocumentReadyStateToBeComplete()
- action_runner.Wait(self.ITEM_VIEW_TIME_IN_SECONDS)
+ def _NavigateBack(self, action_runner):
+ action_runner.ClickElement(selector=self.BACK_SELECTOR)
-class ImgurMobileStory(_MediaBrowsingStory):
- NAME = 'browse:media:imgur'
- URL = 'http://imgur.com/gallery/5UlBN'
- ITEM_SELECTOR = '.Navbar-customAction'
+class BrowseAmazonMobileStory(ArticleBrowsingStory):
+ NAME = 'browse:shopping:amazon'
+ URL = 'https://www.amazon.co.in/s/?field-keywords=Mobile'
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
- IS_SINGLE_PAGE_APP = True
-
+ TAGS = [story_tags.EMERGING_MARKET]
-# crbug.com/704197 for win and mac
-@decorators.Disabled('win', 'mac')
-class ImgurDesktopStory(_MediaBrowsingStory):
- NAME = 'browse:media:imgur'
- URL = 'http://imgur.com/gallery/5UlBN'
- ITEM_SELECTOR = '.navNext'
- SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
- IS_SINGLE_PAGE_APP = True
+ ITEM_SELECTOR = ('[class=\\"a-spacing-none a-link-normal sx-table-product '
+ 'aw-search-results\\"]')
perezju 2017/04/10 10:13:56 I'm not expert on CSS selectors, but is there a wa
ssid 2017/04/11 03:55:57 Cool. Didn't know this was possible.
+ ITEMS_TO_VISIT = 4
-class YouTubeMobileStory(_MediaBrowsingStory):
- NAME = 'browse:media:youtube'
- URL = 'https://m.youtube.com/watch?v=QGfhS1hfTWw&autoplay=false'
- ITEM_SELECTOR = '._mhgb > a'
+class BrowseLazadaMobileStory(ArticleBrowsingStory):
+ NAME = 'browse:shopping:lazada'
+ URL = 'https://www.lazada.co.id/catalog/?q=Wrist+watch'
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
- IS_SINGLE_PAGE_APP = True
- ITEM_SELECTOR_INDEX = 3
- TAGS = [story_tags.JAVASCRIPT_HEAVY]
+ TAGS = [story_tags.EMERGING_MARKET]
-
-class YouTubeDesktopStory(_MediaBrowsingStory):
- NAME = 'browse:media:youtube'
- URL = 'https://www.youtube.com/watch?v=QGfhS1hfTWw&autoplay=false'
- ITEM_SELECTOR = '.yt-uix-simple-thumb-related'
- SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
- IS_SINGLE_PAGE_APP = True
- # A longer view time allows videos to load and play.
- ITEM_VIEW_TIME_IN_SECONDS = 5
- ITEMS_TO_VISIT = 8
- ITEM_SELECTOR_INDEX = 3
- PLATFORM_SPECIFIC = True
- TAGS = [story_tags.JAVASCRIPT_HEAVY]
+ ITEM_SELECTOR = '.merchandise__link'
+ ITEMS_TO_VISIT = 1
-class FacebookPhotosMobileStory(_MediaBrowsingStory):
- NAME = 'browse:media:facebook_photos'
- URL = (
- 'https://m.facebook.com/rihanna/photos/a.207477806675.138795.10092511675/10153911739606676/?type=3&source=54&ref=page_internal')
- ITEM_SELECTOR = '._57-r.touchable'
+class BrowseTOIMobileStory(ArticleBrowsingStory):
+ NAME = 'browse:news:toi'
+ URL = 'http://m.timesofindia.com'
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
- IS_SINGLE_PAGE_APP = True
- ITEM_SELECTOR_INDEX = 0
+ TAGS = [story_tags.EMERGING_MARKET]
+ ITEMS_TO_VISIT = 4
+ ITEM_SELECTOR = '[onerror=\\"this.style.display=\'none\'\\"]'
perezju 2017/04/10 10:13:56 :( I guess there is no better way to match these i
ssid 2017/04/11 03:55:57 There is this other way. But i thought dummy_img l
-class FacebookPhotosDesktopStory(_MediaBrowsingStory):
- NAME = 'browse:media:facebook_photos'
- URL = (
- 'https://www.facebook.com/rihanna/photos/a.207477806675.138795.10092511675/10153911739606676/?type=3&theater')
- ITEM_SELECTOR = '.snowliftPager.next'
- # Recording currently does not work. The page gets stuck in the
- # theater viewer.
- SUPPORTED_PLATFORMS = platforms.NO_PLATFORMS
- IS_SINGLE_PAGE_APP = True
+##############################################################################
+# Maps browsing stories.
+##############################################################################
-class TumblrDesktopStory(_MediaBrowsingStory):
- NAME = 'browse:media:tumblr'
- URL = 'https://tumblr.com/search/gifs'
- ITEM_SELECTOR = '.photo'
- IS_SINGLE_PAGE_APP = True
- ITEMS_TO_VISIT = 8
- INCREMENT_INDEX_AFTER_EACH_ITEM = True
- SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
- def _ViewMediaItem(self, action_runner, index):
- super(TumblrDesktopStory, self)._ViewMediaItem(action_runner, index)
- action_runner.MouseClick(selector='#tumblr_lightbox_center_image')
- action_runner.Wait(1) # To make browsing more realistic.
+class GoogleMapsMobileStory(ArticleBrowsingStory):
perezju 2017/04/10 10:13:56 does this really need to subclass ArticleBrowsingS
ssid 2017/04/11 03:55:57 Sorry fixed.
+ NAME = 'browse:tools:maps'
+ URL = 'https://maps.google.com/'
+ SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+ TAGS = [story_tags.EMERGING_MARKET]
-class PinterestDesktopStory(_MediaBrowsingStory):
- NAME = 'browse:media:pinterest'
- URL = 'https://pinterest.com'
- ITEM_SELECTOR = '.pinImageDim'
- IS_SINGLE_PAGE_APP = True
- ITEMS_TO_VISIT = 8
- INCREMENT_INDEX_AFTER_EACH_ITEM = True
- SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+ _MAPS_SEARCH_BOX_SELECTOR = '.ml-searchbox-placeholder'
+ _RESTAURANTS_LOADED = '.ml-panes-categorical-list-results'
+ _SEARCH_NEW_AREA_SELECTOR = '.ml-reissue-search-button-inner'
+ _RESTAURANTS_LINK = '.ml-entity-list-item-info'
+ _DIRECTIONS_LINK = '[class="ml-button ml-inner-button-directions-fab"]'
+ _DIRECTIONS_LOADED = ('[class="ml-fab-inner '
+ 'ml-button ml-button-navigation-fab"]')
+ _MAP_LAYER = '.ml-map'
- def _Login(self, action_runner):
- pinterest_login.LoginDesktopAccount(action_runner, 'googletest',
- self.credentials_path)
-
- def _ViewMediaItem(self, action_runner, index):
- super(PinterestDesktopStory, self)._ViewMediaItem(action_runner, index)
- # To imitate real user interaction, we do not want to pin every post.
- # We will only pin every other post.
- if index % 2 == 0:
- # Pin the selection.
- save_function = ('document.querySelector('
- '".Button.Module.ShowModalButton.btn.hasIcon.hasText.'
- 'isBrioFlat.medium.primary.primaryOnHover.repin.'
- 'pinActionBarButton.isBrioFlat.rounded")')
- action_runner.ClickElement(element_function=save_function)
- action_runner.Wait(1) # Wait to make navigation realistic.
- # Select which board to pin to.
- inner_save_function = 'document.querySelector(".nameAndIcons")'
- action_runner.WaitForElement(element_function=inner_save_function)
- action_runner.ClickElement(element_function=inner_save_function)
- action_runner.Wait(1) # Wait to make navigation realistic.
-
- # Close selection.
- x_element_function = ('document.querySelector('
- '".Button.borderless.close.visible")')
- action_runner.ClickElement(element_function=x_element_function)
- action_runner.Wait(1) # Wait to make navigation realistic.
+ def _DidLoadDocument(self, action_runner):
+ # Submit search query.
+ self._ClickLink(self._MAPS_SEARCH_BOX_SELECTOR, action_runner)
+ action_runner.EnterText('restaurants near me')
+ action_runner.PressKey('Return')
+ action_runner.WaitForElement(selector=self._RESTAURANTS_LOADED)
+ action_runner.WaitForNetworkQuiescence()
+ action_runner.Wait(4) # User looking at restaurants
+
+ # Open the restaurant list and select the first.
+ self._ClickLink(self._RESTAURANTS_LOADED, action_runner)
+ action_runner.WaitForElement(selector=self._RESTAURANTS_LINK)
+ action_runner.Wait(3) # User reads about restaurant
+ self._ClickLink(self._RESTAURANTS_LINK, action_runner)
+ action_runner.Wait(1) # Reading description
+
+ # Open directions to the restaurant from Google.
+ self._ClickLink(self._DIRECTIONS_LINK, action_runner)
+ action_runner.Wait(0.5)
+ action_runner.EnterText('Google Mountain View')
+ action_runner.PressKey('Return')
+ action_runner.WaitForElement(selector=self._DIRECTIONS_LOADED)
+ action_runner.PinchElement(selector=self._MAP_LAYER)
+ action_runner.WaitForNetworkQuiescence()
+ action_runner.Wait(2) # Seeing direction
+
+ def _ClickLink(self, selector, action_runner):
+ action_runner.WaitForElement(selector=selector)
+ action_runner.ClickElement(selector=selector)

Powered by Google App Engine
This is Rietveld 408576698