多维表格
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

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/);
}
}