WebDriverError:会话 ID 无效

jav*_*eek 5 automation cucumber docker protractor

我正在尝试将自动化测试容器化以在 docker 环境中运行。当构建在自动化代码上运行时,它会创建一个 docker 映像并在 DTR 中更新。我有一个单独的 jenkins 管道,它在 docker 映像中运行自动化命令并将结果上传到工作区中。所有这些设置在非 docker 环境(即本地 mac 终端)中都运行良好,但相同的测试在 docker 环境中失败。我正在尝试找出解决方案,但似乎不起作用。

\n\n

在 docker 环境中运行量角器测试时出现以下错误

\n\n

# test/cucumber/stepDefinitions/hooks.ts:31\n WebDriverError: 无效会话 id\n (驱动程序信息: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Linux 4.9.125-linuxkit x86_64) 之后

\n\n

我从 Circleci/node ( https://hub.docker.com/r/circleci/node/ ) 构建了 docker 映像,并且该映像需要安装库(node、npm、yarn、chrome 和 chrome 驱动程序)。

\n\n

在运行测试之前,我确保量角器、黄瓜和 webdriver 模块已安装。

\n\n

即便如此,我仍在尝试安装 chrome 和 chrome 驱动程序,同时使用 apt-get 包管理器构建映像。

\n\n

docker env 位于 Debian GNU/Linux 9 \\n \\l\nchrome 驱动程序版本为 \n73.0.3683.75-1~deb9u1\nGoogle Chrome 版本为 73.0.3683.103 \n我正在无头运行

\n\n
Making sure the webdriver manager is updated before starting it\nWeb driver version 13.0\n\nRunning below:\nwebdriver-manager update --ignore_ssl --versions.chrome 73.0.3683.75-1~deb9u1\nwebdriver-manager start --detach\nprotractor test/cucumber/config/cucumberConfig.ts\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望所有测试都能在 docker 环境中运行,就像在 mac 终端中运行一样,但会出现以下错误:

\n\n
    \n
  • 并在 # test/cucumber/stepDefinitions/hooks.ts:31\n WebDriverError: 无效会话 id\n 之后注销应用程序 # test/cucumber/stepDefinitions/common-step-def.ts:64\n\xe2\x9c\x96 (驱动程序信息:chromedriver=73.0.3683.68(47787ec04b6e38e22703e856e101e840b65afe72),platform=Linux 4.9.125-linuxkit x86_64)\n位于Object.checkLegacyResponse(/node_modules/selenium-webdriver/lib/error.js:546:15)\n位于parseHttpResponse (/node_modules/selenium-webdriver/lib/http.js:509:13)\n 在 doSend.then.response (/node_modules/selenium-webdriver/lib/http.js:441:30)\n 在 \n在 process._tickCallback (internal/process/next_tick.js:189:7)\n 来自:任务:WebDriver.takeScreenshot()\n 在 thenableWebDriverProxy.schedule (/node_modules/selenium-webdriver/lib/webdriver.js:807: 17)\n 在 thenableWebDriverProxy.takeScreenshot (/node_modules/selenium-webdriver/lib/webdriver.js:1085:17)\n 在运行 (/node_modules/protractor/built/browser.js:59:33)\n 在 ProtractorBrowser .to.(匿名函数)[as takeScreenshot] (/node_modules/protractor/built/browser.js:67:16)\n at World. (/test/cucumber/stepDefinitions/hooks.ts:36:17)
  • \n
\n\n

有什么想法吗?

\n

nuc*_*ean 6

我最近遇到了同样的问题。由于某种原因,浏览器实例似乎无法启动。就我而言,添加--disable-dev-shm-usagechrome-options 解决了这个问题。

ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-dev-shm-usage");
ChromeDriver driver = new ChromeDriver(options);
Run Code Online (Sandbox Code Playgroud)

为什么这有帮助:

默认情况下,Docker 运行一个具有 /dev/shm 共享内存空间 64MB 的容器。这对于 Chrome 来说通常太小,并且会导致 Chrome 在渲染大页面时崩溃。要修复此问题,请使用 docker run --shm-size=1gb 运行容器以增加 /dev/shm 的大小。从 Chrome 65 开始,不再需要这样做。相反,使用 --disable-dev-shm-usage 标志启动浏览器:

~谷歌故障排除指南

据此,--shm-size=1gb如果您确实想使用 /dev/shm,则另一个想法是在运行容器时尝试使用 /dev/shm。


kri*_*anr 1

可能会检查 Chrome 版本是否与您在 Docker 中使用的操作系统版本兼容。从日志来看,该页面甚至没有加载或在加载时崩溃。要么需要更多内存来加载页面,要么可能已启用 chrome 扩展。

尝试将这些选项添加到配置中

chromeOptions: {
                args: [
                    'incognito',
                    'disable-extensions',
                    'disable-infobars',
                ]
            }
Run Code Online (Sandbox Code Playgroud)