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

如何让Playwright不再自动关闭对话框并正常显示?

如何让Playwright允许显示浏览器原生对话框(Alert/Confirm/Prompt)

Playwright默认会自动拦截并关闭所有原生对话框(Alert、Confirm、Prompt),这就是你注入alert()后看不到弹窗的原因。要让对话框正常显示,你需要通过监听页面的Dialog事件来覆盖这个默认行为。

以下是针对你使用的C#版本Playwright的具体解决方案:

步骤1:启动浏览器并创建页面

先按你的代码启动非无头浏览器,可选添加SlowMo参数放慢操作速度,方便观察弹窗:

using Microsoft.Playwright;

var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions 
{ 
    Headless = false,
    SlowMo = 1000 // 可选,放慢操作节奏,便于查看对话框
});
var page = await browser.NewPageAsync();

步骤2:注册Dialog事件处理程序

通过监听page.Dialog事件,接管对话框的处理逻辑,阻止Playwright自动关闭:

page.Dialog += async (sender, dialog) =>
{
    // 可选:打印对话框信息用于调试
    Console.WriteLine($"对话框类型:{dialog.Type},内容:{dialog.Message}");
    
    // 让对话框显示5秒后再关闭,你可以根据需求调整时长
    await Task.Delay(5000);
    await dialog.AcceptAsync(); // 点击对话框的「确定」按钮
    // 如果是Confirm或Prompt,也可以用dialog.DismissAsync()模拟点击「取消」
};

步骤3:注入并执行alert代码

现在再注入alert()代码,对话框就会正常显示了:

await page.EvaluateAsync("alert('This is a warning message!');");

// 等待足够时间确保对话框完成显示与关闭
await page.WaitForTimeoutAsync(6000);

// 最后关闭浏览器
await browser.CloseAsync();

额外说明

  • 如果希望用户手动关闭对话框而非自动关闭,可以移除Task.Delay()和dialog.AcceptAsync()的调用,但此时Playwright会暂停后续操作,直到你在代码中主动调用AcceptAsync()或DismissAsync(),或者通过其他方式触发处理逻辑。
  • 该方法同样适用于confirm()和prompt()对话框,只需在事件处理程序中根据dialog.Type做对应处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:03:11