You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Playwright测试中「Cannot read properties of undefined (reading 'getInput')」错误?

解决Playwright测试中的「Cannot read properties of undefined (reading 'getInput')」错误

问题原因

你遇到的错误核心是**videoPage实例未被正确初始化**就传递给了VideoPageSteps类:

  • 在beforeAll钩子中,仅声明了videoPage变量,但未调用new VideoPage(page)创建实例,直接把值为undefined的videoPage传给了VideoPageSteps的构造函数。
  • 当VideoPageSteps的insertQueryText方法调用this.videoPage.getInput()时,this.videoPage是undefined,因此抛出「无法读取undefined的getInput属性」的错误。

另外你提供的videoPage和videoPage.spec.ts代码完全重复,推测是粘贴失误,以下以videoPage.spec.ts为例修正。

解决步骤

1. 在beforeAll中先实例化VideoPage

修改测试文件的beforeAll逻辑,先创建VideoPage实例,再初始化VideoPageSteps:

import { chromium, test} from '@playwright/test'
import * as videoPageData from '../services/data/videoPage.data.json'
import VideoPageSteps from '../services/steps/videoPage.steps'
import VideoPage from '../services/pages/videoPage'

test.describe('Test suite', () => {
    
    let videoPage: VideoPage
    let videoPageSteps: VideoPageSteps

    test.beforeAll(async () => {
        const browser = await chromium.launch()
        const page = await browser.newPage()
        // 先实例化VideoPage
        videoPage = new VideoPage(page)
        // 传入实例化后的videoPage创建VideoPageSteps
        videoPageSteps = new VideoPageSteps(page, videoPage)

        await page.goto(videoPageData.data.baseURL, {waitUntil: 'load'})
    })

    test('Entering a search query', async () => {
        await videoPageSteps.insertQueryText(videoPageData.data.queryText)
    })
})

2. 确认VideoPage类的getInput方法存在

确保../services/pages/videoPage路径下的VideoPage类正确定义了getInput方法,示例如下:

import { Page, Locator } from '@playwright/test';

export default class VideoPage {
  private page: Page;
  private inputLocator: Locator;

  constructor(page: Page) {
    this.page = page;
    // 替换成你页面中实际的输入框选择器
    this.inputLocator = page.locator('input[name="search"]');
  }

  getInput(): Locator {
    return this.inputLocator;
  }
}

额外建议

  • 删除重复的测试代码,videoPage和videoPage.spec.ts内容一致,保留一份即可。
  • 若项目架构允许,可在VideoPageSteps的构造函数内直接实例化VideoPage,减少外部依赖传递。

内容的提问来源于stack exchange,提问作者lemabatje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:20:17