普通文本  |  73行  |  2.46 KB

#!/usr/bin/env python
# Copyright (c) 2012 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.

import time
import unittest

import pyauto_functional  # Must be imported before pyauto
import pyauto
import pyauto_errors


class PyAutoTest(pyauto.PyUITest):
  """Test functionality of the PyAuto framework."""

  _EXTRA_CHROME_FLAGS = [
    '--scooby-doo=123',
    '--donald-duck=cool',
    '--super-mario',
    '--marvin-the-martian',
  ]

  def ExtraChromeFlags(self):
    """Ensures Chrome is launched with some custom flags.

    Overrides the default list of extra flags passed to Chrome.  See
    ExtraChromeFlags() in pyauto.py.
    """
    return pyauto.PyUITest.ExtraChromeFlags(self) + self._EXTRA_CHROME_FLAGS

  def testSetCustomChromeFlags(self):
    """Ensures that Chrome can be launched with custom flags."""
    self.NavigateToURL('about://version')
    for flag in self._EXTRA_CHROME_FLAGS:
      self.assertEqual(self.FindInPage(flag)['match_count'], 1,
                       msg='Missing expected Chrome flag "%s"' % flag)

  def testCallOnInvalidWindow(self):
    """Verify that exception is raised when a browser is missing/invalid."""
    self.assertEqual(1, self.GetBrowserWindowCount())
    self.assertRaises(
        pyauto_errors.JSONInterfaceError,
        lambda: self.FindInPage('some text', windex=1))  # invalid window

  def testJSONInterfaceTimeout(self):
    """Verify that an exception is raised when the JSON interface times out."""
    self.ClearEventQueue()
    self.AddDomEventObserver('foo')
    self.assertRaises(
        pyauto_errors.AutomationCommandTimeout,
        lambda: self.GetNextEvent(timeout=2000))  # event queue is empty

  def testActionTimeoutChanger(self):
    """Verify that ActionTimeoutChanger works."""
    new_timeout = 1000  # 1 sec
    changer = pyauto.PyUITest.ActionTimeoutChanger(self, new_timeout)
    self.assertEqual(self._automation_timeout, new_timeout)

    # Verify the amount of time taken for automation timeout
    then = time.time()
    self.assertRaises(
        pyauto_errors.AutomationCommandTimeout,
        lambda: self.ExecuteJavascript('invalid js should timeout'))
    elapsed = time.time() - then
    self.assertTrue(elapsed < new_timeout / 1000.0 + 2,  # margin of 2 secs
        msg='ActionTimeoutChanger did not work. '
            'Automation timeout took %f secs' % elapsed)


if __name__ == '__main__':
  pyauto_functional.Main()