在gitlab CI/CD中使用硒



我曾尝试为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

在我的笔记本电脑上,pytest命令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

有人知道如何修复这个错误吗?

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

请注意,我不喜欢yaml语言。为了缩短文件,我使用了一个名为install_firefox_geckodriver的共享代码块。然后,我用python 3.7和3.8配置了两个作业,它们调用这个块。使这种测试发挥作用的关键是:_在无头模式下运行(对我来说已经是这样了(_使用命令行安装firefox和geckodriver_安装firefox依赖项_使用gitlab硒服务

这是我的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

如果您使用的是基于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*

最新更新