Skip to content

Commit 9d3381c

Browse files
author
George Griffiths
committed
documentation improvements
1 parent bd172b7 commit 9d3381c

File tree

4 files changed

+74
-1
lines changed

4 files changed

+74
-1
lines changed

Chrome-example.png

271 KB
Loading

README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,23 @@ import { querySelectorAllDeep, querySelectorDeep } from 'query-selector-shadow-d
1212

1313
```
1414

15+
## What is a nested shadow root?
16+
![Image of Shadow DOM elements in dev tools](./Chrome-example.png)
17+
You can see that `.dropdown-item:not([hidden])` (Open downloads folder) is several layers deep in shadow roots, most tools will make you do something like
18+
19+
```javascript
20+
document.querySelector("body > downloads-manager").shadowRoot.querySelector("#toolbar").shadowRoot.querySelector(".dropdown-item:not([hidden])")
21+
```
22+
EW!
23+
24+
with query-selector-shadow-dom:
25+
26+
```javascript
27+
import { querySelectorAllDeep, querySelectorDeep } from 'query-selector-shadow-dom';
28+
querySelectorDeep(".dropdown-item:not([hidden])");
29+
```
30+
31+
## API
1532
- querySelectorAllDeep - mirrors `querySelectorAll` from the browser, will return an `Array` of elements matching the query
1633
- querySelectorDeep - mirrors `querySelector` from the browser, will return the `first` matching element of the query.
1734

@@ -65,6 +82,36 @@ const { locatorStrategy } = require('query-selector-shadow-dom/plugins/webdriver
6582
})().catch((e) => console.error(e))
6683
```
6784

85+
#### How is this different to `shadow$`
86+
87+
`shadow$` only goes one level deep in a shadow root.
88+
89+
Take this example.
90+
![Image of Shadow DOM elements in dev tools](./Chrome-example.png)
91+
You can see that `.dropdown-item:not([hidden])` (Open downloads folder) is several layers deep in shadow roots, but this library will find it, `shadow$` would not.
92+
You would have to construct a path via css or javascript all the way through to find the right element.
93+
94+
```javascript
95+
const { remote } = require('webdriverio')
96+
const { locatorStrategy } = require('query-selector-shadow-dom/plugins/webdriverio');
97+
98+
(async () => {
99+
const browser = await remote({capabilities: {browserName: 'chrome'}})
100+
101+
browser.addLocatorStrategy('shadow', locatorStrategy);
102+
103+
await browser.url('chrome://downloads')
104+
const moreActions = await browser.custom$('shadow', '#moreActions');
105+
await moreActions.click();
106+
const span = await browser.custom$('shadow', '.dropdown-item:not([hidden])');
107+
const text = await span.getText()
108+
// prints `Open downloads folder`
109+
console.log(text);
110+
111+
await browser.deleteSession()
112+
})().catch((e) => console.error(e))
113+
```
114+
68115
#### Known issues
69116
- https://webdriver.io/blog/2019/02/22/shadow-dom-support.html#browser-support
70117

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const { remote } = require('webdriverio')
2+
const { locatorStrategy } = require('query-selector-shadow-dom/plugins/webdriverio');
3+
4+
;(async () => {
5+
const browser = await remote({
6+
logLevel: 'error',
7+
path: '/wd/hub',
8+
capabilities: {
9+
browserName: 'chrome'
10+
}
11+
})
12+
13+
browser.addLocatorStrategy('shadow', locatorStrategy);
14+
15+
16+
await browser.url('chrome://downloads')
17+
const moreActions = await browser.custom$('shadow', '#moreActions');
18+
await moreActions.click();
19+
const span = await browser.custom$('shadow', '.dropdown-item:not([hidden])');
20+
const text = await span.getText()
21+
// prints `Open downloads folder`
22+
console.log(text);
23+
24+
await browser.deleteSession()
25+
})().catch((e) => console.error(e))

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "query-selector-shadow-dom",
3-
"version": "0.7.0",
3+
"version": "0.7.1",
44
"description": "use querySelector syntax to search for nodes inside of (nested) shadow roots",
55
"main": "src/querySelectorDeep.js",
66
"scripts": {
@@ -16,6 +16,7 @@
1616
"test": "{src,test}/*.js"
1717
},
1818
"files": [
19+
"Chrome-example.png",
1920
"/src/",
2021
"dist/querySelectorShadowDom.js",
2122
"/plugins/"

0 commit comments

Comments
 (0)