问题:Docker环境下Protractor无头Chrome的window-size参数不生效
解决Docker中无头Chrome window-size参数不生效的问题
嘿,我来帮你搞定这个头疼的问题!你遇到的情况大概率是Chromedriver和Chromium版本不兼容,再加上Alpine环境下无头Chrome的特殊配置要求导致的。咱们一步步来解决:
一、先搞懂为啥会出问题
你用的Protractor 5.3.1默认带的Chromedriver是2.33,这个版本只支持Chrome 60-62,但你通过Alpine edge仓库装的Chromium版本肯定比这个高,版本不匹配直接就会让部分参数没法正常解析。另外,Alpine的沙箱机制也会干扰Chrome启动参数的生效。
二、分步解决,逐个击破
1. 对齐Chromedriver和Chromium的版本
首先得让这俩版本匹配上,要么装和Chromedriver 2.33兼容的旧版Chromium,要么升级Chromedriver到适配当前Chromium的版本——我更推荐后者,旧版本Chrome有安全漏洞,不太稳妥:
修改你的Dockerfile,把自带的chromium-chromedriver@edge去掉,换成安装匹配版本的Chromedriver:
FROM node:9-alpine RUN echo @edge http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories \ && apk add --no-cache \ python \ build-base \ git \ bash \ openjdk8-jre-base \ # 保留Chromium和依赖,去掉自带的chromedriver nss@edge \ chromium@edge # 自动安装和当前Chromium匹配的Chromedriver RUN npm install -g chromedriver --chromedriver_version=$(chromium-browser --version | awk '{print $2}' | cut -d'.' -f1-3)
2. 修正Protractor的Chrome配置
接下来要把protractor.conf.js里的Chrome选项配置对,别忘了加Alpine环境必需的参数:
exports.config = { chromeDriver: '/usr/local/bin/chromedriver', // 这里是新安装的chromedriver路径 capabilities: { browserName: 'chrome', chromeOptions: { args: [ '--headless', '--window-size=1920,1080', // 注意参数格式,中间不要加空格! '--no-sandbox', // Alpine环境必须加,不然Chrome启动会报错 '--disable-dev-shm-usage', // 解决容器内存不足的问题 '--disable-gpu' // 旧版无头模式需要这个参数,加上兼容性更好 ] } }, // 你的其他配置... };
3. 验证一下窗口大小到底生效没
最后可以在测试用例里加一段代码,确认窗口尺寸是不是真的设置成功了:
it('should check if window size is correct', async () => { const windowSize = await browser.driver.manage().window().getSize(); console.log(`当前窗口尺寸:宽度=${windowSize.width},高度=${windowSize.height}`); expect(windowSize.width).toBe(1920); expect(windowSize.height).toBe(1080); });
三、额外提个醒
如果还是有问题,可以试试把Node镜像换成基于Debian的(比如node:9-slim),Alpine的Chromium兼容性确实不如Debian系的好。另外,确保Docker容器给够内存,内存不足也会导致Chrome启动异常哦~
内容的提问来源于stack exchange,提问作者krishan
相关产品推荐
相关产品推荐

