如何在Powershell中通过Edge Selenium webdriver检测窗口是否最小化
解决方案
你遇到的参数无变化问题是Chromium Edge 93版本webdriver的原生缺陷,驱动层没有同步窗口最小化后的真实状态到Selenium接口,读取到的一直是最小化前的缓存值,该版本也没有内置isMinimized()相关的状态检测方法,可采用以下两种方案解决:
方案1:调用Win32系统API直接检测(兼容性最高)
该方法绕过Selenium驱动层的缺陷,直接从系统层面获取窗口真实状态,准确率100%,兼容所有Edge驱动版本。
- 首先在Powershell中导入判断窗口最小化状态的Win32接口:
Add-Type @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsIconic(IntPtr hWnd); } "@
- 匹配Selenium控制的Edge窗口进程,读取最小化状态:
# 给当前窗口设置唯一标识标题,避免多开窗口匹配错误 $driver.ExecuteScript("document.title = 'Selenium专属测试窗口_xxxx'") # 筛选对应标题的Edge进程 $targetProcess = Get-Process msedge | Where-Object { $_.MainWindowTitle -eq 'Selenium专属测试窗口_xxxx' } | Select-Object -First 1 if ($targetProcess) { $isMinimized = [Win32]::IsIconic($targetProcess.MainWindowHandle) # 返回值$isMinimized为$true代表窗口已最小化,$false代表窗口未最小化 }
方案2:升级Edge浏览器与对应驱动版本
该缺陷在95及以上正式版本的Chromium Edge驱动中已完成修复,升级后Selenium内置的窗口尺寸、位置参数可以返回真实值,搭配Selenium 4+版本还可直接通过WindowState枚举快速读取窗口状态。
内容的提问来源于stack exchange,提问作者wrieedx
相关产品推荐
相关产品推荐

