WebDriverError:无效的会话ID

时间:2019-05-08 23:57:54

标签: docker automation protractor cucumber

我正在尝试将自动化测试容器化以在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镜像,并且该镜像已安装了必需的库(node,npm,yarn,chrome和chrome驱动程序)。

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

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

泊坞窗环境在Debian GNU / Linux 9上\ n \ l chrome驱动程序版本为 73.0.3683.75-1〜deb9u1 Google Chrome版本为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(内部/进程/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。(匿名函数)[作为takeScreenshot](/node_modules/protractor/built/browser.js:67:16)        在世界上。 (/test/cucumber/stepDefinitions/hooks.ts:36:17)

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我最近遇到了同样的问题。由于某种原因,浏览器实例似乎无法启动。在我的情况下,将 --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

答案 1 :(得分:0)

可以检查与您在Docker中使用的OS版本兼容的Chrome版本。 从日志看来,页面甚至没有加载或加载时崩溃。加载页面需要更多内存,或者可能启用了chromes扩展名。

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

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