Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!