我正在尝试创建一些基本 Page 对象来在这里存储常用功能:
import { expect, Locator, Page } from '@playwright/test';
import { formatDiagnostic, isAssertionExpression, isObjectLiteralElementLike, isTaggedTemplateExpression } from 'typescript';
import { formType, newLocation, searchFilter, selector, selectorsList } from '../Types';
import { form } from '../Types';
export class BasePage {
readonly page: Page;
constructor(page: Page) {
this.page = page;
}
async navigate(path){
await this.page.goto(path)
}
commonSelectors:selectorsList={
dropdownInput:{cssPath:' body>div:last-of-type>.select2-search',
controlType:form.textfield}
}
public async fillForm(form:formType, selectors:selectorsList) {
for(const t of Object.keys(form)){
if(selectors[t].controlType == 'textfield') {
const el = await this.page.$(selectors[t].cssPath);
await el.type(form[t]);
await el.dispose();
}
if(selectors[t].controlType == 'dropdown') {
await this.page.click(selectors[t].cssPath)
await this.page.fill(this.commonSelectors.dropdownInput.cssPath, form[t])
await this.page.press(this.commonSelectors.dropdownInput.cssPath, 'Enter');
}
if(selectors[t].controlType == 'checkbox' && form[t]) {
await this.page.click(selectors[t].cssPath)
}
}
}
然后我使用 basepage 作为登录页面的父级:
import { expect, Locator, Page } from '@playwright/test';
import { BasePage } from './BasePage';
export class LoginPage extends BasePage {
readonly page: Page;
loginField = 'id=username'
passwordField = 'id=password'
loginButton = 'id=login'
constructor(page: Page) {
super(page)
}
async goto() {
await this.page.goto('');
}
async Login() {
console.time(`start Login`);
await this.page.waitForSelector(this.loginButton)
await this.page.fill(this.loginField, 'test1');
await this.page.fill(this.passwordField, 'test1');
await this.page.click(this.loginButton)
}
}
并在测试中使用登录:
import { test, expect, Page } from '@playwright/test';
import { LoginPage, BasePage } from '../PageObjects';
import { locationGrid, newLocation } from '../Types';
const playwright = require('playwright');
let loginPage: LoginPage;
test.describe('test', () => {
//let page1: Page;
test.beforeAll(async ({}) => {
const context = await browser.newContext();
const page = await context.newPage();
loginPage = new LoginPage(page);
});
test('test1', async (context) => {
await loginPage.goto();
await loginPage.Login();
});
当我执行测试剧作家时,只需打开浏览器第二次,BaseURL 出于某种原因无法正常工作。如果没有继承,一切都可以完美运行,所以请有人帮我理解我想念的东西吗?