From e7a236a531f8ab15afdf08579615ea8497af1da2 Mon Sep 17 00:00:00 2001 From: Brian Schiller Date: Mon, 4 Feb 2019 11:10:35 -0700 Subject: [PATCH] add more tests --- types/puppeteer/puppeteer-tests.ts | 45 +++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/types/puppeteer/puppeteer-tests.ts b/types/puppeteer/puppeteer-tests.ts index e8dcff23f0..e5c287b6ee 100644 --- a/types/puppeteer/puppeteer-tests.ts +++ b/types/puppeteer/puppeteer-tests.ts @@ -531,7 +531,7 @@ puppeteer.launch().then(async browser => { }); }); -// evaluate returns type of inner function +// evaluates return type of inner function (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); @@ -547,6 +547,7 @@ puppeteer.launch().then(async browser => { console.log('body html has length', s.length); }); +// JSHandle.jsonValue produces compatible type (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); @@ -575,3 +576,45 @@ puppeteer.launch().then(async browser => { a: '1' }); }); + +// ElementHandles are well-typed +(async () => { + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + const link: puppeteer.JSHandle = await page.evaluateHandle( + () => document.body.querySelector('a') + ); + const linkEl: puppeteer.ElementHandle | null = link.asElement(); + if (linkEl !== null) { + const href = await page.evaluate( + (el: HTMLElement): string | null => el.getAttribute('href'), + linkEl); + console.log('href is', href); + } +}); + +// test $$eval return type +(async () => { + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + + const paragraphContents: string[] = await page.$$eval( + 'p', (ps: Element[]): string[] => ps.map(p => p.textContent || '')); + console.log('pgraph contents', paragraphContents); +}); + +// JSHandle of non-serializable works +(async () => { + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + + const reHandle: puppeteer.JSHandle = await page.evaluateHandle( + () => /\s*bananas?\s*/i, + ); + const numMatchingEls: number = await page.$$eval( + 'p', (els: Element[], re: RegExp) => + els.filter(el => el.textContent && re.test(el.textContent)).length, + reHandle + ); + console.log('there are', numMatchingEls, 'banana paragaphs'); +});