我在使用Selenium时遇到了一个问题,这似乎没有道理。
正在测试的应用是过时的aspx mishmash,执行有问题的操作如下:
Form
内的几个字段然而,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驱动程序上,运行顺利
答案 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