docker - WebDriverError : invalid session id

标签 docker automation protractor cucumber

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

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

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

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

在运行测试之前,我确保安装了 Protractor 、 cucumber 和 webdriver 模块。

即使那样,我也在尝试安装 chrome 和 chrome 驱动程序,同时使用 apt-get 包管理器构建图像。

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

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:无效的 session 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)

  • 有什么想法吗?

    最佳答案

    我最近遇到了同样的问题。由于某种原因,浏览器实例似乎无法启动。在我的情况下添加 --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
    据此,另一个想法是尝试使用 --shm-size=1gb如果您真的想使用/dev/shm,则在运行容器时。

    关于docker - WebDriverError : invalid session id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050454/

    相关文章:

    python - 我如何自动化我用 python 编写的爬虫程序每月运行一次?

    angularjs - Protractor 测试(在 Angular 站点上使用 Selenium 和 Chrome)给出错误的 x 和 y 点

    python - 属性错误 : 'ParsedRequirement' object has no attribute 'req'

    docker - Docker Windows容器DNS缓存和防火墙

    eclipse - 在所有方法上自动设置断点

    xcode - Appium 错误 : Could not get Xcode version

    javascript - 如何在Protractor中调用其他测试用例中的公共(public)测试用例

    angularjs - 如何覆盖 Protractor 的默认超时?

    docker - 安装RPMS(〜500MB)将docker镜像大小增加1 GB以上

    ubuntu - aufs au_opts_parse :1155:docker[2010] unknown option dirperm1