1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#!/usr/bin/python
# Copyright (c) 2010 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.
"""PyAuto: Python Interface to Chromium's Automation Proxy.
PyAuto uses swig to expose Automation Proxy interfaces to Python.
For complete documentation on the functionality available,
run pydoc on this file.
Ref: http://dev.chromium.org/developers/pyauto
"""
import os
import sys
import unittest
import bookmark_model
def _LocateBinDirs():
script_dir = os.path.dirname(__file__)
chrome_src = os.path.join(script_dir, os.pardir, os.pardir, os.pardir)
bin_dirs = {
'linux2': [ os.path.join(chrome_src, 'out', 'Debug'),
os.path.join(chrome_src, 'sconsbuild', 'Debug'),
os.path.join(chrome_src, 'out', 'Release'),
os.path.join(chrome_src, 'sconsbuild', 'Release')],
'darwin': [ os.path.join(chrome_src, 'xcodebuild', 'Debug'),
os.path.join(chrome_src, 'xcodebuild', 'Release')],
'win32': [ os.path.join(chrome_src, 'chrome', 'Debug'),
os.path.join(chrome_src, 'chrome', 'Release')],
'cygwin': [ os.path.join(chrome_src, 'chrome', 'Debug'),
os.path.join(chrome_src, 'chrome', 'Release')],
}
sys.path += bin_dirs.get(sys.platform, [])
_LocateBinDirs()
try:
import pyautolib
# Needed so that all additional classes (like: FilePath, GURL) exposed by
# swig interface get available in this module.
from pyautolib import *
except ImportError:
print >>sys.stderr, "Could not locate built libraries. Did you build?"
raise
class PyUITest(pyautolib.PyUITestSuite, unittest.TestCase):
"""Base class for UI Test Cases in Python.
A browser is created before executing each test, and is destroyed after
each test irrespective of whether the test passed or failed.
You should derive from this class and create methods with 'test' prefix,
and use methods inherited from PyUITestSuite (the C++ side).
Example:
class MyTest(PyUITest):
def testNavigation(self):
self.NavigateToURL("http://www.google.com")
self.assertTrue("Google" == self.GetActiveTabTitle())
"""
def __init__(self, methodName='runTest', **kwargs):
"""Initialize PyUITest.
When redefining __init__ in a derived class, make sure that:
o you make a call this __init__
o __init__ takes methodName as a arg. this is mandated by unittest module
Args:
methodName: the default method name. Internal use by unittest module
(The rest of the args can be in any order. They can even be skipped in
which case the defaults will be used.)
extra_chrome_flags: additional flags to pass when launching chrome.
Defaults to None
clear_profile: If True, clean the profile dir before use. Defaults to True
homepage: the home page. Defaults to "about:blank"
"""
# Fetch provided keyword args, or fill in defaults.
extra_chrome_flags = kwargs.get('extra_chrome_flags')
clear_profile = kwargs.get('clear_profile', True)
homepage = kwargs.get('homepage', 'about:blank')
args = sys.argv
if extra_chrome_flags:
args.append('--extra-chrome-flags=%s' % extra_chrome_flags)
pyautolib.PyUITestSuite.__init__(self, args, clear_profile, homepage)
# Figure out path to chromium binaries
browser_dir = os.path.normpath(os.path.dirname(pyautolib.__file__))
os.environ['PATH'] = browser_dir + os.pathsep + os.environ['PATH']
self.Initialize(pyautolib.FilePath(browser_dir))
unittest.TestCase.__init__(self, methodName)
def __del__(self):
pyautolib.PyUITestSuite.__del__(self)
def run(self, result=None):
"""The main run method.
We override this method to make calls to the setup steps in PyUITestSuite.
"""
self.SetUp() # Open a browser window
unittest.TestCase.run(self, result)
self.TearDown() # Destroy the browser window
def GetBookmarkModel(self):
"""Return the bookmark model as a BookmarkModel object.
This is a snapshot of the bookmark model; it is not a proxy and
does not get updated as the bookmark model changes.
"""
return bookmark_model.BookmarkModel(self._GetBookmarksAsJSON())
|