如何解决WebDriverException:消息:未知错误:Chrome无法启动:在Docker中异常退出?

时间:2018-02-07 15:36:52

标签: google-chrome docker selenium-chromedriver robotframework

我正在尝试在Docker中运行测试,目前在Jenkins奴隶上运行,所以裸机。为了使它更具可移植性,我尝试在其中运行Robot Framework,但到目前为止没有运气。

这是我用于创建机器人图像的Dockerfile:

f(a <- 2)

然后我通过调用:

来运行测试图像
f(a = a <- 2)

src / test / robot-framework 包含 BasicTest.robot 文件,dist文件夹是我想要测试的基于Angular的项目的创建的dist文件夹。

等待更长时间后,我收到的消息如下所示:

FROM ubuntu:16.04

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
                        dbus \
                        libgtk2.0-0 \
                    libgconf-2-4 \
                    libnss3 \
                    nginx \
                        python3 \
                    python3-pip \
                        xvfb

# google chrome requirements
RUN apt-get install -y --no-install-recommends \
                        fonts-liberation \
                        gconf-service \
                        libappindicator1 \
                        lsb-release \
                        wget \
                        libasound2 \
                        ibatk-bridge2.0-0 \
                        libgtk-3-0 \
                        libxss1 \
                        libxtst6 \
                        xdg-utils

COPY google-chrome-stable_current_amd64.deb /tmp
RUN dpkg --install /tmp/google-chrome-stable_current_amd64.deb && \
    apt-get install -f -y && \
    rm /tmp/google-chrome-stable_current_amd64.deb

# update pip & install robot framework
RUN pip3 install --upgrade pip \
                           setuptools && \
    pip3 install robotframework \
                 robotframework-selenium2library \
                 robotframework-xvfb

COPY chromedriver /usr/local/bin
RUN chmod +x /usr/local/bin/chromedriver

WORKDIR /usr/src/robot
CMD /etc/init.d/nginx start && python3 -m robot --include ready BasicTest.robot

我通过以下方式启动BasicTest.robot中的虚拟显示:

$ docker run -ti --rm -v "$PWD/src/test/robot-framework":/usr/src/robot -v "$PWD/dist":/var/www/html:ro --add-host databasehost:10.10.10.10 robot 

1 个答案:

答案 0 :(得分:1)

我不确定你的项目的目的是什么,但这里是我的Dockerfile,它使用了一个包含chrome_headless的Google Lib的puppeteer,让你更容易使用它。

Here你可以找到一个官方的例子,here是木偶的官方文件,有很好的社区支持。

这是我的Docker文件,它在构建具有puppeteer,node和chromium依赖关系的容器后运行npm脚本。

# Most part taken from https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
FROM node:8-slim

# # Manually install missing shared libs for Chromium.
RUN apt-get update && \
apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 
libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 
libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 
libxcb1 libxcomposite1 \
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 
libxrender1 libxss1 libxtst6 \
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release 
xdg-utils wget

COPY . /app/
WORKDIR app

# Install deps for server.
RUN npm install -g

# Install puppeteer so it can be required by user code that gets run in
# server.js. Cache bust so we always get the latest version of puppeteer when
# building the image.
ARG CACHEBUST=1
RUN npm install puppeteer@0.13.0

# Add pptr user.
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser \
&& chown -R pptruser:pptruser /app

# Run user as non privileged.
USER pptruser

EXPOSE 9222 

CMD ["npm", "start"]

在npm启动脚本中你可以运行我的测试。 在Docker容器中使用puppeteer的诀窍是Docker不会自动安装chrome依赖项,然后当你尝试使用它时它会失败。 尽管使用或不使用木偶操作,但该容器允许您在内部使用chrome_headless,在我看来,这比我在文档中找到的其他示例重。

仅用于运行

docker run -d -i --rm --cap-add=SYS_ADMIN --network=${yourNetwork} --name ${image_name} ${container_name}

希望有所帮助