From 95340a9f0128cd8f96dc2fd5985dcfb8b732cddc Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Fri, 14 Sep 2018 20:54:26 +0200 Subject: [PATCH] Add puppeteer utils --- ui/src/tests/utils.ts | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 ui/src/tests/utils.ts diff --git a/ui/src/tests/utils.ts b/ui/src/tests/utils.ts new file mode 100644 index 0000000..7d1dfba --- /dev/null +++ b/ui/src/tests/utils.ts @@ -0,0 +1,63 @@ +import {ElementHandle, Page} from 'puppeteer'; + +export const innerText = async (page: ElementHandle | Page, selector: string): Promise => { + const element = await page.$(selector); + const handle = await element!.getProperty('innerText'); + const value = await handle.jsonValue(); + return value.toString().trim(); +}; + +export const clickByText = async (page: Page, selector: string, text: string): Promise => { + await waitForExists(page, selector, text); + text = text.toLowerCase(); + await page.evaluate( + (_selector, _text) => { + Array.from(document.querySelectorAll(_selector)) + .filter((element) => element.textContent.toLowerCase().trim() === _text)[0] + .click(); + }, + selector, + text + ); +}; + +export const count = async (page: Page, selector: string): Promise => { + return page.$$(selector).then((elements) => elements.length); +}; + +export const waitToDisappear = async (page: Page, selector: string): Promise => { + return page.waitForFunction( + (_selector: string) => !document.querySelector(_selector), + {}, + selector + ); +}; + +export const waitForExists = async (page: Page, selector: string, text: string): Promise => { + text = text.toLowerCase(); + await page.waitForFunction( + (_selector: string, _text: string) => { + return ( + Array.from(document.querySelectorAll(_selector)).filter( + (element) => element.textContent!.toLowerCase().trim() === _text + ).length > 0 + ); + }, + {}, + selector, + text + ); +}; + +export const clearField = async (element: ElementHandle | Page, selector: string) => { + const elementHandle = await element.$(selector); + if (!elementHandle) { + fail(); + return; + } + await elementHandle.click(); + await elementHandle.focus(); + // click three times to select all + await elementHandle.click({clickCount: 3}); + await elementHandle.press('Backspace'); +};