使用节点、ES7、puppeteer 的页面对象模式
Page Object Mode with node, ES7, puppeteer
我最近开始使用 Puppeteer 进行端到端测试(我对 Selenium Web Driver 有一些经验),但我在讨论 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?我会使用 import
吗?我只是在寻找一个基本的 'hello world' 示例。
在最基本的层面上,POM 指出每个页面都有自己的 class,其中包含与该页面交互的实用方法。
为了使用 Puppeteer 实现这一点,我们使用 ES6 classes 来创建 classes,其中包含各自页面的实用方法。
文件夹结构
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();
}
}
main.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);
})();
我最近开始使用 Puppeteer 进行端到端测试(我对 Selenium Web Driver 有一些经验),但我在讨论 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?我会使用 import
吗?我只是在寻找一个基本的 'hello world' 示例。
在最基本的层面上,POM 指出每个页面都有自己的 class,其中包含与该页面交互的实用方法。
为了使用 Puppeteer 实现这一点,我们使用 ES6 classes 来创建 classes,其中包含各自页面的实用方法。
文件夹结构
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();
}
}
main.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);
})();