utils.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { Page, Locator } from 'playwright'
  2. import { expect } from '@playwright/test'
  3. import process from 'process'
  4. export const IsMac = process.platform === 'darwin'
  5. export const IsLinux = process.platform === 'linux'
  6. export const IsWindows = process.platform === 'win32'
  7. export function randomString(length: number) {
  8. const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  9. let result = '';
  10. const charactersLength = characters.length;
  11. for (let i = 0; i < length; i++) {
  12. result += characters.charAt(Math.floor(Math.random() * charactersLength));
  13. }
  14. return result;
  15. }
  16. export async function appFirstLoaded(page: Page) {
  17. await page.waitForSelector('text=This is a demo graph, changes will not be saved until you open a local folder')
  18. }
  19. export async function createRandomPage(page: Page) {
  20. const randomTitle = randomString(20)
  21. // Click #search-button
  22. await page.click('#search-button')
  23. // Fill [placeholder="Search or create page"]
  24. await page.fill('[placeholder="Search or create page"]', randomTitle)
  25. // Click text=/.*New page: "new page".*/
  26. await page.click('text=/.*New page: ".*/')
  27. // wait for textarea of first block
  28. await page.waitForSelector(':nth-match(textarea, 1)', { state: 'visible' })
  29. }
  30. export async function lastBlock(page: Page): Promise<Locator> {
  31. // discard any popups
  32. await page.keyboard.press('Escape')
  33. // click last block
  34. await page.click('.ls-block >> nth=-1')
  35. // wait for textarea
  36. await page.waitForSelector(':nth-match(textarea, 1)', { state: 'visible' })
  37. return page.locator(':nth-match(textarea, 1)')
  38. }
  39. export async function newBlock(page: Page): Promise<Locator> {
  40. await lastBlock(page)
  41. await page.press(':nth-match(textarea, 1)', 'Enter')
  42. return page.locator(':nth-match(textarea, 1)')
  43. }
  44. export async function escapeToCodeEditor(page: Page): Promise<void> {
  45. await page.press('.block-editor textarea', 'Escape')
  46. await page.waitForSelector('.CodeMirror pre', { state: 'visible' })
  47. await page.waitForTimeout(500)
  48. await page.click('.CodeMirror pre')
  49. await page.waitForTimeout(500)
  50. await page.waitForSelector('.CodeMirror textarea', { state: 'visible' })
  51. }
  52. export async function escapeToBlockEditor(page: Page): Promise<void> {
  53. await page.waitForTimeout(500)
  54. await page.click('.CodeMirror pre')
  55. await page.waitForTimeout(500)
  56. await page.press('.CodeMirror textarea', 'Escape')
  57. await page.waitForTimeout(500)
  58. }