utils.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 openSidebar(page: Page) {
  20. let sidebarVisible = await page.isVisible('#sidebar-nav-wrapper .left-sidebar-inner')
  21. if (!sidebarVisible) {
  22. await page.click('#left-menu.button')
  23. }
  24. await page.waitForSelector('#sidebar-nav-wrapper .left-sidebar-inner', { state: 'visible' })
  25. }
  26. export async function createRandomPage(page: Page) {
  27. const randomTitle = randomString(20)
  28. // Click #sidebar-nav-wrapper a:has-text("New page")
  29. await page.click('#sidebar-nav-wrapper a:has-text("New page")')
  30. // Fill [placeholder="Search or create page"]
  31. await page.fill('[placeholder="Search or create page"]', randomTitle)
  32. // Click text=/.*New page: "new page".*/
  33. await page.click('text=/.*New page: ".*/')
  34. // wait for textarea of first block
  35. await page.waitForSelector(':nth-match(textarea, 1)', { state: 'visible' })
  36. }
  37. export async function lastBlock(page: Page): Promise<Locator> {
  38. // discard any popups
  39. await page.keyboard.press('Escape')
  40. // click last block
  41. await page.click('.ls-block >> nth=-1')
  42. // wait for textarea
  43. await page.waitForSelector(':nth-match(textarea, 1)', { state: 'visible' })
  44. return page.locator(':nth-match(textarea, 1)')
  45. }
  46. export async function newBlock(page: Page): Promise<Locator> {
  47. await lastBlock(page)
  48. await page.press(':nth-match(textarea, 1)', 'Enter')
  49. return page.locator(':nth-match(textarea, 1)')
  50. }