mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.6 KiB
99 lines
3.6 KiB
import BasePage from '../Base'; |
|
import { WorkspacePage } from './'; |
|
import { expect } from '@playwright/test'; |
|
|
|
/* |
|
nc-header-content |
|
[data-testid="nc-dash-nav-workspaces"] |
|
[data-testid="nc-dash-nav-explore"] |
|
[data-testid="nc-dash-nav-help"] |
|
[data-testid="nc-dash-nav-community"] |
|
data-testid="nc-quick-action-wrapper" |
|
input["placeholder="Quick Actions"] |
|
[data-testid="nc-notification-bell-icon"] |
|
[data-testid="nc-ws-account-menu-dropdown"] |
|
|> .ant-dropdown-menu-vertical |
|
|> [data-testid="nc-menu-accounts__user-settings"] |
|
|> [data-testid="nc-menu-accounts__sign-out"] |
|
*/ |
|
|
|
export class HeaderPage extends BasePage { |
|
readonly workspace: WorkspacePage; |
|
|
|
constructor(workspace: WorkspacePage) { |
|
super(workspace.rootPage); |
|
this.workspace = workspace; |
|
} |
|
|
|
get() { |
|
return this.workspace.get().locator('.nc-header-content'); |
|
} |
|
|
|
async waitFor({ state }) { |
|
await this.get().waitFor({ state }); |
|
} |
|
|
|
async verifyStaticElements() { |
|
// logo on the left (disabled for now) |
|
// await this.get().locator('img[src="/_nuxt/assets/img/brand/nocodb-full-color.png"]').waitFor({ state: 'visible' }); |
|
|
|
// menu items in the center (disabled for now) |
|
// await this.get().locator('[data-testid="nc-dash-nav-workspaces"]').waitFor({ state: 'visible' }); |
|
// await this.get().locator('[data-testid="nc-dash-nav-explore"]').waitFor({ state: 'visible' }); |
|
// await this.get().locator('[data-testid="nc-dash-nav-help"]').waitFor({ state: 'visible' }); |
|
// await this.get().locator('[data-testid="nc-dash-nav-community"]').waitFor({ state: 'visible' }); |
|
|
|
// quick action, notifications & account menu on the right |
|
// await this.get().locator('[data-testid="nc-quick-action-wrapper"]').waitFor({ state: 'visible' }); |
|
// await this.get().locator('input[placeholder="Quick Actions"]').waitFor({ state: 'visible' }); |
|
await this.get().locator('[data-testid="nc-notification-bell-icon"]').waitFor({ state: 'visible' }); |
|
await this.get().locator('[data-testid="nc-ws-account-menu-dropdown"]').waitFor({ state: 'visible' }); |
|
} |
|
|
|
// Custom routines |
|
// |
|
|
|
// Menu : Workspaces, Explore, Help, Community |
|
async openMenu(param: { title: string }) { |
|
await this.get().locator(`[data-testid="nc-dash-nav-${param.title.toLowerCase()}"]`); |
|
} |
|
|
|
async navigateUsingCmdK({ |
|
keySequence, |
|
searchInput, |
|
url, |
|
}: { |
|
keySequence?: string[]; |
|
searchInput?: string; |
|
url: string; |
|
}) { |
|
await this.rootPage.keyboard.press('Meta+K'); |
|
await this.rootPage.locator('div.modal-content').waitFor({ state: 'visible' }); |
|
await this.rootPage.locator('div.modal-content').locator('.breadcrumb-list').click(); |
|
|
|
if (searchInput) { |
|
await this.rootPage.locator('input[placeholder="Quick actions"]').click(); |
|
await this.rootPage.locator('input[placeholder="Quick actions"]').fill(searchInput); |
|
await this.rootPage.keyboard.press('Enter'); |
|
} else if (keySequence) { |
|
// press each key specified in the keySequence array one by one |
|
for (const key of keySequence) { |
|
await this.rootPage.keyboard.press(key); |
|
} |
|
} |
|
|
|
// verify current url |
|
await this.rootPage.waitForTimeout(100); |
|
expect(this.rootPage.url()).toBe(url); |
|
} |
|
|
|
async accountMenuOpen({ title }: { title: 'user-settings' | 'sign-out' }) { |
|
await this.get().locator('[data-testid="nc-ws-account-menu-dropdown"]').click(); |
|
await this.rootPage |
|
.locator('.ant-dropdown-menu-vertical') |
|
.locator(`[data-testid="nc-menu-accounts__${title}"]`) |
|
.click(); |
|
if (title === 'sign-out') await this.rootPage.waitForURL(/signin/); |
|
else await this.rootPage.waitForURL(/users/); |
|
} |
|
}
|
|
|