【问题标题】:Robot Framework - Docker - Chromedriver机器人框架 - Docker - Chromedriver
【发布时间】:2019-02-21 03:32:57
【问题描述】:

我正在尝试设置一个容器以在 chrome 上使用 RobotFramework 进行测试。

但是当我运行我的容器时,我不断收到 WebDriverException。 我已经搜索过,但找不到任何真正适合我的修复程序。

这是我的 Dockerfile

FROM python:3

RUN apt-get update -y

# Dependencies
RUN apt-get install -y  \
       apt-utils \
       build-essential \
       fonts-liberation \
       gconf-service \
       libappindicator1 \
       libasound2 \
       libcurl3 \
       libffi-dev \
       libgconf-2-4 \
       libindicator7 \
       libnspr4 \
       libnss3 \
       libpango1.0-0 \
       libssl-dev \
       libxss1 \
       python-dev \
       python-pip \
       python-pyasn1 \
       python-pyasn1-modules \
       unzip \
       wget \
       xdg-utils \
       xvfb \
       libappindicator3-1 \
       libatk-bridge2.0-0 \
       libgtk-3-0 \
       lsb-release

# Install Chrome for Selenium
RUN curl https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -o /chrome.deb
RUN dpkg -i /chrome.deb || apt-get install -yf
RUN rm /chrome.deb

# Install chromedriver for Selenium
RUN curl https://chromedriver.storage.googleapis.com/2.42/chromedriver_linux64.zip -o /usr/local/bin/chromedriver
RUN unzip -o /usr/local/bin/chromedriver -d /usr/local/bin
RUN chmod +x /usr/local/bin/chromedriver


WORKDIR /home

COPY . .

RUN pip install -e .

CMD [ "pybot","./tests/test.robot" ]

这是我不断收到的错误

WebDriverException:消息:未知错误:Chrome 无法启动: 异常退出(未知错误:DevToolsActivePort 文件没有 存在)(进程从 chrome 位置开始 /usr/bin/google-chrome 不再运行,所以 ChromeDriver 是 假设 Chrome 崩溃了。)(驱动程序信息: 铬驱动程序=2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac),平台=Linux 4.15.0-34-通用 x86_64)

我的 test.robot:

*** Settings ***
Library  Selenium2Library

*** Variables ***


*** Test Cases ***
Connect
  Open Browser   https://google.es  Chrome

我想我错过了一些东西,但是,我只是不知道该怎么做。

在我的 setup.py 上:

install_requires=[
        'robotframework',
        'robotframework-selenium2library',
        'selenium'
    ]

【问题讨论】:

  • 这张图片很难看,你能编辑你的问题并粘贴输出吗?
  • 你有它
  • 你使用什么版本的 selenium 和 Selenium2Library?
  • 我的 setup.py 上有这个,我猜它安装的是最新版本。我猜错了吗? install_requires=[ 'robotframework', 'robotframework-selenium2library', 'selenium' ]
  • 看起来您正在安装,但没有启动 xvfb。这个问题的一些答案可能会有所帮助stackoverflow.com/questions/22558077/…

标签: selenium-chromedriver dockerfile robotframework selenium2library


【解决方案1】:

我最近使用 docker 容器和运行机器人测试的 Amazon Linux 遇到了这个问题。我发现即使我在机器人框架测试中添加了所需的参数,如下例所示,chrome 甚至没有从您收到的相同消息开始就崩溃了。我通过更新容器内 options.py 中的 python 设置解决了这个问题。

我使用以下命令更新了我的 docker 容器,以在 python selenium chrome WebDriver options.py 文件中设置选项。在我的情况下,我使用的是 python 3.7 版 - 所以你要确保你使用的路径是正确的。

RUN sed -i "s/self._arguments\ =\ \[\]/self._arguments\ =\ \['--no-sandbox',\ '--disable-dev-shm-usage'\]/" /usr/local/lib/python3.7/site-packages/selenium/webdriver/chrome/options.py

示例机器人 - 这是我在机器人框架中尝试的,但没有解决问题。

${chrome_options} =     Evaluate sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
Call Method    ${chrome_options}   add_argument    headless
Call Method    ${chrome_options}   add_argument    disable-gpu
Call Method    ${chrome_options}   add_argument    no-sandbox
Call Method    ${chrome_options}   add_argument    disable-dev-sim-usage    ${options}=     Call Method     ${chrome_options}    to_capabilities
${options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys, selenium.webdriver
open browser  about:blank  ${BROWSER}  desired_capabilities=${options}

我不确定这是否能解决您的问题。您可以在更新容器之前尝试手动更新文件,看看是否有帮助。我花了很多时间来解决这个问题。如果错误更具描述性,那就太好了。 祝你好运。

【讨论】:

    【解决方案2】:

    请更改修改权限,它将起作用

    来自

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

    到

    RUN chmod 777 /usr/local/bin/chromedriver
    

    【讨论】:

    • 你能帮忙包括你的机器人脚本吗? .我也已经对其进行了测试,并且可以正常工作
    • 完成,我正在使用一个非常简单的测试来解决这个问题。
    • 所以这意味着你还有问题?
    • 是的,我仍然有同样的问题。我猜它是关于 Chrome 没有启动的。也许它需要对容器的一些权限?我对这个 tbh 很陌生
    • 肯定是权限问题。是chromedriver无权运行造成的。
    【解决方案3】:

    我遇到了同样的问题,下面的代码修复了它

    *** Settings ***
    Library           Selenium2Library
    
    *** Variables ***
    ${URL}            https://www.google.com
    ${CHROMEDRIVER_PATH}        /usr/local/bin/chromedriver
    
    *** Keywords ***
    Open Website
        ${chrome_options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys, selenium.webdriver
        Call Method    ${chrome_options}    add_argument    --no-sandbox
        Call Method    ${chrome_options}    add_argument    --headless
        Open Browser    ${URl}    chrome    options=${chrome_options}      executable_path=${CHROMEDRIVER_PATH}
    
    *** Settings ***
    Suite Setup       Open Website
    

    【讨论】:

      【解决方案4】:

      这是我用 gitlab CI 测试的 Dockerfile:

      FROM python:3.9.6-buster
      
      ADD ./requirements.txt /tmp/requirements.txt
      RUN pip install -r /tmp/requirements.txt
      RUN apt-get update && apt-get install -y xvfb wget unzip libnss3-tools
      RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
          && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
      RUN apt-get update && apt-get install -y google-chrome-stable
      RUN wget -q https://chromedriver.storage.googleapis.com/91.0.4472.101/chromedriver_linux64.zip -O /tmp/chromedriver_linux64.zip \
          && unzip -qq /tmp/chromedriver_linux64.zip -d /usr/local/bin \
          && rm /tmp/chromedriver_linux64.zip \
          && chmod +x /usr/local/bin/chromedriver
      

      您可以获取更多信息以使用 docker 运行 Robot Framework:

      https://github.com/dylanops/docker-robot-framework

      【讨论】:

        猜你喜欢
        • 2016-04-26
        • 2018-04-25
        • 1970-01-01
        • 2015-11-03
        • 2017-11-11
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        相关资源
        最近更新 更多