Index: chrome_frame/tools/test/page_cycler/cf_cycler.py |
=================================================================== |
--- chrome_frame/tools/test/page_cycler/cf_cycler.py (revision 0) |
+++ chrome_frame/tools/test/page_cycler/cf_cycler.py (revision 0) |
@@ -0,0 +1,99 @@ |
+# 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() |