在Selenium中针对C#的警报阻止执行

时间:2019-01-01 15:24:49

标签: c# selenium

我在使用Selenium时遇到了一个问题,这似乎没有道理。

正在测试的应用是过时的aspx mishmash,执行有问题的操作如下:

  • 填写Form内的几个字段
  • 通过单击按钮提交表单
  • 出现带有确认ID的警报弹出窗口

然而,Alert在进行硒测试时,似乎对整个过程产生了阻碍作用。显示警报弹出窗口后,所有随后的硒行均被阻止,包括 driver.SwitchTo().Alert(),用于访问和关闭弹出窗口。

如果有所作为,则提交按钮位于iframe内部。

使用通用chrome not reachable异常测试最终超时。

使用ChromeDriver(2.45.0)和Selenium.WebDriver(3.141.0)的最新版本

编辑:

经过进一步调查后,似乎是iframe引起了问题。显示警报后,从SwitchTo()调用iframe处于阻塞状态。因此,您既不能切换回DefaultContext,也不能切换到Alert().Dismiss()

public void SubmitForm ()
{
    _driver.SwitchTo().Frame(_driver.FindElement(By.Id("iframe1")));
    _driver.FindElement(By.Id("submitButton1")).Click();

    // Alert appears        

    // Just an extension method that tries `_driver.SwitchTo().Alert()`
    _driverWait.Until(c => c.AlertDisplayed()); // Blocked by alert

    _driver.SwitchTo().Alert().Accept(); // Not reached
}

编辑2:

在Firefox驱动程序上,运行顺利

1 个答案:

答案 0 :(得分:3)

如果您需要跳过警报,则可以使用以下代码禁用通知;

y_true

另一方面,您可以使用下面的代码来处理警报;

 ChromeOptions options = new ChromeOptions();
 options.AddArguments("--disable-notifications"); // to disable notification
 driver = new ChromeDriver(options);

编辑:

您还可以尝试以下代码吗? ExpectedConditions已过时。因此,您需要从nuget获取options.UnhandledPromptBehavior = UnhandledPromptBehavior.Dismiss; //.accept, .dismiss, etc. 包,并将该命名空间导入到您的类中。

发件人:

DotNetSeleniumExtras.WaitHelpers

收件人:

_driverWait.Until(c => c.AlertDisplayed()); // Blocked by alert