【问题标题】:WebDriverError: invalid session idWebDriverError:无效的会话 ID
【发布时间】:2019-09-26 18:15:23
【问题描述】:

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

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

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

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

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

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

docker env 位于 Debian GNU/Linux 9 \n \l chrome驱动版本是 73.0.3683.75-1~deb9u1 谷歌浏览器版本是 73.0.3683.103 我正在无头奔跑

Making sure the webdriver manager is updated before starting it
Web driver version 13.0

Running below:
webdriver-manager update --ignore_ssl --versions.chrome 73.0.3683.75-1~deb9u1
webdriver-manager start --detach
protractor test/cucumber/config/cucumberConfig.ts

我希望所有测试在 docker 环境中运行的方式与在 mac 终端中运行的方式相同,但出现以下错误:

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

有什么想法吗?

【问题讨论】:

  • WebDriverError: 未知错误:由于标签页崩溃而删除会话崩溃(会话信息:无头 chrome=73.0.3683.103)(驱动程序信息:chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),平台=Linux 4.9 .125-linuxkit x86_64)

标签: docker automation protractor cucumber


【解决方案1】:

我最近遇到了同样的问题。由于某种原因,浏览器实例似乎无法启动。在我的情况下,将 --disable-dev-shm-usage 添加到 chrome-options 解决了这个问题。

ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-dev-shm-usage");
ChromeDriver driver = new ChromeDriver(options);

为什么会有帮助:

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

~Google troubleshooting guide

据此,如果你真的想使用/dev/shm,另一个想法是在运行容器时尝试使用--shm-size=1gb

【讨论】:

    【解决方案2】:

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

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

    chromeOptions: {
                    args: [
                        'incognito',
                        'disable-extensions',
                        'disable-infobars',
                    ]
                }
    

    【讨论】:

    • 不,它不起作用。以下是我的浏览器和 chrome 驱动程序版本详细信息。测试在 docker 容器中运行 不,它不起作用。以下是我的浏览器和 chrome 驱动程序版本详细信息。测试在 docker 容器中运行 WebDriverError: invalid session id (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Linux 4.4.155-94.50-default x86_64
    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2016-04-23
    • 2019-08-13
    • 2019-09-23
    • 1970-01-01
    • 2015-09-07
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多