1

我正在使用 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();

显然木偶无法与其他窗口交互

这是另一个相关的问题

在这个帖子论坛中,用户aslushnikov提到了与 相关的Target domain内容,但我无法理解他的意思,或者如何执行。

任何帮助,将不胜感激。

谢谢

4

2 回答 2

2

我认为您正在寻找浏览器上下文。

https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createBrowserContext

这里详细讨论了一个示例实现,

https://github.com/cyrus-and/chrome-remote-interface/issues/118

希望能帮助到你。

于 2017-10-09T23:08:10.800 回答
1

为了允许在打开的页面之间进行更改,我创建了一个简单的实用程序方法:

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

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

于 2018-04-15T14:23:06.133 回答