Playwright/TypeScript 在子类上调用父函数

问题描述 投票:0回答:1

所以我遇到了一个超级奇怪的问题,虽然我已经解决了,但我不太确定为什么会发生这种情况:

我有一个所有其他页面对象都继承自的基本页面对象。它非常简单,看起来像这样:

import { Page, expect } from "@playwright/test";

export abstract class BasePage {
  constructor(public readonly page: Page) {}


  /**
   * navigates to url
   * @param path - url path
   */
  async open(path: string) {
    await this.page.goto(path);
  }
}

在我的网站中,我有一个无处不在的导航栏,所以我想我应该在其中放置一个函数来处理注销:

import { Page, expect } from "@playwright/test";

export abstract class BasePage {
  constructor(public readonly page: Page) {}

  public readonly navDropdownLink = this.page.locator("#navbarDropdown");
  public readonly logOffButton = this.page.locator("#logOffButton")

  async logOff() {
    await this.navDropdownLink.click()
    await this.logOffButton.click()
  }

  /**
   * navigates to url
   * @param path - url path
   */
  async open(path: string) {
    await this.page.goto(path);
  }
}

到目前为止非常简单的事情。我还有一个继承基本页面对象功能的仪表板页面对象。所以我想我可以从子类中调用父/基页面对象

logOff
函数:

const dashboard = new DashboardPage(page)
dashboard.logOff()

看起来应该可以工作,但是当调用它时,它似乎只是传递了该函数,而不是

await
正确地导致它失败。

但是!如果我将相同的

logOff
函数放入我的子页面对象类中,它就可以正常工作。我不太确定这里发生了什么,因为
DashboardPage
类应该可以访问
logOff
函数......并且我没有收到任何错误,但几乎就像它跳过了它一样? (或者只是忽略函数 async)。正如我在 Playwright 调试模式中看到的,它正在执行该功能,但不等待。

我假设这是某种继承问题?或者也许因为它是一个抽象类? (我对它们不是很熟悉,但我看到很多人使用

Abstract
作为基类)

typescript inheritance async-await playwright pageobjects
1个回答
0
投票

问题最终是

BasePage
是一个
abstract class
。我不太清楚为什么它的行为方式如此,但根据我的理解,我们无法实例化父抽象类,并且由于我没有在基类中声明它,所以导致了上述问题。

© www.soinside.com 2019 - 2024. All rights reserved.