Как ждать всплывающее окно? - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь проверить свои кнопки обмена в социальных сетях. Я использую кукловод и чай для запуска клиентских тестов. Когда пользователь нажимает кнопку «Поделиться», открывается всплывающее окно для соответствующего сайта социальной сети. Окно запускается с использованием следующего кода:

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)), как рекомендуется здесь принятый ответ не работает, и я не распечатываю страницу Facebook - хотя она открывается в браузере, хотя после запуска теста.

Как заставить мокко дождаться открытия окна перед запуском теста?

1 Ответ

0 голосов
/ 07 марта 2020

Перемещение 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)
        }

    })
...