blob: 701d4b705ce9d12cc62a5a7eb5410126794aeff4 [file] [log] [blame] [edit]
using System.Collections.Generic;
using NUnit.Framework;
using System.Collections.ObjectModel;
namespace OpenQA.Selenium
{
[IgnoreBrowser(Browser.IE, "IE does not support Shadow DOM natively")]
[IgnoreBrowser(Browser.Safari, "Safari driver does not support Shadow DOM end points")]
[TestFixture]
public class ShadowRootHandlingTest : DriverTestFixture
{
[Test]
public void ShouldReturnShadowRoot()
{
driver.Url = shadowRootPage;
IWebElement element = driver.FindElement(By.CssSelector("custom-checkbox-element"));
ISearchContext shadowRoot = element.GetShadowRoot();
Assert.That(shadowRoot, Is.Not.Null, "Did not find shadow root");
}
[Test]
[IgnoreBrowser(Browser.Firefox, "Firefox does not support finding Shadow DOM elements")]
public void ShouldFindElementUnderShadowRoot()
{
driver.Url = shadowRootPage;
IWebElement element = driver.FindElement(By.CssSelector("custom-checkbox-element"));
ISearchContext shadowRoot = element.GetShadowRoot();
IWebElement elementInShadow = shadowRoot.FindElement(By.CssSelector("input"));
Assert.That(elementInShadow.GetAttribute("type"), Is.EqualTo("checkbox"), "Did not find element in shadow root");
}
[Test]
public void ShouldThrowGettingShadowRootWithElementNotHavingShadowRoot()
{
driver.Url = shadowRootPage;
IWebElement element = driver.FindElement(By.CssSelector("#noShadowRoot"));
Assert.That(() => element.GetShadowRoot(), Throws.InstanceOf(typeof(NoSuchShadowRootException)));
}
[Test]
[IgnoreBrowser(Browser.Firefox, "Firefox does not support finding Shadow DOM elements")]
public void ShouldGetShadowRootReferenceFromJavaScript()
{
driver.Url = shadowRootPage;
IWebElement element = driver.FindElement(By.CssSelector("custom-checkbox-element"));
object shadowRoot = ((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].shadowRoot;", element);
Assert.That(shadowRoot, Is.InstanceOf<ISearchContext>(), "Did not find shadow root");
}
[Test]
public void ShouldAllowShadowRootReferenceAsArgumentToJavaScript()
{
driver.Url = shadowRootPage;
IWebElement element = driver.FindElement(By.CssSelector("custom-checkbox-element"));
ISearchContext shadowRoot = element.GetShadowRoot();
object elementInShadow = ((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].querySelector('input');", shadowRoot);
Assert.That(elementInShadow, Is.InstanceOf<IWebElement>(), "Did not find shadow root");
}
}
}