本文介绍在 VB.NET 中通过 Selenium WebDriver 可靠打开 Chrome 浏览器新标签页的正确方法,摒弃不稳定的 SendKeys 模拟按键方案,推荐使用原生 JavaScript 执行 window.open() 并切换窗口句柄的稳定实践。
本文介绍在 vb.net 中通过 selenium webdriver 可靠打开 chrome 浏览器新标签页的正确方法,摒弃不稳定的 `sendkeys` 模拟按键方案,推荐使用原生 javascript 执行 `window.open()` 并切换窗口句柄的稳定实践。
在 VB.NET 中使用 Selenium 控制 Chrome 浏览器时,许多开发者尝试通过 SendKeys(Keys.Control + "T") 或 Actions 类模拟快捷键来新建标签页,但这类方式存在明显缺陷:
- 依赖焦点状态(若页面元素未聚焦或浏览器失去输入焦点,按键无效);
- 受操作系统/浏览器版本影响(如 Chrome 最新版可能拦截或忽略前台模拟按键);
- 在无头模式(Headless)下完全不可用;
- Actions 链在 VB.NET 中易因语法差异导致构建失败,且 keyDown/keyUp 顺序不易精准控制。
✅ 推荐方案:通过 JavaScript 执行 window.open()
该方法绕过 UI 层,直接调用浏览器原生 API,兼容性高、稳定性强,且适用于常规模式与无头模式:
' 确保 driver 已初始化(例如 ChromeDriver)
Dim js As IJavaScriptExecutor = TryCast(driver, IJavaScriptExecutor)
js.ExecuteScript("window.open('');") ' 注意:传空字符串 '' 或 'about:blank' 更可靠
driver.SwitchTo().Window(driver.WindowHandles.Last())
? 关键说明:
- window.open('') 比 window.open() 更稳妥,显式指定空白目标页,避免部分环境因参数缺失触发默认行为异常;
- driver.WindowHandles.Last() 获取最新打开的窗口句柄(Selenium 将新标签页视为独立 window handle);
- 切换后,后续所有操作(如 driver.FindElement)均作用于新标签页;
- 若需返回原标签页,可提前保存原始句柄:Dim originalHandle = driver.CurrentWindowHandle,之后调用 driver.SwitchTo().Window(originalHandle)。
⚠️ 注意事项:
- 不要使用 window.open('https://example.com') 直接跳转并期望立即操作——页面加载需显式等待(如 WebDriverWait);
- Chrome 默认策略下,window.open() 打开的标签页可能被浏览器自动聚焦,但 Selenium 的 SwitchTo().Window() 是唯一可靠的上下文切换方式;
- 此方法对 Edge(Chromium 内核)同样有效;Firefox 也支持,但需确保驱动版本匹配。
总结:放弃模拟按键,拥抱 IJavaScriptExecutor —— 它更简洁、更健壮、更符合自动化测试工程最佳实践。











