| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can be | |
| 4 # found in the LICENSE file. | |
| 5 | |
| 6 """Automates IE to visit a list of web sites while running CF in full tab mode. | |
| 7 | |
| 8 The page cycler automates IE and navigates it to a series of URLs. It is | |
| 9 designed to be run with Chrome Frame configured to load every URL inside | |
| 10 CF full tab mode. | |
| 11 | |
| 12 TODO(robertshield): Make use of the python unittest module as per | |
| 13 review comments. | |
| 14 """ | |
| 15 | |
| 16 import optparse | |
| 17 import sys | |
| 18 import time | |
| 19 import win32com.client | |
| 20 import win32gui | |
| 21 | |
| 22 def LoadSiteList(path): | |
| 23 """Loads a list of URLs from |path|. | |
| 24 | |
| 25 Expects the URLs to be separated by newlines, with no leading or trailing | |
| 26 whitespace. | |
| 27 | |
| 28 Args: | |
| 29 path: The path to a file containing a list of new-line separated URLs. | |
| 30 | |
| 31 Returns: | |
| 32 A list of strings, each one a URL. | |
| 33 """ | |
| 34 f = open(path) | |
| 35 urls = f.readlines() | |
| 36 f.close() | |
| 37 return urls | |
| 38 | |
| 39 def LaunchIE(): | |
| 40 """Starts up IE, makes it visible and returns the automation object. | |
| 41 | |
| 42 Returns: | |
| 43 The IE automation object. | |
| 44 """ | |
| 45 ie = win32com.client.Dispatch("InternetExplorer.Application") | |
| 46 ie.visible = 1 | |
| 47 win32gui.SetForegroundWindow(ie.HWND) | |
| 48 return ie | |
| 49 | |
| 50 def RunTest(url, ie): | |
| 51 """Loads |url| into the InternetExplorer.Application instance in |ie|. | |
| 52 | |
| 53 Waits for the Document object to be created and then waits for | |
| 54 the document ready state to reach READYSTATE_COMPLETE. | |
| 55 Args: | |
| 56 url: A string containing the url to navigate to. | |
| 57 ie: The IE automation object to navigate. | |
| 58 """ | |
| 59 | |
| 60 print "Navigating to " + url | |
| 61 ie.Navigate(url) | |
| 62 timer = 0 | |
| 63 | |
| 64 READYSTATE_COMPLETE = 4 | |
| 65 | |
| 66 last_ready_state = -1 | |
| 67 for retry in xrange(60): | |
| 68 try: | |
| 69 # TODO(robertshield): Become an event sink instead of polling for | |
| 70 # changes to the ready state. | |
| 71 last_ready_state = ie.Document.ReadyState | |
| 72 if last_ready_state == READYSTATE_COMPLETE: | |
| 73 break | |
| 74 except: | |
| 75 # TODO(robertshield): Find the precise exception related to ie.Document | |
| 76 # being not accessible and handle it here. | |
| 77 print "Unexpected error:", sys.exc_info()[0] | |
| 78 raise | |
| 79 time.sleep(1) | |
| 80 | |
| 81 if last_ready_state != READYSTATE_COMPLETE: | |
| 82 print "Timeout waiting for " + url | |
| 83 | |
| 84 def main(): | |
| 85 parser = optparse.OptionParser() | |
| 86 parser.add_option('-u', '--url_list', default='urllist', | |
| 87 help='The path to the list of URLs') | |
| 88 (opts, args) = parser.parse_args() | |
| 89 | |
| 90 urls = LoadSiteList(opts.url_list) | |
| 91 ie = LaunchIE() | |
| 92 for url in urls: | |
| 93 RunTest(url, ie) | |
| 94 time.sleep(1) | |
| 95 ie.visible = 0 | |
| 96 ie.Quit() | |
| 97 | |
| 98 | |
| 99 if __name__ == '__main__': | |
| 100 main() | |
| OLD | NEW |