# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. from urllib.parse import quote from marionette_driver.by import By from marionette_driver.errors import ( NoSuchShadowRootException, ) from marionette_driver.marionette import ShadowRoot from marionette_harness import MarionetteTestCase checkbox_dom = """ """ def inline(doc): return "data:text/html;charset=utf-8,{}".format(quote(doc)) class TestShadowDom(MarionetteTestCase): def setUp(self): super(TestShadowDom, self).setUp() def test_can_get_open_shadow_root(self): self.marionette.navigate(inline(checkbox_dom % "open")) element = self.marionette.find_element( By.CSS_SELECTOR, "custom-checkbox-element" ) shadow_root = element.shadow_root assert isinstance( shadow_root, ShadowRoot ), "Should have received ShadowRoot but got {}".format(shadow_root) def test_can_get_closed_shadow_root(self): self.marionette.navigate(inline(checkbox_dom % "closed")) element = self.marionette.find_element( By.CSS_SELECTOR, "custom-checkbox-element" ) shadow_root = element.shadow_root assert isinstance( shadow_root, ShadowRoot ), "Should have received ShadowRoot but got {}".format(shadow_root) def test_cannot_find_shadow_root(self): element = self.marionette.find_element(By.CSS_SELECTOR, "style") with self.assertRaises(NoSuchShadowRootException): element.shadow_root