platform/qms-tests/sanity/tests/utils.ts
2024-07-13 22:23:11 +07:00

76 lines
2.5 KiB
TypeScript

import { Browser, Locator, Page } from '@playwright/test'
import { allure } from 'allure-playwright'
export const PlatformURI = process.env.PLATFORM_URI as string
export const PlatformTransactor = process.env.PLATFORM_TRANSACTOR as string
export const PlatformUser = process.env.PLATFORM_USER as string
export const PlatformToken = process.env.PLATFORM_TOKEN as string
export const PlatformSetting = process.env.SETTING as string
export const PlatformSettingSecond = process.env.SETTING_SECOND as string
export const PlatformSettingQaraManager = process.env.SETTING_QARA_MANAGER as string
export const PlatformPassword = process.env.PLATFORM_PASSWORD as string
export const DefaultWorkspace = 'sanity-ws-qms'
export const DocumentURI = `workbench/${DefaultWorkspace}/documents`
export const HomepageURI = `workbench/${DefaultWorkspace}`
function toHex (value: number, chars: number): string {
const result = value.toString(16)
if (result.length < chars) {
return '0'.repeat(chars - result.length) + result
}
return result
}
let counter = 0
const random = toHex((Math.random() * (1 << 24)) | 0, 6) + toHex((Math.random() * (1 << 16)) | 0, 4)
function timestamp (): string {
const time = (Date.now() / 1000) | 0
return toHex(time, 8)
}
function count (): string {
const val = counter++ & 0xffffff
return toHex(val, 6)
}
/**
* @public
* @returns
*/
export function generateId (len = 100): string {
const v = timestamp() + random
let s = v.length - len
if (s < 0) {
s = 0
}
return v.slice(s, v.length) + count()
}
export async function getSecondPage (browser: Browser): Promise<Page> {
const userSecondContext = await browser.newContext({ storageState: PlatformSettingSecond })
return await userSecondContext.newPage()
}
export function randomString (): string {
return (Math.random() * 1000000).toString(36).replace('.', '')
}
export async function attachScreenshot (name: string, page: Page): Promise<void> {
await allure.attachment(name, await page.screenshot(), {
contentType: 'image/png'
})
await page.screenshot({ path: `screenshots/${name}` })
}
export async function getQaraManagerPage (browser: Browser): Promise<Page> {
const qaraManagerContext = await browser.newContext({ storageState: PlatformSettingQaraManager })
return await qaraManagerContext.newPage()
}
export async function * iterateLocator (locator: Locator): AsyncGenerator<Locator> {
for (let index = 0; index < (await locator.count()); index++) {
yield locator.nth(index)
}
}