# shadow$$

Access elements inside a given element's shadowRoot. If you are working with lots of nested shadow roots, an alternative approach to `shadow$$` is to use the [deep selector](https://webdriver.io/docs/selectors#deep-selectors).

info

WebdriverIO automatically pierces through shadow roots when using `$` or `$$` commands. This command is only needed if you automate within an environment that doesn't support WebDriver Bidi yet, e.g. mobile web testing with Appium.

## Usage[​](#usage "Direct link to Usage")

```
await $(selector).shadow$$(selector)
```

## Parameters[​](#parameters "Direct link to Parameters")

| Name       | Type               | Details                                            |
| ---------- | ------------------ | -------------------------------------------------- |
| `selector` | `String, Function` | selector or JS Function to fetch a certain element |

## Example[​](#example "Direct link to Example")

shadow$$.js

```
it('should return elements inside a shadowRoot', async () => {
    const innerEl = await $('.input').shadow$$('#innerEl');
    console.log(await innerEl.getValue()); // outputs: 'test123'
});
```

## Returns[​](#returns "Direct link to Returns")

* **\<WebdriverIO.ElementArray>**
