Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
El titiritero no contesta el cuadro de diálogo

Estoy tratando de probar un cuadro de alerta en Titiritero:

 msg = ''; await page.goto('http://localhost:8080/', { waitUntil: 'networkidle2' }); await page.$eval('#value', el => el.value = '<script>alert("BLEH")</script>'); page.on('dialog', async dialog => { msg = dialog.message(); await dialog.dismiss() }) // submit comment await page.$eval('#message', form => form.submit()); expect(msg).toEqual('BLEH');

Sin embargo, no parece devolver el mensaje dentro del cuadro de alerta (aunque he confirmado que funciona haciéndolo manualmente). ¿Alguna idea de por qué no se está ingresando page.on('dialog', async dialog => { ?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No estoy seguro de qué está pasando con su página; parece que está probando XSS, pero en cualquier caso, puede prometer que el controlador de diálogo se resuelva en el valor de dialog.message() como en este ejemplo.

Tenga en cuenta que estoy enviando el formulario con Enter: llamar a form.submit() parece anular la prevención predeterminada, matando la página, pero si funciona en su sitio, esa modificación no cambia el punto fundamental del código a continuación .

Tenga en cuenta que await dialogDismissed; nunca expirará ya que no es una función de Titiritero. Si quieres eso, llama a setTimeout(reject, someDelay) en la promesa.

 const puppeteer = require("puppeteer"); let browser; (async () => { const html = ` <form id="message"><input id="value"></form> <script> document .getElementById("message") .addEventListener("submit", e => { e.preventDefault(); alert(document.getElementById("value").value); }) ; </script> `; browser = await puppeteer.launch(); const [page] = await browser.pages(); const dialogDismissed = new Promise((resolve, reject) => { const handler = async dialog => { await dialog.dismiss(); resolve(dialog.message()); }; page.once("dialog", handler); }); await page.setContent(html); const inputEl = await page.$("#value"); await inputEl.type("hello world"); await inputEl.press("Enter"); const msg = await dialogDismissed; console.log(msg); // => hello world await page.close(); })() .catch(err => console.error(err)) .finally(async () => await browser.close()) ;
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda