#!/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()