【问题标题】:Using selenium inside gitlab CI/CD在 gitlab CI/CD 中使用 selenium
【发布时间】:2020-12-05 14:01:26
【问题描述】:

我已经绝望地尝试为我由 gitlab 托管的个人项目设置 pytest 管道 CI/CD。

我尝试建立一个包含两个基本文件的简单项目:

文件test_core.py,为了简单起见,没有任何其他依赖项:

# coding: utf-8
# !/usr/bin/python3

import pytest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options

def test_basic_headless_selenium_example():
    """Test selenium installation by opening python website.
    (inspired by https://selenium-python.readthedocs.io/getting-started.html)
    """
    opts = Options()
    opts.headless = True
    driver = webdriver.Firefox(options=opts)
    driver.get("http://www.python.org")
    driver.close()

文件 .gitlab-ci.yml,用于 CI/CD 自动测试:

stages:
  - tests

pytest:python3.7:
  image: python:3.7
  stage: tests
  services:
    - selenium/standalone-firefox:latest
  script:
 #   - apt-get update && apt-get upgrade --assume-yes
    - wget -O ~/FirefoxSetup.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64"
    - tar xjf ~/FirefoxSetup.tar.bz2 -C /opt/
    - ln -s /opt/firefox/firefox /usr/lib/firefox
    - export PATH=$PATH:/opt/firefox/
    - wget -O ~/geckodriver.tar.gz "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-linux64.tar.gz"
    - tar -zxvf ~/geckodriver.tar.gz -C /opt/
    - export PATH=$PATH:/opt/
    - pip install selenium pytest
    - pytest

在我的笔记本电脑上,pytestcommand 可以 100% 正常工作。 当我将提交推送到 gitlab 时,我会遇到错误:

>       raise exception_class(message, screen, stacktrace)
E       selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 255
/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
=========================== short test summary info ============================
FAILED test_selenium.py::test_basic_headless_selenium_example - selenium.comm...
============================== 1 failed in 1.29s ===============================
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 1

我创建了一个简单的项目:https://gitlab.com/OlivierLuG/selenium_firefox,它重现了这个例子。失败的管道可以直接在这里找到: https://gitlab.com/OlivierLuG/selenium_firefox/-/pipelines/225711127

有人知道如何解决这个错误吗?

【问题讨论】:

  • 要么安装Xvfb并使用xvfb-run pytest,要么配置firefoxdriver以无头模式运行。
  • 谢谢,pytest 已经处于无头模式。我已经设法让这个项目开始工作。我会发布一个答案。

标签: python selenium gitlab pytest gitlab-ci


【解决方案1】:

我终于设法用下面的.gitlab-ci.yml 文件在绿色上 ping gitlab CI。

请注意,我不喜欢 yaml 语言。为了使文件更短,我使用了一个名为install_firefox_geckodriver 的共享代码块。然后,我使用 python 3.7 和 3.8 配置了 2 个作业,它们调用了这个块。 使这种测试起作用的关键是: _ 以无头模式运行(这对我来说已经是这种情况了) _ 使用命令行安装 firefox 和 geckodriver _ 安装火狐依赖 _ 使用 gitlab selenium 服务

这是我的 yaml 文件。成功的管道可以在这里找到:https://gitlab.com/OlivierLuG/selenium_firefox/-/pipelines/225756742

stages:
  - tests

.install_firefox_geckodriver: &install_firefox_geckodriver
  - apt-get update && apt-get upgrade --assume-yes
  - apt-get install 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 --assume-yes
  - wget -nv -O ~/FirefoxSetup.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64"
  - tar xjf ~/FirefoxSetup.tar.bz2 -C /opt/
  - ln -s /opt/firefox/firefox /usr/lib/firefox
  - export PATH=$PATH:/opt/firefox/
  - wget -nv -O ~/geckodriver.tar.gz "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-linux64.tar.gz"
  - tar -zxvf ~/geckodriver.tar.gz -C /opt/
  - export PATH=$PATH:/opt/


pytest:python3.7:
  image: python:3.7
  stage: tests
  services:
    - selenium/standalone-firefox:latest
  script:
    - *install_firefox_geckodriver
    - pip install selenium pytest
    - pytest

pytest:python3.8:
  image: python:3.8
  stage: tests
  services:
    - selenium/standalone-firefox:latest
  script:
    - *install_firefox_geckodriver
    - pip install selenium pytest
    - pytest

【讨论】:

    【解决方案2】:

    如果你使用的是基于 Ubuntu 的镜像,安装过程可以简化如下,允许获取最新的geckodriver 版本:

    before_script:
      # Configura the timezone, needed for some libraries.
      # Solution from https://dev.to/setevoy/docker-configure-tzdata-and-timezone-during-build-20bk
      - TZ=America/Sao_Paulo # Numeric inputs: 2 - 134.
      - ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
      - echo $TZ > /etc/timezone
      # Add the needed libraries.
      - apt update && apt -y upgrade
    
    
    .install_firefox_geckodriver: &install_firefox_geckodriver
      - apt -y install firefox  curl wget # It needs timezone configuration made in "before_script"
      #- wget -nv -O ~/FirefoxSetup.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64"
      - wget $(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest | grep 'browser_' | cut -d\" -f4 | grep linux64.tar.gz$)
      - tar -xf gecko*
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 2020-02-02
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多