utils.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. /**
  31. * Locate the last block in the inner editor
  32. * @param page The Playwright Page object.
  33. * @returns The locator of the last block.
  34. */
  35. export async function lastInnerBlock(page: Page): Promise<Locator> {
  36. // discard any popups
  37. await page.keyboard.press('Escape')
  38. // click last block
  39. await page.click('.page-blocks-inner .ls-block >> nth=-1')
  40. // wait for textarea
  41. await page.waitForSelector(':nth-match(textarea, 1)', { state: 'visible' })
  42. return page.locator(':nth-match(textarea, 1)')
  43. }
  44. export async function lastBlock(page: Page): Promise<Locator> {
  45. // discard any popups
  46. await page.keyboard.press('Escape')
  47. // click last block
  48. await page.click('.ls-block >> nth=-1')
  49. // wait for textarea
  50. await page.waitForSelector(':nth-match(textarea, 1)', { state: 'visible' })
  51. return page.locator(':nth-match(textarea, 1)')
  52. }
  53. /**
  54. * Create and locate a new block at the end of the inner editor
  55. * @param page The Playwright Page object
  56. * @returns The locator of the last block
  57. */
  58. export async function newInnerBlock(page: Page): Promise<Locator> {
  59. await lastInnerBlock(page)
  60. await page.press(':nth-match(textarea, 1)', 'Enter')
  61. return page.locator(':nth-match(textarea, 1)')
  62. }
  63. export async function newBlock(page: Page): Promise<Locator> {
  64. await lastBlock(page)
  65. await page.press(':nth-match(textarea, 1)', 'Enter')
  66. return page.locator(':nth-match(textarea, 1)')
  67. }
  68. export async function escapeToCodeEditor(page: Page): Promise<void> {
  69. await page.press('.block-editor textarea', 'Escape')
  70. await page.waitForSelector('.CodeMirror pre', { state: 'visible' })
  71. await page.waitForTimeout(500)
  72. await page.click('.CodeMirror pre')
  73. await page.waitForTimeout(500)
  74. await page.waitForSelector('.CodeMirror textarea', { state: 'visible' })
  75. }
  76. export async function escapeToBlockEditor(page: Page): Promise<void> {
  77. await page.waitForTimeout(500)
  78. await page.click('.CodeMirror pre')
  79. await page.waitForTimeout(500)
  80. await page.press('.CodeMirror textarea', 'Escape')
  81. await page.waitForTimeout(500)
  82. }
  83. export async function activateNewPage(page: Page) {
  84. await page.click('.ls-block >> nth=0')
  85. await page.waitForTimeout(500)
  86. }