增加table通用支持
This commit is contained in:
parent
4df28c7d21
commit
af0f260dd5
|
@ -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;
|
||||
|
|
|
@ -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不等于""或者不等于"-"
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue