如何在木偶戏中处理多个窗口?

时间:2017-10-09 22:53:09

标签: node.js testing ava puppeteer

我正在使用木偶操作员使用浏览器进行测试,我设法做的是访问页面,然后我点击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();

显然木偶没有办法与其他窗户互动

Here another related question

在这篇文章forum中,用户aslushnikov提及与Target domain相关的内容,但我无法理解他的意思或如何执行。

任何帮助都将不胜感激。

谢谢

2 个答案:

答案 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;
}

这假设您的时间对于任何新打开的窗口都是正确的,但这将是一个不同的主题。