test_get_shadow_root.py (2309B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 from urllib.parse import quote 6 7 from marionette_driver.by import By 8 from marionette_driver.errors import ( 9 NoSuchShadowRootException, 10 ) 11 from marionette_driver.marionette import ShadowRoot 12 from marionette_harness import MarionetteTestCase 13 14 checkbox_dom = """ 15 <style> 16 custom-checkbox-element { 17 display:block; width:20px; height:20px; 18 } 19 </style> 20 <custom-checkbox-element></custom-checkbox-element> 21 <script> 22 customElements.define('custom-checkbox-element', 23 class extends HTMLElement { 24 constructor() { 25 super(); 26 this.attachShadow({mode: '%s'}).innerHTML = ` 27 <div><input type="checkbox"/></div> 28 `; 29 } 30 }); 31 </script>""" 32 33 34 def inline(doc): 35 return "data:text/html;charset=utf-8,{}".format(quote(doc)) 36 37 38 class TestShadowDom(MarionetteTestCase): 39 def setUp(self): 40 super(TestShadowDom, self).setUp() 41 42 def test_can_get_open_shadow_root(self): 43 self.marionette.navigate(inline(checkbox_dom % "open")) 44 element = self.marionette.find_element( 45 By.CSS_SELECTOR, "custom-checkbox-element" 46 ) 47 shadow_root = element.shadow_root 48 assert isinstance( 49 shadow_root, ShadowRoot 50 ), "Should have received ShadowRoot but got {}".format(shadow_root) 51 52 def test_can_get_closed_shadow_root(self): 53 self.marionette.navigate(inline(checkbox_dom % "closed")) 54 element = self.marionette.find_element( 55 By.CSS_SELECTOR, "custom-checkbox-element" 56 ) 57 shadow_root = element.shadow_root 58 assert isinstance( 59 shadow_root, ShadowRoot 60 ), "Should have received ShadowRoot but got {}".format(shadow_root) 61 62 def test_cannot_find_shadow_root(self): 63 element = self.marionette.find_element(By.CSS_SELECTOR, "style") 64 with self.assertRaises(NoSuchShadowRootException): 65 element.shadow_root