How to access shadow dom elements in Selenium 4?

Viewed 186

Im trying to create an automated test for login page which uses shadow dom. Im using this approach, but so far I was unable to work it out: https://titusfortner.com/2021/11/22/shadow-dom-selenium.html

Here is the login page:

<nbc-input name="username" slot="input" value="" id="username" class="hydrated">
    #shadow-root (open)
    <slot name="element-before"></slot>
    <input type="text">
    <slot name="element-after"></slot>
</nbc-input>

Here is my java code:

WebElement element = driver.findElement(By.id("username"));
SearchContext shadowRoot = element.getShadowRoot();
WebElement shadowElement = shadowRoot.findElement(By.tagName("input"));

Im getting this error:

org.openqa.selenium.InvalidArgumentException: invalid argument: invalid locator

on line:

shadowRoot.findElement(By.tagName("input"));

Im using Selenium 4.3.0, Chrome version 103.0.5060.114, and Chromedriver version 103.0.5060.134.

0 Answers
Related