Python Selenium Alert异常处理问题:脚本未执行分支直接报错
解决Alert异常处理未进入分支的问题
你的代码在逻辑和异常捕获类型上都踩了坑,导致脚本直接报错而非进入异常分支,我来帮你梳理问题并给出修正方案:
问题根源
你的try块里执行的是driver.switch_to.default_content(),但此时页面已经有alert弹出——这个操作会因为存在未处理的alert而抛出UnhandledAlertException,但你捕获的是NoAlertPresentException(这个异常仅在尝试切换到alert但不存在时才会触发),所以异常根本没被捕获,直接触发了报错。
另外,代码里的alert = driver.switch_to.alert()是语法错误:switch_to.alert是属性而非方法,不需要加括号。
修正后的代码方案
这里给你两种可行的写法,适配不同场景:
方案1:主动检查并处理Alert
适合提前预判可能出现alert的场景:
from selenium.common.exceptions import NoAlertPresentException try: # 尝试切换到alert,存在则处理 alert = driver.switch_to.alert print('Alert Popup detected') alert.dismiss() except NoAlertPresentException: # 无alert时执行默认内容切换 driver.switch_to.default_content()
方案2:捕获操作被Alert打断的异常
适合不确定alert何时弹出的场景:
from selenium.common.exceptions import UnhandledAlertException try: driver.switch_to.default_content() except UnhandledAlertException: print('Alert Popup interrupted the operation') alert = driver.switch_to.alert alert.dismiss() # 处理完alert后,重新执行原操作 driver.switch_to.default_content()
关键注意点
driver.switch_to.alert是属性调用,不要加括号,否则会触发语法错误。- 区分两种异常的触发场景:
NoAlertPresentException是找不到alert时抛出,UnhandledAlertException是操作被alert打断时抛出,别搞混捕获类型。
内容的提问来源于stack exchange,提问作者user9794893
相关产品推荐
相关产品推荐

