我能够找到的所有内容似乎表明,在使用selenium webdriver see this post检查弹出警报时,您必须执行某种形式的WebDriverWait。似乎大多数人都试图验证预期的警报发生,但我试图捕捉任何行动后是否发生任何意外警报。
This comment似乎表明这可能是对警报抛出异常的增强,这已经实现了吗?或者,隐含地等待提醒当前最佳解决方案?如果想要检查是否有任何动作导致警报,那就等待了很多浪费时间。
感谢您的帮助。
答案 0 :(得分:1)
查看DesiredCapabilites,至少firefox驱动程序有unexpectedAlertBehaviour。
来自文档:
浏览器在丢弃之前应该使用未处理的警报做什么 UnhandledAlertException。可能的值是“接受”,“解雇” 和“忽略”
必须将DesiredCapabilities传递给constuctor中的驱动程序。检查here的使用情况。
答案 1 :(得分:0)
如果/当你获得警报时,你的问题在你想要做的情况下有点不清楚。
标题表示您要检查是否存在警报,这意味着它本质上不是Unexpected
。如果您知道何时发生警报并且预期在某个行动之后发生警报,则可以采用隐性等待。
在问题中你说'我试图捕捉是否发生任何意外警报',这意味着你不知道什么时候会发出警报,或者它不一致。这条路径可能有两个结果:
如果警报导致您继续测试时出现问题,那么我认为您的测试用例设计(和/或应用程序)存在问题,您应该弄清楚警报发生的原因,确保它是可重现的,然后。 Try / catch块和调试模式将成为你的朋友,但不应该以你完成的测试代码结束。
如果您不关心警报,并且如果您可以在接受或拒绝之后继续测试,那么Erki指出的DesiredCapabilities应该按照您的意愿行事。请注意,在整个测试运行过程中,这将接受/拒绝/忽略所有未处理的警报异常,这可能会导致意外行为。
有些人不同,但IMO,你应该总是知道警报何时发生(或不发生),并使用隐式等待来处理它们。如果由于UnhandledAlertException
而导致测试失败,那么您的测试问题或测试中的应用程序存在问题,根据我的经验,通常是测试。
尝试在Ajax调用完成之前完成操作特别容易抛出UnhandledAlertExceptions(再次,根据我的经验)。我有这个小帮手方法解决了我的很多问题(C#代码)
public void WaitForAjax()
{
var wait = new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15));
wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));
}