Skip to content

Commit 8cb2896

Browse files
authored
Merge pull request #36 from Georgegriff/puppeteer
[Experimental] Puppeteer Custom Engine support
2 parents 2ecdfe4 + 05b6f79 commit 8cb2896

File tree

7 files changed

+264
-56
lines changed

7 files changed

+264
-56
lines changed

examples/puppeteer/clicking-elements.js

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,21 @@
11
const puppeteer = require('puppeteer');
2-
const path = require('path');
3-
const fs = require('fs');
2+
const { QueryHandler } = require("../../plugins/puppeteer");
43
(async () => {
54
try {
5+
await puppeteer.__experimental_registerCustomQueryHandler('shadow', QueryHandler);
66
const browser = await puppeteer.launch({
7-
headless: false
7+
headless: false,
8+
devtools: true
89
})
910
const page = await browser.newPage()
1011
await page.goto('http://127.0.0.1:5500/test/')
1112

12-
// makes the library available in evaluate functions which run within the browser context
13-
await page.addScriptTag({
14-
path: path.join(__dirname, 'node_modules/query-selector-shadow-dom/dist/querySelectorShadowDom.js')
15-
});
16-
17-
1813
// ensure btn exists and return it
19-
const btn = (await page.waitForFunction(() => {
20-
const btn = querySelectorShadowDom.querySelectorDeep(".btn-in-shadow-dom");
21-
return btn;
22-
})).asElement();
14+
await page.waitForSelector("shadow/.btn-in-shadow-dom");
15+
const btn = await page.$("shadow/.btn-in-shadow-dom");
2316
await btn.click();
2417
// check btn was clicked (this page expected btn to change text of output)
25-
const outputSpan = await page.evaluateHandle(() => querySelectorShadowDom.querySelectorDeep(".output"));
18+
const outputSpan = await page.$("shadow/.output");
2619
const text = await page.evaluate((output) => output.innerText, outputSpan);
2720
// prints the text from the output
2821
console.log(text);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const { QueryHandler } = require("../../plugins/puppeteer");
2+
const puppeteer = require('puppeteer')
3+
4+
const main = async () => {
5+
await puppeteer.__experimental_registerCustomQueryHandler('shadow', QueryHandler);
6+
7+
const browser = await puppeteer.chromium.launch({ headless: false})
8+
const context = await browser.newContext({ viewport: null })
9+
const page = await context.newPage()
10+
11+
await page.goto('chrome://downloads')
12+
13+
const element = await page.waitForSelector('shadow/div', {timeout: 3000})
14+
const span = await element.$$("shadow/div > .illustration + span")
15+
console.log(span)
16+
await new Promise(resolve => setTimeout(resolve, 3000))
17+
18+
await page.close()
19+
await context.close()
20+
await browser.close()
21+
}
22+
23+
main()
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const puppeteer = require('puppeteer');
2+
const { QueryHandler } = require("../../plugins/puppeteer");
3+
(async () => {
4+
try {
5+
await puppeteer.__experimental_registerCustomQueryHandler('shadow', QueryHandler);
6+
const browser = await puppeteer.launch({
7+
headless: false
8+
})
9+
const page = await browser.newPage()
10+
await page.goto('http://127.0.0.1:5500/test/')
11+
await page.waitForSelector("shadow/.btn-in-shadow-dom")
12+
const elements = await page.$$("*");
13+
const elementsShadow = await page.$$("shadow/*");
14+
console.log("All Elements on Page Excluding Shadow Dom", elements.length);
15+
console.log("All Elements on Page Including Shadow Dom", elementsShadow.length);
16+
17+
await browser.close()
18+
19+
} catch (e) {
20+
console.error(e);
21+
}
22+
23+
})()

examples/puppeteer/typing-to-elements.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,20 @@
11
const puppeteer = require('puppeteer');
2-
const path = require('path');
3-
const fs = require('fs');
2+
const { QueryHandler } = require("../../plugins/puppeteer");
43
(async () => {
54
try {
5+
await puppeteer.__experimental_registerCustomQueryHandler('shadow', QueryHandler);
66
const browser = await puppeteer.launch({
77
headless: false
88
})
99
const page = await browser.newPage()
1010
await page.goto('http://127.0.0.1:5500/test/')
11-
// makes the library available in evaluate functions which run within the browser context
12-
await page.addScriptTag({
13-
path: path.join(__dirname, 'node_modules/query-selector-shadow-dom/dist/querySelectorShadowDom.js')
14-
});
1511

12+
const inputElement = await page.waitForSelector("shadow/#type-to-input");
1613

17-
// returns an https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-elementhandle
18-
const inputElement = (await page.waitForFunction(() => {
19-
return querySelectorShadowDom.querySelectorDeep("#type-to-input");
20-
})).asElement();
21-
22-
// https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#elementhandletypetext-options
2314
await inputElement.type("Typed text to input");
2415

2516
const value = await page.evaluate(inputElement => inputElement.value, inputElement);
26-
console.log(value);
17+
console.log("Value", value);
2718

2819
await browser.close()
2920

0 commit comments

Comments
 (0)