utils.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { Page } from 'playwright'
  2. import { expect } from '@playwright/test'
  3. export function randomString(length: number) {
  4. const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  5. let result = '';
  6. const charactersLength = characters.length;
  7. for (let i = 0; i < length; i++) {
  8. result += characters.charAt(Math.floor(Math.random() * charactersLength));
  9. }
  10. return result;
  11. }
  12. export async function openSidebar(page: Page) {
  13. let sidebarVisible = await page.isVisible('#sidebar-nav-wrapper .left-sidebar-inner')
  14. if (!sidebarVisible) {
  15. await page.click('#left-menu.button')
  16. }
  17. await page.waitForSelector('#sidebar-nav-wrapper .left-sidebar-inner', { state: 'visible' })
  18. }
  19. export async function createRandomPage(page: Page) {
  20. const randomTitle = randomString(20)
  21. // Click #sidebar-nav-wrapper a:has-text("New page")
  22. await page.click('#sidebar-nav-wrapper a:has-text("New page")')
  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) {
  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. }
  38. export async function newBlock(page: Page) {
  39. await lastBlock(page)
  40. await page.press(':nth-match(textarea, 1)', 'Enter')
  41. }