summaryrefslogtreecommitdiffstats
path: root/chrome/test/pyautolib/pyauto.py
blob: 52f477ebfea86b9b1f3ab79441304149a12e402f (plain)
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
#!/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


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:
  from pyautolib import PyUITestSuite
except ImportError:
  print >>sys.stderr, "Could not locate built libraries. Did you build?"
  raise


class PyUITest(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'):
    PyUITestSuite.__init__(self, sys.argv)
    unittest.TestCase.__init__(self, methodName)

  def __del__(self):
    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