Selenium Java中不使用Robot类实现Chrome全屏退出(适配无头模式)
可行解决方案
方案1:直接调用浏览器全屏退出API(最推荐)
直接通过Selenium的JavascriptExecutor调用浏览器原生的全屏操作接口,不需要依赖键盘事件,普通模式、无头模式下均生效,是最稳定的方案:
JavascriptExecutor js = (JavascriptExecutor) driver; // 先判断当前是否处于全屏状态,再执行退出操作 js.executeScript("if (document.fullscreenElement) document.exitFullscreen();");
方案2:JS模拟ESC按键事件
如果你的应用退出全屏的逻辑绑定了ESC按键的监听,必须触发按键事件才能走全流程,可以通过JS主动在文档层派发ESC键盘事件,不需要页面获得焦点即可生效:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(""" const escapeEvent = new KeyboardEvent('keydown', { key: 'Escape', code: 'Escape', keyCode: 27, which: 27, bubbles: true, cancelable: true }); document.dispatchEvent(escapeEvent); """);
如果使用JDK15以下版本,将多行字符串替换为普通字符串拼接即可使用。
原方案失效原因说明
- Actions类的
sendKeys方法只会把按键指令发送给当前页面获得焦点的元素,如果登录后焦点不在顶层文档上,ESC事件无法被全局的全屏监听逻辑捕获,因此不会生效。 - Robot类依赖操作系统级的输入事件触发,无头模式下浏览器没有挂载到系统GUI上下文,没有对应的输入通道,因此完全失效。
内容的提问来源于stack exchange,提问作者Somnath
相关产品推荐
相关产品推荐

