0

我正在尝试创建一些基本 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 出于某种原因无法正常工作。如果没有继承,一切都可以完美运行,所以请有人帮我理解我想念的东西吗?

4

0 回答 0