我试图测试我的社交媒体共享按钮。我正在使用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页面-尽管该页面在测试运行后正在浏览器中打开。
在运行测试之前,如何让摩卡咖啡等待窗口打开?
答案 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)
}
})