浏览器弹出Alert时Selenium API行为疑问求解
核心背景:Alert弹窗的特殊性
Alert是浏览器原生的模态弹窗,它会劫持WebDriver的操作上下文,此时WebDriver无法与页面DOM进行交互,所有针对DOM元素的操作都会被直接阻断,抛出UnhandledAlertException(未处理警告异常)。
逐条分析选项陈述
陈述I:driver.findElements会抛出异常
正确。当Alert弹窗存在时,WebDriver无法访问页面DOM,根本无法执行“查找元素”的逻辑——返回空列表的情况是能正常访问DOM但未找到匹配元素,而这里是连DOM访问通道都被弹窗阻断,所以直接抛出异常。陈述II:driver.close会抛出异常
错误。driver.close()是针对浏览器窗口本身的操作,不属于DOM交互范畴,它不受Alert弹窗的影响,能够正常执行关闭当前窗口的指令(弹窗也会随窗口关闭而消失)。陈述III:driver.close会关闭当前窗口
正确。理由同上,close()操作直接作用于浏览器窗口,与页面DOM或弹窗无关,会正常关闭当前窗口。陈述IV:driver.findElements会返回空列表
错误。如陈述I所述,此时WebDriver根本无法访问DOM,到达不了“查找元素并判断是否存在”的步骤,只会抛出异常,不会返回空列表。
为什么你的初始认知不适用这个场景
你之前了解的findElements()返回空列表,是在WebDriver能正常与DOM交互的前提下——当页面DOM存在,但没有匹配选择器的元素时,才会返回空列表。而Alert弹窗的存在属于“WebDriver无法访问DOM”的极端场景,触发的是完全不同的错误逻辑。
内容的提问来源于stack exchange,提问作者Selenium Lover

