【发布时间】:2018-01-30 02:14:56
【问题描述】:
场景:用于开发者应用注册的 Web 表单,包含两部分工作流程。
第 1 页:填写开发者应用详细信息并单击按钮以创建应用程序 ID,该应用程序 ID 在新选项卡中打开...
第 2 页:App ID 页面。我需要从这个页面复制 App ID,然后关闭选项卡并返回第 1 页并填写 App ID(从第 2 页保存),然后提交表单。
我了解基本用法 - 如何打开页面 1 并单击打开页面 2 的按钮 - 但是当页面 2 在新标签页中打开时,如何获取页面 2 的句柄?
例子:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch({headless: false, executablePath: '/Applications/Google Chrome.app'});
const page = await browser.newPage();
// go to the new bot registration page
await page.goto('https://register.example.com/new', {waitUntil: 'networkidle'});
// fill in the form info
const form = await page.$('new-app-form');
await page.focus('#input-appName');
await page.type('App name here');
await page.focus('#input-appDescription');
await page.type('short description of app here');
await page.click('.get-appId'); //opens new tab with Page 2
// handle Page 2
// get appID from Page 2
// close Page 2
// go back to Page 1
await page.focus('#input-appId');
await page.type(appIdSavedFromPage2);
// submit the form
await form.evaluate(form => form.submit());
browser.close();
})();
2017 年 10 月 25 日更新
- Browser.pages 的工作是completed 和merged
- 修复了Emit new Page objects when new tabs created #386 和Request: browser.currentPage() or similar way to access Pages #443。
仍在寻找一个好的用法示例。
【问题讨论】:
标签: node.js automated-tests google-chrome-headless puppeteer