You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Laravel Dusk断言打印对话框已成功打开

Laravel Dusk 测试window.print()是否执行的方法

首先明确:浏览器的打印对话框属于原生系统级控件,不属于DOM范畴,也不属于alert/confirm/prompt这类标准JS对话框,Dusk内置的对话框断言方法无法直接检测打印弹窗的打开状态,我们可以通过Mock window.print 方法的方式验证它是否被调用。


具体实现步骤

  • 第一步:在触发打印操作前,向页面注入监听代码,临时重写window.print方法,添加调用标记
  • 第二步:执行触发打印的业务操作(比如点击打印按钮)
  • 第三步:读取页面上的调用标记,断言window.print已被执行

如果不需要实际弹出打印对话框干扰测试运行,可以直接在Mock方法里省略原有打印逻辑,只保留标记更新逻辑即可。


完整测试代码示例

public function test_print_function_is_called()
{
    $this->browse(function ($browser) {
        $browser->visit('/your-target-page')
            // 注入打印监听逻辑
            ->script("
                window.printCalled = false;
                // 不需要实际弹出打印框可以注释掉下两行相关代码
                // window.originalPrint = window.print;
                window.print = function() {
                    window.printCalled = true;
                    // window.originalPrint();
                }
            ");

        // 执行业务侧触发打印的操作
        $browser->click('#print-button')
            // 适配异步触发打印的场景,最多等待5秒
            ->waitUntil('window.printCalled === true', 5000);

        // 最终断言
        $this->assertTrue($browser->script('return window.printCalled')[0]);
    });
}

注意事项

如果你的打印逻辑是在异步请求、定时器回调等场景下触发的,必须添加waitUntil等待逻辑,避免同步断言时标记还未更新导致测试失败。

内容的提问来源于stack exchange,提问作者Magmatic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:45:01