templates/journeys/advanced-example-helpers.ts (38 lines of code) (raw):
import { step, Page, expect } from '@elastic/synthetics';
// This file contains helper files for advanced-example.journey.ts
// The functions here let you write more concise tests and re-use functionality
// across tests.
export const loadAppStep = (page: Page, url: string) => {
step('launch app', async () => {
await page.goto(url);
});
};
export const addTaskStep = (page: Page, task: string) => {
step(`add task ${task}`, async () => {
const input = await page.locator('input.new-todo');
await input.type(task);
await input.press('Enter');
});
};
const todosSelector = 'ul.todo-list li.todo';
export const findTask = async (page: Page, task: string) => {
return await page.locator(`${todosSelector} >> text="${task}"`);
};
export const assertTaskListCountStep = async (page: Page, count: number) => {
step(`check that task list has exactly ${count} elements`, async () => {
const tasks = await page.locator(todosSelector);
expect(await tasks.count()).toBe(count);
});
};
export const checkForTaskStep = async (page: Page, task: string) => {
step(`check for task '${task}' in list`, async () => {
return findTask(page, task);
});
};
export const destroyTaskStep = async (page: Page, task: string) => {
step(`destroy task '${task}'`, async () => {
const label = await findTask(page, task);
// xpath indexes arrays starting at 1!!! Easy to forget!
const li = await label.locator('xpath=ancestor::li[1]');
const destroyButton = await li.locator('button');
// The destroy button is not visible until hovered. Setup a click test which
// will wait up to 30s for the button to be visible.
const clickFuture = destroyButton.click();
// now hover, making the destroy button clickable
await li.hover();
// now we are done
await clickFuture;
});
};