Selenium Chrome驱动关闭多窗口异常,剩余26个窗口未关闭如何解决?
问题根因
- 核心错误是正向遍历动态变化的窗口句柄集合:每次调用
Close()方法关闭窗口后,chrome.WindowHandles的长度会实时减1,集合内剩余元素的索引会统一前移一位,循环变量i自增后会直接跳过下一个待关闭的窗口,最终只关闭了约一半的目标窗口,和你剩余26个窗口的现象完全匹配。 - 次要错误是循环终止条件写为
i < chrome.WindowHandles.Count - 1,即使集合长度不变,该条件也会漏掉最后一个待关闭的窗口。
修复方案
你只需要提前将窗口句柄的快照存储到固定列表中,再遍历关闭即可,两种推荐写法如下:
写法1:反向遍历(最稳妥)
// 提前保存所有窗口句柄的快照,不受后续关闭操作影响 var allHandles = chrome.WindowHandles.ToList(); // 从最后一个窗口倒序关闭,跳过索引为0的初始窗口 for (int i = allHandles.Count - 1; i > 0; i--) { chrome.SwitchTo().Window(allHandles[i]).Close(); } MessageBox.Show(chrome.WindowHandles.Count.ToString());
写法2:正向遍历快照(更简洁)
var allHandles = chrome.WindowHandles.ToList(); // 跳过第一个初始窗口,关闭其余所有窗口 foreach (var handle in allHandles.Skip(1)) { chrome.SwitchTo().Window(handle).Close(); } MessageBox.Show(chrome.WindowHandles.Count.ToString());
两种写法执行后都会仅保留最初的1个窗口,符合预期。
内容的提问来源于stack exchange,提问作者msoeiro
相关产品推荐
相关产品推荐

