search-modal.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { Page, Locator, ElementHandle } from '@playwright/test'
  2. import { randomString } from './basic'
  3. export async function createRandomPage(page: Page) {
  4. const randomTitle = randomString(20)
  5. // Click #search-button
  6. await page.click('#search-button')
  7. // Fill [placeholder="Search or create page"]
  8. await page.fill('[placeholder="Search or create page"]', randomTitle)
  9. // Click text=/.*New page: "new page".*/
  10. await page.click('text=/.*New page: ".*/')
  11. // Wait for h1 to be from our new page
  12. await page.waitForSelector(`h1 >> text="${randomTitle}"`, { state: 'visible' })
  13. // wait for textarea of first block
  14. await page.waitForSelector('textarea >> nth=0', { state: 'visible' })
  15. return randomTitle;
  16. }
  17. export async function createPage(page: Page, page_name: string) {// Click #search-button
  18. await page.click('#search-button')
  19. // Fill [placeholder="Search or create page"]
  20. await page.fill('[placeholder="Search or create page"]', page_name)
  21. // Click text=/.*New page: "new page".*/
  22. await page.click('text=/.*New page: ".*/')
  23. // wait for textarea of first block
  24. await page.waitForSelector('textarea >> nth=0', { state: 'visible' })
  25. return page_name;
  26. }
  27. export async function searchAndJumpToPage(page: Page, pageTitle: string) {
  28. await page.click('#search-button')
  29. await page.type('[placeholder="Search or create page"]', pageTitle)
  30. await page.waitForSelector(`[data-page-ref="${pageTitle}"]`, { state: 'visible' })
  31. page.click(`[data-page-ref="${pageTitle}"]`)
  32. await page.waitForNavigation()
  33. return pageTitle;
  34. }
  35. /**
  36. * type a search query into the search box
  37. * stop at the point where search box shows up
  38. *
  39. * @param page the pw page object
  40. * @param query the search query to type into the search box
  41. * @returns the HTML element for the search results ui
  42. */
  43. export async function searchPage(page: Page, query: string): Promise<ElementHandle<SVGElement | HTMLElement>[]>{
  44. await page.click('#search-button')
  45. await page.waitForSelector('[placeholder="Search or create page"]')
  46. await page.type('[placeholder="Search or create page"]', query, { delay: 10 })
  47. await page.waitForTimeout(2000) // wait longer for search contents to render
  48. return page.$$('#ui__ac-inner>div');
  49. }
  50. export async function closeSearchBox(page: Page): Promise<void> {
  51. await page.keyboard.press("Escape") // escape (potential) search box typing
  52. await page.waitForTimeout(500)
  53. await page.keyboard.press("Escape") // escape modal
  54. }