增加table通用支持

This commit is contained in:
zhiyong.yue 2023-05-23 16:43:42 +08:00
parent 4df28c7d21
commit af0f260dd5
2 changed files with 65 additions and 0 deletions

View File

@ -1,4 +1,6 @@
import type { Page, Locator } from 'playwright-core';
import Table from './Table'
export default abstract class PageComponent {
public readonly page: Page;
public readonly componentType: string;
@ -9,6 +11,10 @@ export default abstract class PageComponent {
this.locators = new Locators(page);
}
async goto(path: string) {
await this.page.goto(`main#${path}`);
}
public async click提交() {
await this.locators.button("提交").click()
}
@ -21,6 +27,15 @@ export default abstract class PageComponent {
await this.locators.button("新建").click()
}
/**
*
* @param tableUniqueText
* @returns
*/
public table(tableUniqueText: string){
return new Table(this.page, tableUniqueText)
}
/**
*
@ -34,6 +49,11 @@ export default abstract class PageComponent {
));
}
/**
*
* @param fields
*/
public async fillForm(fields: Map<string | Locator, string | null | Array<string>>) {
for (const [field, value] of Object.entries(fields)) {
let inputAncestors: Locator;

View File

@ -0,0 +1,45 @@
import type { Page, Locator } from 'playwright-core';
export default class Table {
readonly tableLocator: Locator
constructor(private page: Page, private tableUniqueText: string) {
this.page = page;
this.tableLocator = this.page.locator('//div[contains(@class,"singleTable")]').filter({ hasText: `${this.tableUniqueText}` });
}
private async getTableHeaders(): Promise<string[]> {
await this.tableLocator.waitFor({ state: "visible" });
const headers = await this.tableLocator.locator('thead tr th').all();
const headerTexts = await Promise.all(headers.map(async (header) => {
return await header.innerText();
}));
return headerTexts;
}
/**
* ,
* @param row
* @param col
* @returns
*/
public async getCellLocator(row: string | number, col: string | number): Promise<Locator> {
let rowLocator: Locator;
let col_index: number;
if (typeof row === 'string') {
rowLocator = this.tableLocator.locator(`tbody tr`).filter({ has: this.page.getByText(`${row}`, { exact: true }) });
} else {
rowLocator = this.tableLocator.locator('tbody').locator('tr').locator("visible=True").nth(row - 1);
}
if (typeof col === 'string') {
const headerTexts = await this.getTableHeaders();
col_index = headerTexts.indexOf(col);
} else {
col_index = col;
}
return rowLocator.locator(`td:nth-child(${col_index + 1})`);
}
//生成正常表达式:判断元素text不等于""或者不等于"-"
}