Jest-puppeteer-utils
Гайд по jest+puppeteer+jest-puppeteer. Кровь и пот
Docs:
;
go(url)
: page: object
Creates new page, disables cache, then navigates to provied url
Example:
const page = await ;
getInnerText(elem)
: string
Extracts text from element
Example:
const renderedItemInnerText = await ;
waitForNetworkAction(page, url, method)
: data: object ok: string response: Promise
Waits for network action with matching string and method
Example:
const ok = await ;
clickElement(selector, page)
: elem: object
Waits for provided element by selector then clicks on it
Example:
await ;
hoverElement(selector, page)
: elem: object
Waits for provided element by selector then hovers on it
Example:
await ;
typeInto(selector, text, page)
: elem: object
Waits for provided element by selector then types into that element. Deletes present value if found
Example:
await ;
search(searchString, searchElement, url, page)
: respose: Promise
Types into provided element a string and waits for network
Example:
await ;
Проблемные кейсы
Кейс #1: Кэш
По-умолчанию кэш хранится между запусками в headless режиме - ты просто не
сможешь отловить реквесты/респонсы при повторном запуске теста. Спускай кэш при
создании страниц (этот уже включен в функцию go
библиотеки):
const page = await browserawait page 👏
или в каждом тесте
Кейс #2: Отлов после перехода
Если есть желание отловить данные сразу после использования goto, используй это:
const data ok = await Promiseall // waitForNetworkAction функция библиотеки page;
Кейс #3: Ждать div'чики
В доке предлагают селектить элемент так:
const element = await page;
^^^ Этот код не всегда сможет поймать элемент. А этот сможет. Всегда:
const renderedItemName = await page;
Кейс #4: Логин
Авторизацию лучше делать в отдельной странице, в beforeEach вне тестов
(в глобале -> setupFilesAfterEnv: [... , '<rootDir>/jest/jest.globals.js']
):
const login = async { ///// какой-то код логина}; ; // после можно подождать и закрыть браузер;