# 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 pyauto_functional # must be imported before pyauto import pyauto class PyAutoEventsTest(pyauto.PyUITest): """Tests using the event queue.""" def testBasicEvents(self): """Basic test for the event queue.""" url = self.GetHttpURLForDataPath('apptest', 'basic.html') driver = self.NewWebDriver() event_id = self.AddDomEventObserver(automation_id=4444, recurring=True) success_id = self.AddDomEventObserver('test success', automation_id=4444) self.NavigateToURL(url) self._ExpectEvent(event_id, 'init') self._ExpectEvent(event_id, 'login ready') driver.find_element_by_id('login').click() self._ExpectEvent(event_id, 'login start') self._ExpectEvent(event_id, 'login done') self.GetNextEvent(success_id) def testDomMutationEvents(self): """Basic tests for WaitForDomNode.""" url = self.GetHttpURLForDataPath('apptest', 'dom_mutations.html') self.NavigateToURL(url) self.WaitForDomNode('id("login")', expected_value='Log In') self.NewWebDriver().find_element_by_id('login').click() self.WaitForDomNode('id("console")', expected_value='.*succeeded.*') def testDomMutationGenericXPath(self): """Test mutation observers with a generic xpath and regexp.""" url = self.GetHttpURLForDataPath('apptest', 'dom_mutations.html') self.NavigateToURL(url) self.WaitForDomNode('//a', expected_value='Log In') self.NewWebDriver().find_element_by_id('login').click() self.WaitForDomNode('//div', expected_value='.*succeeded.*') def testDomMutationObservers(self): """Tests for the various types of Dom Mutation observers.""" url = self.GetHttpURLForDataPath('apptest', 'dom_mutations.html') self.NavigateToURL(url) self.GetNextEvent(self.AddDomMutationObserver('add', 'id("login")', expected_value='Log In')) success_id = self.AddDomMutationObserver('change', 'id("console")', expected_value='.*succeeded.*') self.NewWebDriver().find_element_by_id('login').click() self.GetNextEvent(self.AddDomMutationObserver('remove', 'id("fail")/a')) self.GetNextEvent(success_id) def testWaitUntilNavigationCompletes(self): """Basic test for WaitUntilNavigationCompletes.""" url = self.GetHttpURLForDataPath('apptest', 'dom_mutations.html') js = """window.onunload = function() { window.domAutomationController.send("done"); }; window.location.href = "%s";""" % url self.ExecuteJavascript(js) self.WaitUntilNavigationCompletes() self.WaitUntilNavigationCompletes() self.WaitForDomNode('id("login")') def _ExpectEvent(self, event_id, expected_event_name): """Checks that the next event is expected.""" e = self.GetNextEvent(event_id) self.assertEqual(e.get('name'), expected_event_name, msg="unexpected event: %s" % e) if __name__ == '__main__': pyauto_functional.Main()