在Docker容器中运行seleniumtesting

我想从我的JavaScript项目的来源build立一个docker图像。 我用摩卡框架写了一些testing。 testing应该在构builddocker构build过程中运行,因为我想用Jenkins自动化构build。

testing应该使用Firefox webdriver。 我在Docker镜像中安装了Xvfb,为Firefox进程提供虚拟显示。

但是每次运行构build时,所有的testing都失败了,我得到如下的错误信息:

Uncaught WebDriverError: Unable to parse new session response: {"error":"unknown error","message":"connection refused"} at WebDriverError (node_modules/selenium-webdriver/lib/error.js:27:5) at client_.send.then.response (node_modules/selenium-webdriver/http/index.js:477:17) at ManagedPromise.invokeCallback_ (node_modules/selenium-webdriver/lib/promise.js:1379:14) at TaskQueue.execute_ (node_modules/selenium-webdriver/lib/promise.js:2913:14) at TaskQueue.executeNext_ (node_modules/selenium-webdriver/lib/promise.js:2896:21) at asyncRun (node_modules/selenium-webdriver/lib/promise.js:2820:25) at node_modules/selenium-webdriver/lib/promise.js:639:7 at process._tickDomainCallback (internal/process/next_tick.js:129:7) From: Task: WebDriver.createSession() at Function.createSession (node_modules/selenium-webdriver/lib/webdriver.js:329:24) at Driver (node_modules/selenium-webdriver/firefox/index.js:386:38) at Builder.build (node_modules/selenium-webdriver/builder.js:467:16) at Object.<anonymous> (test/e2e/driver.js:10:69) ... 

当我在我的本地机器上的Docker容器之外运行testing时,一切正常。

我用以下命令初始化webdriver:

 var webdriver = require('selenium-webdriver'); var capabilities = webdriver.Capabilities.firefox(); capabilities.set('marionette', true); var driver = new webdriver.Builder().withCapabilities(capabilities).build(); 

是否有任何有关如何在docker集装箱内无头执行selenium检测的最佳实践?

我通过运行启动selenium独立服务器的gulp任务和xvfb-run的testing来解决这个问题:

 CMD xvfb-run ./node_modules/gulp/bin/gulp.js test