You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新ChromeDriver/Chrome后Protractor测试崩溃求助

解决Protractor测试需手动点击窗口才执行的问题

我之前也碰到过ChromeDriver更新后Protractor出现这种焦点依赖的诡异问题,给你几个实际可行的排查和解决方向:

  • 检查Chrome启动参数配置:在你的Protractor配置文件(conf.js)里,给Chrome的capabilities添加强制获取焦点的参数,比如:

    capabilities: {
      browserName: 'chrome',
      chromeOptions: {
        args: [
          '--start-maximized', // 最大化窗口,有助于获取焦点
          '--force-app-window-focus', // 强制Chrome窗口获得系统焦点
          '--disable-features=TranslateUI' // 禁用翻译弹窗,避免干扰焦点
        ]
      }
    }
    

    我当时加了--force-app-window-focus之后,就不用手动点击窗口了。

  • 确认Promise管理器状态:如果你的Protractor版本较新,建议禁用旧的Selenium Promise管理器,改用原生async/await,因为新ChromeDriver对旧Promise机制的兼容性可能有问题。在配置文件里添加:

    SELENIUM_PROMISE_MANAGER: false
    

    同时确保所有测试代码里的异步操作都用async/await包裹,比如:

    it('should do something', async () => {
      await browser.get('/');
      await element(by.id('test')).click();
    });
    
  • 核对Chrome与ChromeDriver版本完全匹配:有时候看似同步更新,但可能下载的ChromeDriver版本和Chrome主版本号有细微差异(比如Chrome是119.0.6045.105,ChromeDriver也要是119.0.6045.105),重新下载完全对应的版本替换试试,版本不兼容经常会引发这类奇怪的焦点/异步问题。

  • 强制浏览器获取焦点:在测试的beforeAll钩子中添加一段脚本,强制让浏览器窗口获得焦点,比如:

    beforeAll(async () => {
      await browser.get('/');
      await browser.executeScript('window.focus();');
    });
    
  • 排查系统级焦点设置:比如Windows的「焦点辅助」、Mac的「勿扰模式」或者第三方窗口管理工具,可能会阻止Chrome自动获取焦点,暂时关闭这些功能再跑测试,排除系统层面的干扰。

  • 升级Protractor版本:如果你的Protractor版本比较老(比如低于7.0),它对新版ChromeDriver的支持可能不完善,升级到最新的稳定版本,能解决不少兼容性问题。

内容的提问来源于stack exchange,提问作者ThatJerkKris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:50