blob: adf1f27fe78f736182b633d13ee4aad79a34c97b [file] [log] [blame]
#!/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()