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

C# Selenium:点击Alert按钮后重启程序,避免使用Thread.Sleep

解决Selenium中等待用户操作Alert后继续执行的问题

你的核心需求是去掉硬等待Thread.Sleep,改为等待用户手动点击Alert的OK/Cancel后再继续,且点击OK后重复执行操作并留在当前网站。以下是优化方案:

关键优化点

  • 用**显式等待(WebDriverWait)**替代Thread.Sleep,它会主动轮询Alert是否出现,直到用户完成操作才继续执行,避免不必要的等待
  • 将Alert相关逻辑封装为方法,点击OK后递归调用方法实现重复执行,确保停留在当前网站
  • 捕获NoAlertPresentException来处理用户点击Cancel的场景

修改后的完整代码

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;

class AlertAutomation
{
    static void Main(string[] args)
    {
        // 初始化浏览器驱动(这里以Chrome为例)
        IWebDriver driver = new ChromeDriver();
        // 导航到你的目标网站(确保停留在当前页面)
        driver.Navigate().GoToUrl("https://your-target-site.com");

        // 调用Alert处理方法
        HandleAlertAndRepeat(driver);

        // 程序结束后清理资源
        driver.Quit();
    }

    static void HandleAlertAndRepeat(IWebDriver driver)
    {
        // 执行JavaScript弹出Alert
        IJavaScriptExecutor js = driver as IJavaScriptExecutor;
        js.ExecuteScript("alert('hello world');");

        // 等待Alert出现,设置足够长的超时时间(300秒=5分钟,可按需调整)
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(300));
        IAlert alert = wait.Until(d => d.SwitchTo().Alert());

        try
        {
            // 用户点击OK后,继续执行
            alert.Accept();
            Console.WriteLine("用户点击了OK,重新执行操作");
            // 递归调用方法,实现重复执行且停留在当前网站
            HandleAlertAndRepeat(driver);
        }
        catch (NoAlertPresentException)
        {
            // 用户点击Cancel后,Alert消失,触发该异常,这里处理停止逻辑
            Console.WriteLine("用户点击了Cancel,停止执行");
        }
    }
}

代码说明

  1. 显式等待:WebDriverWait会持续检查Alert是否存在,直到用户操作Alert(点击OK/Cancel)或超时,完全替代Thread.Sleep的硬等待逻辑
  2. 递归调用:点击OK后调用HandleAlertAndRepeat方法,实现重复弹出Alert并等待用户操作,同时因为没有导航到新页面,会一直停留在当前网站
  3. 异常捕获:用户点击Cancel后,Alert会被关闭,此时alert.Accept()会抛出NoAlertPresentException,我们捕获该异常来处理停止执行的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:52:40