logseq/e2e-tests/util/search-modal.ts

67 lines
2.6 KiB
TypeScript
Raw Normal View History

import { Page, Locator, ElementHandle } from '@playwright/test'
import { randomString } from './basic'
export async function closeSearchBox(page: Page): Promise<void> {
await page.keyboard.press("Escape") // escape (potential) search box typing
await page.waitForTimeout(500)
await page.keyboard.press("Escape") // escape modal
}
export async function createRandomPage(page: Page) {
const randomTitle = randomString(20)
await closeSearchBox(page)
// Click #search-button
await page.click('#search-button')
// Fill [placeholder="Search or create page"]
await page.fill('[placeholder="Search or create page"]', randomTitle)
// Click text=/.*New page: "new page".*/
2023-06-12 10:56:52 +00:00
await page.click('text=/.*New page:".*/')
// Wait for h1 to be from our new page
await page.waitForSelector(`h1 >> text="${randomTitle}"`, { state: 'visible' })
// wait for textarea of first block
await page.waitForSelector('textarea >> nth=0', { state: 'visible' })
2023-06-12 10:56:52 +00:00
return randomTitle;
}
2023-06-12 10:56:52 +00:00
export async function createPage(page: Page, page_name: string) {// Click #search-button
await closeSearchBox(page)
await page.click('#search-button')
// Fill [placeholder="Search or create page"]
await page.fill('[placeholder="Search or create page"]', page_name)
// Click text=/.*New page: "new page".*/
2023-06-12 10:56:52 +00:00
await page.click('text=/.*New page:".*/')
// wait for textarea of first block
await page.waitForSelector('textarea >> nth=0', { state: 'visible' })
2023-06-12 10:56:52 +00:00
return page_name;
}
2023-06-12 10:56:52 +00:00
export async function searchAndJumpToPage(page: Page, pageTitle: string) {
await closeSearchBox(page)
await page.click('#search-button')
await page.type('[placeholder="Search or create page"]', pageTitle)
await page.waitForSelector(`[data-page-ref="${pageTitle}"]`, { state: 'visible' })
page.click(`[data-page-ref="${pageTitle}"]`)
await page.waitForNavigation()
return pageTitle;
}
/**
* type a search query into the search box
* stop at the point where search box shows up
2023-06-12 10:56:52 +00:00
*
* @param page the pw page object
* @param query the search query to type into the search box
* @returns the HTML element for the search results ui
*/
export async function searchPage(page: Page, query: string): Promise<ElementHandle<SVGElement | HTMLElement>[]>{
await closeSearchBox(page)
await page.click('#search-button')
await page.waitForSelector('[placeholder="Search or create page"]')
2023-06-27 17:49:11 +00:00
await page.fill('[placeholder="Search or create page"]', query)
await page.waitForTimeout(2000) // wait longer for search contents to render
2023-06-12 10:56:52 +00:00
return page.$$('#ui__ac-inner>div');
}