blob: fd49ae834e3c4305f175a37c2631ab4dc773e372 [file] [log] [blame]
# Copyright (c) 2009 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.
"""Automates IE to visit a list of web sites while running CF in full tab mode.
The page cycler automates IE and navigates it to a series of URLs. It is
designed to be run with Chrome Frame configured to load every URL inside
CF full tab mode.
TODO(robertshield): Make use of the python unittest module as per
review comments.
"""
import optparse
import sys
import time
import win32com.client
import win32gui
def LoadSiteList(path):
"""Loads a list of URLs from |path|.
Expects the URLs to be separated by newlines, with no leading or trailing
whitespace.
Args:
path: The path to a file containing a list of new-line separated URLs.
Returns:
A list of strings, each one a URL.
"""
f = open(path)
urls = f.readlines()
f.close()
return urls
def LaunchIE():
"""Starts up IE, makes it visible and returns the automation object.
Returns:
The IE automation object.
"""
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.visible = 1
win32gui.SetForegroundWindow(ie.HWND)
return ie
def RunTest(url, ie):
"""Loads |url| into the InternetExplorer.Application instance in |ie|.
Waits for the Document object to be created and then waits for
the document ready state to reach READYSTATE_COMPLETE.
Args:
url: A string containing the url to navigate to.
ie: The IE automation object to navigate.
"""
print "Navigating to " + url
ie.Navigate(url)
timer = 0
READYSTATE_COMPLETE = 4
last_ready_state = -1
for retry in xrange(60):
try:
# TODO(robertshield): Become an event sink instead of polling for
# changes to the ready state.
last_ready_state = ie.Document.ReadyState
if last_ready_state == READYSTATE_COMPLETE:
break
except:
# TODO(robertshield): Find the precise exception related to ie.Document
# being not accessible and handle it here.
print "Unexpected error:", sys.exc_info()[0]
raise
time.sleep(1)
if last_ready_state != READYSTATE_COMPLETE:
print "Timeout waiting for " + url
def main():
parser = optparse.OptionParser()
parser.add_option('-u', '--url_list', default='urllist',
help='The path to the list of URLs')
(opts, args) = parser.parse_args()
urls = LoadSiteList(opts.url_list)
ie = LaunchIE()
for url in urls:
RunTest(url, ie)
time.sleep(1)
ie.visible = 0
ie.Quit()
if __name__ == '__main__':
main()