Add puppeteer utils

This commit is contained in:
Jannis Mattheis 2018-09-14 20:54:26 +02:00
parent 0500223095
commit 95340a9f01
1 changed files with 63 additions and 0 deletions

63
ui/src/tests/utils.ts Normal file
View File

@ -0,0 +1,63 @@
import {ElementHandle, Page} from 'puppeteer';
export const innerText = async (page: ElementHandle | Page, selector: string): Promise<string> => {
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<void> => {
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<number> => {
return page.$$(selector).then((elements) => elements.length);
};
export const waitToDisappear = async (page: Page, selector: string): Promise<void> => {
return page.waitForFunction(
(_selector: string) => !document.querySelector(_selector),
{},
selector
);
};
export const waitForExists = async (page: Page, selector: string, text: string): Promise<void> => {
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');
};