当前位置: 首页 > 知识库问答 >
问题:

如何在Typescript中使用剧作家和剧作家/测试实现页面对象模型?

洪富
2023-03-14

我尝试过剧作家页面对象文档和几个youtube视频关于这个主题。我也读过GitHub问题(github页面对象问题),但当有不止一个页面对象类时,仍然存在实现页面对象模型的问题。我理解一个简单的类和测试文件,但是如果有人能帮助我,当我想在另一个页面类中实例化一个页面类或者继承它时,那将是非常感激的。我想在特定方法之外的另一个类中实例化一个页面类,这样我就可以在多个方法中使用该实例。我希望有一个样板为Playwright/测试与打字,不只是基本的一个类,一个测试运行文件。任何帮助将不胜感激。

我的代码示例

export class LoginPage{
    page: Page
    /**
     * 
     */
    constructor(page: Page) {
        this.page = page;
    }

    public readonly logInButton ='text=Log in';
    
    public async clickLoginButton() {
        await this.page.click(this.logInButton);
    }
}


export class AnotherPage{
    page: Page
    /**
     * 
     */
    constructor(page: Page) {
        this.page = page;
    }
    
    login = new Login(this.page); // This does not work as Property 'page' is used before its initialization 

    public async anotherPageMethod(): Promise<void> {
        const login = new Login(this.page); // This works but this limits the scope of login to only one method. And I have to repeat this if I have mutiple methods using login.
        await login.clickLogin();
    }
}

共有1个答案

靳高明
2023-03-14

您必须将所有页面对象初始化移动到构造函数

在你的情况下,你会有这样的东西:

export class AnotherPage {
    page: Page
    // add loginPage property
    loginPage: Login

    constructor(page: Page) {
        this.page = page;
        // initialize login page object 
        this.loginPage = new Login(page)
    }

    public async anotherPageMethod(): Promise<void> {
        // loginPage accessible here
        await this.login.clickLogin();
    }

    public async oneMoreAnotherPageMethod(): Promise<void> {
        // loginPage accessible here too
        await this.login.clickLogin();
    }

}
 类似资料:
  • 是否可以定义一个禁用Javascript的浏览器来模拟爬虫如何查看页面?应该有一个选项可以通过。

  • 我正在写一个测试来注册我网站上的用户。使用@playright/test,我在playright中定义了几个不同的项目。配置。ts: 我的测试如下所示: 但是,当我运行此测试时,它只对第一个工作人员有效,因为您只能注册一次电子邮件地址。 因此,我想做的是在我的测试中访问项目名称(例如,),以便我可以将其转换为电子邮件地址,以便每次运行测试时,它都会根据项目名称注册用户。 如何在剧作家测试中获得项目

  • 我想通过剧作家选择一个选项,但我不能选择一个选项。什么是错的? 梅 测试

  • 如何与剧作家一起下载文件? 我知道这个问题,如何与剧作家一起下载?但该示例代码不起作用。使用最新发布的剧作家,浏览器实例上没有“pageTarget”功能:

  • 我有一个while循环,它运行一些代码,而selector是隐藏的,即。 如何在这里添加超时,使//do在运行前延迟? 我想这样做,因为我发现代码运行太快,无法找到选择器。。。

  • 这是我第一次使用剧作家,我不知道如何等待请求和验证响应。我已经使用cypress很长时间了,管理网络请求非常容易。例如,我需要在单击按钮后验证响应,这就是我使用cypress的方法: 这就是我试图对剧作家做同样的事情的方式,但是它验证了早在点击保存按钮之前就发送的请求。我不知道如何正确管理这个请求,这是我的测试套件的一个停止: 任何帮助或建议都将不胜感激