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