Puppeteer 未拾取对话框

2023-12-12

我正在尝试测试 Puppeteer 中的警报框:

    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');

但是,它似乎没有在警报框中返回消息(即使我已经确认它可以手动执行)。任何想法为什么page.on('dialog', async dialog => {没有被输入?


我不确定你的页面发生了什么——看起来你正在测试 XSS,但无论如何,你可以承诺对话框处理程序来解析dialog.message()值如本例所示。

请注意,我正在使用 Enter -- 调用提交表单form.submit()似乎覆盖了默认的预防措施,杀死了页面,但如果它在您的网站上有效,则该修改不会改变下面代码的基本点。

请记住await dialogDismissed;永远不会超时,因为它不是 Puppeteer 函数。如果您想要的话,请致电setTimeout(reject, someDelay)在承诺中。

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(() => browser?.close())
;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Puppeteer 未拾取对话框 的相关文章

随机推荐

  • INSERT 语句与 FOREIGN KEY 约束“FK_PostTag_Tag_TagId”冲突

    我在用实体框架 7 RC1我有实体 public class Post public Int32 Id get set public String Title get set public virtual IList
  • 最后进入异常处理

    到底是什么作用finally阻止异常处理执行 它保存应该始终执行的代码 无论是否发生异常 例如 如果您打开了一个文件 则应该在finally阻止以确保它始终处于关闭状态 如果您将其关闭try块 较早的异常将导致执行直接跳转到catch阻止并
  • Shunting-Yard VS 递归下降解析器

    我正在构建一个高级数学解析器 并且想知道 Shunting Yard 和其他可用解析器算法 例如 Descent Parser 之间的区别 因为我更喜欢以 RPN 表示法存储公式 提前致谢 我从来没有太多使用 调车场 算法 因为它似乎只关注
  • 如何为从 NIB 加载的 NSWindow 提供焦点?

    我在用着NSWindowController从 NIB 加载窗口 然而 当我打电话时showWindow 该窗口在视觉上位于最上面 但焦点仍保持在原来的位置 而不是将其移动到新窗口 It s easy to see this happeni
  • java中的日历日期为yyyy-MM-dd格式

    如何将日历日期转换为yyyy MM dd format Calendar cal Calendar getInstance cal add Calendar DATE 1 Date date cal getTime SimpleDateFo
  • 为什么 pytesseract 不能识别单个数字?

    I am performing ocr on a site and specifically on these two images 我对 OCR 相当陌生 我使用以下内容 from PIL import Image import pyte
  • 如何使用 jQuery 增加数量字段的值?

    我有一个带有一些数量字段的表格 每一侧都有一个加号和减号
  • .NET 中的网络文件复制

    我有一个运行 Samba 共享的 Ubuntu 盒子 向所有人开放 我可以通过 ip 地址访问它 所以我知道我可以完全访问它 在我的应用程序中 我正在尝试以下操作 但它无法通过 IP 地址 仅 DNS 名称 工作 val ip addres
  • 有没有更好的方法来设置 JPanel 图形的初始位置?)

    在梁的第15章中Java 编程简介 第七版 他介绍了一个程序 可以在 JPanel 上制作一个 2 D 球 并通过单击放大 缩小按钮来放大它 我修改了程序 以便它还可以 1 在用户单击 选项 单击时放大 缩小球 2 允许您通过按下按钮来选择
  • 矩阵求逆的最快方法

    我想用反函数和很多函数处理图像 为了让代码快速运行 有谁能在 3 种反转方法中建议一种快速方法吗 double cvInvert const CvArr src CvArr dst int method CV LU CV LU 高斯消除并选
  • 如何将天数添加到字符串数据类型的 jtextfield 中给出的日期

    再会 我只是想问一下在给定日期中添加天数 我有一个 jtexfield txtStart 和另一个 jtexfield txtExpiry 我需要在 txtExpiry 中显示距 txtStart 中的日期 102 天后的日期 我正在使用
  • 如何在函数定义和函数调用中使用可变宏参数?

    我正在尝试使用宏根据宏的参数定义几个类似的函数 然而 结果函数需要采用的参数的数量和类型在所有函数中并不相同 但我还需要将函数的所有参数传递到函数体内的另一个可变参数函数中 我想要完成的事情的一个最小例子 define COMMAND CO
  • Checkstyle规则限制根包之间的交互(使用ImportControl?)

    如何创建 Checkstyle 规则来限制不同根包之间的交互 我有以下3个根包 models views controllers They are not就像是com mycompany myproject models 他们是根包 我想禁
  • 如何使用循环获取dir()中的值?

    为什么我无法使用循环获取 dir 中项目的值 for item in dir print item 它只是打印 builtins doc loader name package spec 那么 我如何使用循环来打印 item 中的值 即 m
  • Scala 中的 N 皇后

    def queens n Int List List Int Int def placeQueens k Int List List Int Int if k 0 List List else for queens lt placeQuee
  • 仅包含“div”的表格碎片

    当尝试抓取网页时 该表没有 tr 标签 并且是全部 div tags 我试图抓取的站点检查器如下所示 检查员截图 我希望能够从table row类 但刮擦永远不会返回任何东西 使用下面的代码 当我抓取 table header 要不就 pr
  • 列表与字典(最大大小、元素数量)

    我试图确定列表和字典的最大大小 以 RAM 为单位 我也很好奇每个元素 条目可以容纳的最大数量 以及每个条目的内存占用量 我的理由很简单 我和大多数程序员一样 有点懒 这是一种美德 当我编写程序时 我喜欢只编写一次 并尽可能使其面向未来 我
  • 将 8 字节数组转换为 Double

    谈论 Visual Basic 6 我能够找到如何将 Double 转换为 8 字节数组 但反之则不然 在我开始尝试编码之前 是否有一些例程可以执行此操作 例如链接问题中描述的 CopyMemory 在这种情况下可以使用 CopyMemor
  • 查找所有 k 大小的子集,其总和为 n 大小的重复未排序正整数袋

    请注意 这是必需的C NET 2 0项目 不允许使用 Linq 我知道这里已经提出了非常类似的问题 并且我已经生成了一些工作代码 见下文 但仍然希望获得有关如何在给定 k 和 s 条件下使算法更快的建议 这是我到目前为止所学到的 动态规划是
  • Puppeteer 未拾取对话框

    我正在尝试测试 Puppeteer 中的警报框 msg await page goto http localhost 8080 waitUntil networkidle2 await page eval value el gt el va