Docker:如何使用Selenium服务器进行NightwatchJS测试?

14

我不知道如何在位于自定义e2e:latest docker镜像的./bundle文件夹中运行我的NodeJS应用程序的selenium服务器。

我认为我必须将selenium服务器和webdriver chrome添加到e2e:latest镜像的Dockerfile中,是吗?

到目前为止,我已经创建了一个基于java:8-jre的docker镜像,并安装了NodeJS和nightwatchJS:

Dockerfile

FROM java:8-jre

## Node.js setup
RUN curl -sL https://deb.nodesource.com/setup_4.x | bash -
RUN apt-get install -y nodejs

## Nightwatch
RUN npm install -g nightwatch

这个图像随后用于测试: gitlab-ci.yml
build:
  stage: build
  tags:
    - deploy
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - meteor npm install --production
    - meteor build $PACKAGE_PATH --directory
    # Maybe something like...? - docker build -t $CI_REGISTRY_IMAGE:e2e .

nightwatch:
  image: e2e:latest
  stage: e2e
  tags:
    - e2e
  before_script:
    - cd ./bundle
  script:
    - nightwatch

配置如下:
nightwatch.conf.js
module.exports = {
    'src_folders'           : ['test/e2e'],
    'output_folder'         : 'reports',
    'custom_commands_path'  : '',
    'custom_assertions_path': '',
    'page_objects_path'     : '',
    'globals_path'          : '',
    'test_runner'           : {
        'type'   : 'mocha',
        'options': {
            'ui'      : 'bdd',
            'reporter': 'list'
        }
    },

    'selenium': {
        'start_process': false,
        'server_path'  : '',
        'log_path'     : '',
        'host'         : '127.0.0.1',
        'port'         : 4444,
        'cli_args'     : {
            'webdriver.chrome.driver': './bin/chromedriver'
        }
    },

    'test_settings': {
        'default': {
            'launch_url'   : 'http://localhost',
            'selenium_port': 4444,
            'selenium_host': 'localhost',
            'silent'       : true,
            'screenshots'  : {
                'enabled': true,
                'path'   : 'reports/error-screenshots'
            },
            'desiredCapabilities': {
                'browserName'      : 'chrome',
                'javascriptEnabled': true,
                'acceptSslCerts'   : true
            }
        },

        'chrome': {
            'desiredCapabilities': {
                'browserName'      : 'chrome',
                'javascriptEnabled': true,
                'acceptSslCerts'   : true
            }
        }
    }
}

什么没有运行?从 Gitlab CI 的作业中你得到了什么样的输出? - Jawad
现在没有运行Selenium服务器。我不知道如何在这种情况下设置它。 - user3142695
@Jawad 现在我正在考虑使用 nightmare。据我所知,我不需要一个 selenium 服务器。 - user3142695
看起来对于 Nightwatch,你需要像 Selenium 这样的 Web 驱动程序,然后再使用一个 Web 浏览器,而 Nightmare 则更加独立。 - Jawad
但是我该如何将这个实现到我的Dockerfile和yml文件中呢?想必噩梦会更简单,对吧? - user3142695
1个回答

4

不确定这是否适用于Gitlab CI,但可以看看Selenoid项目。这是一个小型(6 Mb)二进制文件,它在单独的Docker容器中启动浏览器,或直接启动Webdriver进程。因此,如果容器方法不适合您的需求,请尝试将Selenoid +例如Chromedriver+ Chrome打包到同一容器中与Node.js。使用Selenoid时无需安装Java。


我的意思是,我已经有一个包含我的 Node 应用程序的 Docker 镜像(我们称其为 app:latest),现在我有一个 Selenoid Docker 容器。如果我正确理解文档,Selenoid Docker 镜像/容器正在本地运行在 localhost:4444。但是我该如何将 Node 应用程序连接到这个设置中?还是说我必须复制文件?如果是的话,应该放在哪里...? - user3142695
我建议使用任何基于Node.js的容器,然后添加Selenoid二进制文件、ChromeDriver二进制文件和Chrome本身。无需安装Java、Selenium服务器等其他组件。 - vania-pooh
也许这是一个愚蠢的问题,但我该如何将Selenoid添加到我的现有Docker镜像中(该镜像包含节点应用程序文件)? - user3142695
我已经更新了帖子。添加了GitLab CI的构建阶段。使用meteor build创建了一个Node应用程序。所以现在 - 如果我理解你正确的话 - 我需要使用selenoid和chrome创建一个node镜像。对此,您能否发布一些代码行? - user3142695
类似于:https://gist.github.com/vania-pooh/fafe7be5f97c09bfdfe4304433cfe63f - vania-pooh
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接