Home | History | Annotate | Download | only in functional
      1 #!/usr/bin/env python
      2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import os
      7 import sys
      8 import unittest
      9 
     10 import pyauto_functional
     11 from pyauto import PyUITest
     12 
     13 
     14 class ExecuteJavascriptTest(PyUITest):
     15   def _GetExtensionInfoById(self, extensions, id):
     16     for x in extensions:
     17       if x['id'] == id:
     18         return x
     19     return None
     20 
     21   def testExecuteJavascript(self):
     22     self.NavigateToURL(self.GetFileURLForDataPath(
     23         'frame_dom_access', 'frame_dom_access.html'))
     24 
     25     v = self.ExecuteJavascript('window.domAutomationController.send(' +
     26                                'document.getElementById("myinput").nodeName)')
     27     self.assertEqual(v, 'INPUT')
     28 
     29   def testGetDOMValue(self):
     30     self.NavigateToURL(self.GetFileURLForDataPath(
     31         'frame_dom_access', 'frame_dom_access.html'))
     32 
     33     v = self.GetDOMValue('document.getElementById("myinput").nodeName')
     34     self.assertEqual(v, 'INPUT')
     35 
     36   def testExecuteJavascriptInExtension(self):
     37     """Test we can inject JavaScript into an extension."""
     38     dir_path = os.path.abspath(
     39         os.path.join(self.DataDir(), 'extensions', 'js_injection_background'))
     40     ext_id = self.InstallExtension(dir_path)
     41 
     42     # Verify extension is enabled.
     43     extension = self._GetExtensionInfoById(self.GetExtensionsInfo(), ext_id)
     44     self.assertTrue(extension['is_enabled'],
     45                     msg='Extension was disabled by default')
     46 
     47     # Get the background page's view.
     48     background_view = self.WaitUntilExtensionViewLoaded(
     49         view_type='EXTENSION_BACKGROUND_PAGE')
     50     self.assertTrue(background_view,
     51                     msg='problematic background view: views = %s.' %
     52                     self.GetBrowserInfo()['extension_views'])
     53 
     54     # Get values from background page's DOM
     55     v = self.ExecuteJavascriptInRenderView(
     56         'window.domAutomationController.send('
     57         'document.getElementById("myinput").nodeName)', background_view)
     58     self.assertEqual(v, 'INPUT',
     59                      msg='Incorrect value returned (v = %s).' % v)
     60     v = self.ExecuteJavascriptInRenderView(
     61         'window.domAutomationController.send(bool_var)', background_view)
     62     self.assertEqual(v, True, msg='Incorrect value returned (v = %s).' % v)
     63     v = self.ExecuteJavascriptInRenderView(
     64         'window.domAutomationController.send(int_var)', background_view)
     65     self.assertEqual(v, 42, msg='Incorrect value returned (v = %s).' % v)
     66     v = self.ExecuteJavascriptInRenderView(
     67         'window.domAutomationController.send(str_var)', background_view)
     68     self.assertEqual(v, 'foo', msg='Incorrect value returned (v = %s).' % v)
     69 
     70 
     71 if __name__ == '__main__':
     72   pyauto_functional.Main()
     73