我正在使用木偶操作员使用浏览器进行测试,我设法做的是访问页面,然后我点击DOM元素,点击后,浏览器显示其他视图,在此我点击一个按钮打开一个弹出窗口,用facebook登录。
我的问题是:
我如何处理其他窗口进行登录 Facebook的?这是代码。
示例代码:
import * as puppeteer from 'puppeteer';
const f = async () => {
console.log('..');
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
page.setViewport({ width: 1200, height: 800 })
await page.goto('https://goalgoodies.herokuapp.com').catch(err => { console.log('error ', err); });
await page.screenshot({ path: 'screenshot.png' });
const resp = await page.click('a').catch(err => { console.log('error click', err); });
const inputElement = await page.$('.signin a').catch(err => { console.log('error selector', err); });
await inputElement.click().catch(err => { console.log('error click', err); });
await page.screenshot({ path: 'screenshot2.png' });
const fbBtn = await page.$('button[name=facebook]');
await fbBtn.click();
// here it's open pop up for do login with facebook
await page.screenshot({ path: 'clickpopup.png' });
};
f();
显然木偶没有办法与其他窗户互动
在这篇文章forum中,用户aslushnikov
提及与Target domain
相关的内容,但我无法理解他的意思或如何执行。
任何帮助都将不胜感激。
谢谢
答案 0 :(得分:2)
我认为您正在寻找浏览器上下文。
https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createBrowserContext
此处详细讨论了一个示例实现,
https://github.com/cyrus-and/chrome-remote-interface/issues/118
希望它有所帮助。
答案 1 :(得分:0)
为了允许在打开的页面之间切换,我创建了一个简单的实用方法:
async function changePage(url) {
let pages = await browser.pages();
let foundPage;
for(let i = 0; i < pages.length; i += 1) {
if(pages[i].url() === url) {
foundPage = pages[i];//return the new working page
break;
}
}
return foundPage;
}
这假设您的时间对于任何新打开的窗口都是正确的,但这将是一个不同的主题。