【问题标题】:Handle alert that appears when refreshing page处理刷新页面时出现的警报
【发布时间】:2019-12-23 13:44:03
【问题描述】:

我有一个用 C# 编写的应用程序,它填充了网页上的一些文本框。 (铬)

我已经在其中实现了一个基本的 ErrorHandler。我想在记录错误后刷新页面。

但是 Chrome 有一个Changes you made may not be saved. 提示,所以我不能自动刷新页面。我尝试了以下参数,但没有一个起作用:

ChromeOptions options = new ChromeOptions();
options.AddArguments("--disable-notifications");
options.AddArguments("--disable-popup-blocking");

我有一个想法,将整个 Selenium webdriver 实例放到一个单独的类中(目前它是在主窗体中),这样我也可以从 ErrorHandler 类中访问它,这样我就可以退出驱动程序并再次打开它(如果有)任何错误。

但我没有找到任何 C# 解决方案。

在这种情况下你能帮我吗? 谢谢!

【问题讨论】:

    标签: c# selenium google-chrome


    【解决方案1】:

    您所描述的内容听起来像是一个中断页面刷新的警报弹出窗口——您可能需要使用Alerts 类将其作为警报处理。以下是如何在 C# 中执行此操作:

    // attempt to refresh
    driver.Navigate().Refresh();
    
    // handle the alert & continue with the page refresh
    driver.SwitchTo().Alert().Accept();
    

    您可能需要先在警报上调用WebDriverWait

    // attempt to refresh
    driver.Navigate().Refresh();
    
    // wait for the alert to exist, then handle it and continue with refresh
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    
    var alert = wait.Until(ExpectedConditions.AlertIsPresent());
    alert.Accept();
    

    请注意,ExpectedConditions 现在在 .NET 的 Selenium 命名空间中已过时,因此您需要添加 NuGet 包 DotNetSeleniumExtras.WaitHelpers 才能安全地访问此类。 WebDriverWait 仍包含在 OpenQA.Selenium.Support.UI 命名空间中。

    【讨论】:

    • 你太棒了! WebDriverWait 和 ExpectedConditions 成功了!谢谢!
    • 如果导航被阻止,这将如何工作,例如,如果您使用 Click,这会导致导航或 GoTo - 如果警报阻止导航,则该方法将挂起等待导航完成不是吗?
    • 您需要将您的PageLoadStrategy 自定义为None,告诉司机不要等待导航完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多