mirror of
https://github.com/langgenius/dify.git
synced 2026-07-21 02:28:30 +08:00
84 lines
3.2 KiB
TypeScript
84 lines
3.2 KiB
TypeScript
import type { DifyWorld } from '../../support/world'
|
|
import { Then, When } from '@cucumber/cucumber'
|
|
import { expect } from '@playwright/test'
|
|
import { adminCredentials } from '../../../fixtures/auth'
|
|
import { e2eBrowser } from '../../../test-env'
|
|
|
|
const getAccountMenuTrigger = (world: DifyWorld) =>
|
|
world.getPage().getByRole('button', { name: 'Account' })
|
|
|
|
const getCreateAppMenuTrigger = (world: DifyWorld) =>
|
|
world.getPage().getByRole('main').getByRole('button', { name: 'Create', exact: true })
|
|
|
|
When(
|
|
'I focus and activate the skip navigation link with the keyboard',
|
|
async function (this: DifyWorld) {
|
|
const page = this.getPage()
|
|
const skipLink = page.getByRole('link', { name: 'Skip to main content' })
|
|
const nextClickableItemKey = e2eBrowser === 'webkit' ? 'Alt+Tab' : 'Tab'
|
|
|
|
await page.keyboard.press(nextClickableItemKey)
|
|
await expect(skipLink).toBeFocused()
|
|
await page.keyboard.press('Enter')
|
|
},
|
|
)
|
|
|
|
Then('the console main content should have keyboard focus', async function (this: DifyWorld) {
|
|
await expect(this.getPage().getByRole('main')).toBeFocused()
|
|
})
|
|
|
|
When('I complete the sign-in form using only the keyboard', async function (this: DifyWorld) {
|
|
const page = this.getPage()
|
|
const email = page.getByLabel('Email address')
|
|
const password = page.getByLabel('Password', { exact: true })
|
|
const showPassword = page.getByRole('button', { name: 'Show password' })
|
|
const submit = page.getByRole('button', { name: 'Sign in' })
|
|
|
|
await expect(email).toBeVisible()
|
|
for (let tabPresses = 0; tabPresses < 10; tabPresses += 1) {
|
|
await page.keyboard.press('Tab')
|
|
if (await email.evaluate((element) => element === document.activeElement)) break
|
|
}
|
|
await expect(email).toBeFocused()
|
|
await page.keyboard.insertText(adminCredentials.email)
|
|
|
|
await page.keyboard.press('Tab')
|
|
await expect(password).toBeFocused()
|
|
await page.keyboard.insertText(adminCredentials.password)
|
|
|
|
await page.keyboard.press('Tab')
|
|
await expect(showPassword).toBeFocused()
|
|
await page.keyboard.press('Tab')
|
|
await expect(submit).toBeFocused()
|
|
await page.keyboard.press('Enter')
|
|
})
|
|
|
|
When('I open and close the account menu using the keyboard', async function (this: DifyWorld) {
|
|
const page = this.getPage()
|
|
const trigger = getAccountMenuTrigger(this)
|
|
|
|
await expect(trigger).toBeEnabled()
|
|
await trigger.press('Enter')
|
|
await expect(trigger).toHaveAttribute('aria-expanded', 'true')
|
|
await page.keyboard.press('Escape')
|
|
await expect(trigger).toHaveAttribute('aria-expanded', 'false')
|
|
})
|
|
|
|
Then('the account menu trigger should regain keyboard focus', async function (this: DifyWorld) {
|
|
await expect(getAccountMenuTrigger(this)).toBeFocused()
|
|
})
|
|
|
|
When('I open and close the create app menu using the keyboard', async function (this: DifyWorld) {
|
|
const page = this.getPage()
|
|
const trigger = getCreateAppMenuTrigger(this)
|
|
|
|
await trigger.press('Enter')
|
|
await expect(trigger).toHaveAttribute('aria-expanded', 'true')
|
|
await page.keyboard.press('Escape')
|
|
await expect(trigger).toHaveAttribute('aria-expanded', 'false')
|
|
})
|
|
|
|
Then('the create app menu trigger should regain keyboard focus', async function (this: DifyWorld) {
|
|
await expect(getCreateAppMenuTrigger(this)).toBeFocused()
|
|
})
|