Python 是否可以在没有隐式等待的情况下使用selenium webdriver检查警报?

Python 是否可以在没有隐式等待的情况下使用selenium webdriver检查警报?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我所能找到的一切似乎都表明,在使用selenium webdriver检查弹出警报时,您必须执行某种形式的WebDriverWait。似乎大多数人都在尝试验证预期警报是否发生,但我正在尝试捕获任何操作后是否发生任何意外警报 似乎表明这可能是对警报抛出异常的一种增强,是否已实现?或者,隐式等待警报是当前最好的解决方案吗?如果想要检查任何操作是否会导致警报,那么等待的时间就浪费了很多 感谢您的帮助。仔细看看,至少firefox驱动程序具有出人意料的AlertBehaviour 从文档中: 在抛出警报

我所能找到的一切似乎都表明,在使用selenium webdriver检查弹出警报时,您必须执行某种形式的WebDriverWait。似乎大多数人都在尝试验证预期警报是否发生,但我正在尝试捕获任何操作后是否发生任何意外警报

似乎表明这可能是对警报抛出异常的一种增强,是否已实现?或者,隐式等待警报是当前最好的解决方案吗?如果想要检查任何操作是否会导致警报,那么等待的时间就浪费了很多

感谢您的帮助。

仔细看看,至少firefox驱动程序具有出人意料的AlertBehaviour

从文档中:

在抛出警报之前,浏览器应如何处理未处理的警报 未处理的AlertException。可能的值为“接受”、“驳回” 和“忽略”


所需的功能必须传递给Constructor中的驱动程序。检查使用情况。

您的问题有点不清楚,如果/当您收到警报时,您希望如何处理警报

标题表示您要检查是否存在警报,这意味着本质上它不是意外的。如果您知道警报何时发生,并期望它在某个操作之后发生,那么隐式等待就是最好的选择

在问题中,你说“如果发生任何意外警报,我会尽力捕捉”,这意味着你不知道何时会发出警报,或者警报不一致。这条道路可能有两个结果:

  • 如果警报导致继续测试时出现问题,那么我认为您的测试用例设计(和/或应用程序)有问题,您应该找出警报发生的原因,确保警报的可复制性,然后选择其中之一。Try/catch块和调试模式在这里是您的朋友,但不应该在您完成的测试代码中结束

  • 如果您不关心警报,并且如果您可以在接受或拒绝警报后继续测试,那么DesiredCapabilities正如Erki所指出的,应该做您想要做的事情。但请注意,这将在整个测试运行过程中接受/拒绝/忽略所有未处理的警报异常,可能会导致意外行为

有些人会有所不同,但在我看来,您应该始终知道警报何时会发生(或不会发生),并使用隐式等待来处理警报。如果您的测试因
未处理的AlertException
而失败,那么您的测试或正在测试的应用程序都有问题,根据我的经验,通常是测试有问题

在Ajax调用完成之前尝试完成操作尤其容易抛出未处理的AlertException(根据我的经验,也是这样)。我有一个小助手方法,它解决了我的很多问题(C代码)


对于这个特殊的应用程序,有很多用户配置;提供输入,点击提交,诸如此类。我不希望在提交时出现警报,但有时会出现警报,原因可能是输入在某种程度上不正确,或者是提交操作时出现问题(通常是错误)。如果我想捕获任何可能发生的警报,我想知道,除了UnexpectedAlertPresentException之外,仅仅用try包装“submits”是否最有意义。对于我想对警报执行的操作,我想抛出一个异常并打印警报文本(try/except可以工作)。
    public void WaitForAjax()
    {
        var wait = new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15));
        wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));
    }