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

114 lines
3.8 KiB

import { expect } from "@playwright/test";
import { DashboardPage } from ".";
import BasePage from "../Base";
export class TreeViewPage extends BasePage {
readonly dashboard: DashboardPage;
readonly project: any;
constructor(dashboard: DashboardPage, project: any) {
super(dashboard.rootPage);
this.dashboard = dashboard;
this.project = project;
}
get() {
return this.dashboard.get().locator(".nc-treeview-container");
}
async focusTable({ title }: { title: string }) {
await this.get().locator(`.nc-project-tree-tbl-${title}`).focus();
}
// assumption: first view rendered is always GRID
//
async openTable({ title }: { title: string }) {
await this.get().locator(`.nc-project-tree-tbl-${title}`).click();
// wait for the column, active tab animation will be started
await this.dashboard.get().locator('[pw-data="grid-id-column"]').waitFor();
await this.dashboard.tabBar.locator(`.ant-tabs-tab-active:has-text("${title}")`).waitFor();
// wait active tab animation to finish
await expect.poll(async () => {
return await this.dashboard.tabBar.locator(`[data-pw="nc-root-tabs-${title}"]`).evaluate((el) => {
return window.getComputedStyle(el).getPropertyValue("color")
})
}).toBe("rgb(67, 81, 232)"); // active tab text color
await this.dashboard
.get()
.locator('[pw-data="grid-load-spinner"]')
.waitFor({ state: "hidden" });
await expect(this.rootPage).toHaveURL(
`/#/nc/${this.project.id}/table/${title}`
);
}
async createTable({ title }: { title: string }) {
await this.get().locator(".nc-add-new-table").click();
await this.dashboard.get().locator(".ant-modal-body").waitFor();
await this.dashboard.get().locator('[placeholder="Enter table name"]').fill(title);
await this.dashboard.get().locator('button:has-text("Submit")').click();
await expect(this.rootPage).toHaveURL(
`/#/nc/${this.project.id}/table/${title}`
);
await this.dashboard.get()
.locator('[pw-data="grid-load-spinner"]')
.waitFor({ state: "hidden" });
await this.dashboard.get().locator('.nc-grid-add-new-cell').waitFor();
}
async verifyTable({ title, index }: { title: string; index?: number }) {
await expect(
this.get().locator(`.nc-project-tree-tbl-${title}`)
).toBeVisible();
if(index) {
expect(await this.get().locator('.nc-tbl-title').nth(index)).toHaveText(title);
}
}
async verifyTableDoesNotExist({ title }: { title: string }) {
await expect(
await this.get().locator(`.nc-project-tree-tbl-${title}`).count()
).toBe(0);
}
async deleteTable({ title }: { title: string }) {
await this.get()
.locator(`.nc-project-tree-tbl-${title}`)
.click({ button: "right" });
await this.dashboard.get()
.locator('div.nc-project-menu-item:has-text("Delete")')
.click();
await this.dashboard.get().locator('button:has-text("Yes")').click();
await this.toastWait({ message: "Deleted table successfully" });
}
async renameTable({ title, newTitle }: { title: string; newTitle: string }) {
await this.get()
.locator(`.nc-project-tree-tbl-${title}`)
.click({ button: "right" });
await this.dashboard.get()
.locator('div.nc-project-menu-item:has-text("Rename")')
.click();
await this.dashboard.get().locator('[placeholder="Enter table name"]').fill(newTitle);
await this.dashboard.get().locator('button:has-text("Submit")').click();
await this.toastWait({ message: "Table renamed successfully" });
}
async reorderTables({ sourceTable, destinationTable}: {
sourceTable: string;
destinationTable: string;
}) {
await this.dashboard.get().locator(`[pw-data="tree-view-table-draggable-handle-${sourceTable}"]`).dragTo(
this.get().locator(`[pw-data="tree-view-table-${destinationTable}"]`),
);
}
}