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

96 lines
2.8 KiB

import BasePage from '../Base';
import { WorkspacePage } from './';
import { Locator } from '@playwright/test';
/*
nc-workspace-settings
nc-collaborator-table-container
*/
export class CollaborationPage extends BasePage {
readonly workspace: WorkspacePage;
readonly list_collaborators: Locator;
constructor(workspace: WorkspacePage) {
super(workspace.rootPage);
this.workspace = workspace;
this.list_collaborators = this.get().locator('.nc-collaborators-list-table');
}
get() {
return this.workspace.get().locator('.nc-workspace-settings').locator('.nc-collaborator-table-container');
}
async waitFor({ state }) {
await this.get().waitFor({ state });
}
async addUsers(email: string, role: string) {
await this.waitFor({ state: 'visible' });
// click add user button to open modal
await this.get().getByTestId('nc-add-member-btn').click();
const inviteModal = this.rootPage.locator('.nc-invite-dlg');
await inviteModal.waitFor({ state: 'visible' });
const input_email = inviteModal.locator('input[id="email"]');
const selector_role = inviteModal.locator('.ant-select-selector');
const button_addUser = inviteModal.locator('.nc-invite-btn');
// flaky test: wait for the input to be ready
await this.rootPage.waitForTimeout(500);
// email
await input_email.fill(email + ' ');
// role
await selector_role.first().click();
const menu = this.rootPage.locator('.nc-role-selector-dropdown:visible');
await menu.locator(`.nc-role-select-workspace-level-${role.toLowerCase()}:visible`).first().click();
// submit
// allow button to be enabled
await this.rootPage.waitForTimeout(500);
await button_addUser.click();
await this.verifyToast({ message: 'Invitation sent successfully' });
await this.rootPage.waitForTimeout(500);
}
async getCollaboratorsCount() {
await this.waitFor({ state: 'visible' });
const collaborators = await this.list_collaborators.locator('tr.ant-table-row').count();
return collaborators;
}
async getCollaborator({ index }: { index: number }) {
await this.waitFor({ state: 'visible' });
const email = await this.list_collaborators
.locator('tr.ant-table-row')
.nth(index)
.locator('td.ant-table-cell')
.nth(0)
.innerText();
const role = await this.list_collaborators
.locator('tr.ant-table-row')
.nth(index)
.locator('td.ant-table-cell')
.nth(1)
.innerText();
return { email, role };
}
async removeCollaborator({ index }: { index: number }) {
await this.waitFor({ state: 'visible' });
await this.list_collaborators
.locator('tr.ant-table-row')
.nth(index)
.locator('td.ant-table-cell')
.nth(2)
.locator('button')
.click();
}
}