如何等待弹出窗口?

时间:2020-03-07 10:21:23

标签: javascript mocha puppeteer chai

我试图测试我的社交媒体共享按钮。我正在使用puppeteer和chai运行客户端测试。当用户单击共享按钮时,将为相关社交媒体网站打开一个弹出窗口。使用以下代码触发窗口。

document.querySelector(".share .facebook").addEventListener("click", shareFacebook)

function shareFacebook(e){
    e.preventDefault()
    popupWindow(`https://www.facebook.com/sharer/sharer.php?u=${window.location.href}&title=${"Test"}`, "test", window, 500, 220)
}

function popupWindow(url, title, win, w, h) {
    const y = win.top.outerHeight / 2 + win.top.screenY - ( h / 2);
    const x = win.top.outerWidth / 2 + win.top.screenX - ( w / 2);
    return win.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+y+', left='+x);
}

一切正常,但是我无法等待弹出窗口的测试。 这是我的测试:

describe("share test", ()=>{

it.only("should open a facebook share window", async()=>{
        await page.evaluate(()=>{
            window.scrollTo(0, document.body.scrollHeight);
        })
        await page.waitForSelector("img.facebook", {visible:true})
/*      const nav = new Promise(res => browser.on('targetcreated', res)) */
        await page.click("img.facebook")
    /*  await nav */
        await page.waitFor(10000)

        pages = await browser.pages()
        for(let i=0; i< pages.length; i++){
            p = await pages[i].title();
            console.log(p)
        }

    })
})

await page.waitFor(10000)行有效,并且我打印出了Facebook标题,但我不想使用不可靠的等待时间。 nav = new Promise(res => browser.on('targetcreated', res))行在这里accepted answer的建议不起作用,我没有打印出Facebook页面-尽管该页面在测试运行后正在浏览器中打开。

在运行测试之前,如何让摩卡咖啡等待窗口打开?

1 个答案:

答案 0 :(得分:0)

const nav = new Promise(res => browser.on('targetcreated', res))移动到初始化点击事件await page.click("img.facebook")之后似乎可以解决问题。所以现在的工作代码是

it.only("should open a facebook share window", async()=>{
        await page.evaluate(()=>{
            window.scrollTo(0, document.body.scrollHeight);
        })
        await page.waitForSelector("img.facebook", {visible:true})
        await page.click("img.facebook")
        const nav = new Promise(res => browser.on('targetcreated', res))
        await nav
        pages = await browser.pages()
        for(let i=0; i< pages.length; i++){
            p = await pages[i].title();
            console.log(p)
        }

    })
相关问题