javascript - 带有 Node 、ES7、puppeteer 的页面对象模式

标签 javascript node.js testing puppeteer

我最近开始使用 Puppeteer 进行 e2e 测试(我对 Selenium Web 驱动程序有一些经验),但我在文档中找不到任何讨论 POM 模式的内容。是否有任何示例可以如何在 Puppeteer 中的 Node/ES7 中正确实现此功能?

假设我有一个简单的脚本来测试页面的登录功能:

(async () => {
...

     await page.goto(url, {
        timeout: 5000
    });

    await page.waitFor('input[id=userId]');

    await page.type('input[id=userId]', 'John Doe');
    await page.type('input[id=password]', 'password1');
    await page.click('button[type="submit"]');
    await page.waitFor('p.success-msg');
...
}();

通常,我们会有一个用于登录页面的页面对象模型。我如何为上面的页面创建一个基本的 POM 并将其与我的脚本集成?在这个环境下你会如何调用我的测试脚本中的POM?我会使用导入吗?我只是在寻找一个基本的“hello world”示例。

最佳答案

在最基本的层面上,POM 声明每个页面都有自己的类,其中包含与该页面交互的实用方法。

为了使用 Puppeteer 实现此目的,我们使用 ES6 类来创建包含各自页面实用方法的类。

文件夹结构

test/
  main.js
  pages/
    - HomePage.js
    - CartPage.js
    - ProductDetailPage.js

HomePage.js

export default class HomePage {

    constructor(page) {
        this.page = page;
    }

    async getTitle() {
        return this.page.title();
    }
}

ma​​in.js

import HomePage from "pages/HomePage";

const HP_URL = "https://google.com";

(async () => {

    await page.goto(HP_URL);

    const hp = new HomePage(page);

    const title = await hp.getTitle();

    console.log(title);

})();

关于javascript - 带有 Node 、ES7、puppeteer 的页面对象模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48216151/

相关文章:

javascript - 如何根据 Nightmare 中的情况做某事?

javascript - AdonisJs 可以用于 REST APIS 吗?

javascript - 将一个文本框的内容复制到另一个

javascript - ajax响应后无法遍历对象

javascript - 图片对象设置src前是否需要先设置onload函数?

javascript - Node.js 集群没有改进。一些博客声称的每秒交易数

python - 在 python 中搜索 wsgi 测试插件

python - 构造函数中的 Magic Mock 函数

unit-testing - 编写测试时如何处理setUp()成瘾问题?

Javascript 文本字段验证 ||资金投入