Puppeteer 页面对象模型,浏览器和页面与 main 分开
Puppeteer Page Object Model with browser and page put apart from main
我正在尝试放入 class 人偶调用、浏览器对象和页面对象。但是我在使用页面对象模型时无法使用它。页面成员未定义。
在我发现的每个示例中,我总是看到对 puppeteer 的调用以及主函数中的浏览器和页面对象。我想这是上下文访问的问题。
但有可能实现我正在寻找的内容,并且至少仍然能够使用页面对象文件中的页面对象?
main.mjs
import Browser from './browser.mjs'
import HomePage from './HomePage.mjs'
async function main () {
const browser = new Browser();
const homePage = new HomePage(browser.page);
await homePage.open();
console.log(await homepage.getTitle());
await browser.close();
}
main();
browser.mjs
class Browser {
constructor() {
return this.main(); // I know, that's ugly
}
async main() {
this.browser = await puppeteer.launch({
headless: false,
});
this.page = await browser.newPage();
return this.browser,this.page
}
}
export default Browser
homepage.mjs
class HomePage {
constructor(page) {
this.page = page;
}
async open() {
this.page.goto('http://www.contoso.com');
}
async getTitle() {
return this.page.title();
}
}
export default HomePage
return this.browser,this.page
这个 return 是 browser
。如果你想访问浏览器和页面,你应该只 return this
。您的代码应如下所示。
return this
您可以从该对象访问浏览器、页面以及两者之间的所有内容。
我正在尝试放入 class 人偶调用、浏览器对象和页面对象。但是我在使用页面对象模型时无法使用它。页面成员未定义。
在我发现的每个示例中,我总是看到对 puppeteer 的调用以及主函数中的浏览器和页面对象。我想这是上下文访问的问题。
但有可能实现我正在寻找的内容,并且至少仍然能够使用页面对象文件中的页面对象?
main.mjs
import Browser from './browser.mjs'
import HomePage from './HomePage.mjs'
async function main () {
const browser = new Browser();
const homePage = new HomePage(browser.page);
await homePage.open();
console.log(await homepage.getTitle());
await browser.close();
}
main();
browser.mjs
class Browser {
constructor() {
return this.main(); // I know, that's ugly
}
async main() {
this.browser = await puppeteer.launch({
headless: false,
});
this.page = await browser.newPage();
return this.browser,this.page
}
}
export default Browser
homepage.mjs
class HomePage {
constructor(page) {
this.page = page;
}
async open() {
this.page.goto('http://www.contoso.com');
}
async getTitle() {
return this.page.title();
}
}
export default HomePage
return this.browser,this.page
这个 return 是 browser
。如果你想访问浏览器和页面,你应该只 return this
。您的代码应如下所示。
return this
您可以从该对象访问浏览器、页面以及两者之间的所有内容。