如何使用Github操作在PYTHON中运行Selify测试?
问题描述
在GitHub操作中运行我的Python Selify时遇到问题。
我过去一年一直在使用Circle CI,但最近开始迁移到GitHub操作。
为了让Circle CI在Chrome浏览器中运行Selify,我的config.yml中有以下几行:
docker:
# includes chrome browser for selenium testing
- image: circleci/python:3.7.4-browsers
而且似乎不需要安装chromeDriver。
我在githorbs操作.yml文件中使用了以下内容:
jobs:
build:
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome
steps:
- uses: actions/checkout@v1
- name: Set up Python 3.7
uses: actions/setup-python@v1
with:
python-version: 3.7
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pipenv
pipenv install
- name: Prepare Selenium
# https://github.com/marketplace/actions/setup-chromedriver
uses: nanasess/setup-chromedriver@master
- name: Launch browser
run: |
google-chrome --version
export DISPLAY=:99
chromedriver --url-base=/wd/hub &
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional, disables headless mode
- name: Run tests
run: pipenv run python manage.py test functional_tests.tests.test_selenium.test_exams -v 2
但是当我尝试在我的python代码中运行时,我得到了以下错误:
from selenium import webdriver
driver = webdriver.Chrome()
File "/home/runner/.local/share/virtualenvs/lang-EMCZ4oUT/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
File "/home/runner/.local/share/virtualenvs/lang-EMCZ4oUT/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/home/runner/.local/share/virtualenvs/lang-EMCZ4oUT/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/runner/.local/share/virtualenvs/lang-EMCZ4oUT/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/runner/.local/share/virtualenvs/lang-EMCZ4oUT/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
根据我在网上读到的内容,我应该只需要uses: nanasess/setup-chromedriver@master
,而不需要image: selenium/standalone-chrome
,但是无论切换到还是切换出都没有任何区别,python测试仍然找不到Chrome浏览器。
我是否应该设置要侦听的端口?
解决方案
我将首先回答您的问题,然后我将提供另一种方法。我将使用unified diff format突出显示我将对您的工作流所做的更改。如果您不熟悉该格式,请忽略前三行,然后假设我从您的工作流中删除了以"-
"开头的行,并添加了以"+
"开头的行。以"
"开头的行将保留原样。
nanasess/setup-chromedriver
下载了Chrome浏览器和chromeDriver(即v1.0.1)。在撰写本文时,它仍然执行相同的操作(v1.0.5)。因此,您不需要额外的服务容器来运行Chrome浏览器和chromeDriver-它们已经在您的主容器中。
--- original.yml 2020-06-13 20:42:25 +0000
+++ step1.yml 2021-04-23 00:01:00 +0000
@@ -1,9 +1,6 @@
jobs:
build:
runs-on: ubuntu-latest
- services:
- selenium:
- image: selenium/standalone-chrome
steps:
- uses: actions/checkout@v1
- name: Set up Python 3.7
您也不需要执行"启动浏览器"步骤。硒文库将为您做这件事。默认情况下,它执行本地chromeDrive二进制文件,而本地chromeDrive二进制文件又默认执行Chrome浏览器二进制文件。如果您不想使用Headless模式,您仍然必须启动虚拟帧缓冲区(不需要其他操作):
--- step1.yml 2021-04-23 00:01:00 +0000
+++ step2.yml 2021-04-23 00:02:00 +0000
@@ -15,11 +15,10 @@
- name: Prepare Selenium
# https://github.com/marketplace/actions/setup-chromedriver
uses: nanasess/setup-chromedriver@master
- - name: Launch browser
+ - name: Start XVFB
run: |
- google-chrome --version
- export DISPLAY=:99
- chromedriver --url-base=/wd/hub &
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional, disables headless mode
- name: Run tests
run: pipenv run python manage.py test functional_tests.tests.test_selenium.test_exams -v 2
+ env:
+ DISPLAY: :99
这应该会起作用。请注意,添加的env
端口与启动XVFB时传递的DISPLAY
端口相同。
我的猜测是,您在此处分享的错误是由于您已经启动的chromeDriver和Google Chrome之间的冲突,以及您的测试套件试图启动和控制的那些。
我的替代方法是什么?就我个人而言,在引入第三方依赖项时有点谨慎。尤其是对于应该只有几行代码的东西。在寻找灵感时,我会尽量接近源头。那么,Selify是如何测试他们的代码的呢?
有趣的是,Selify项目使用GitHub操作来测试库本身,并且它们有相当广泛的集成测试套件,这需要运行浏览器。它们不使用第三方操作来设置浏览器环境。他们的测试相当复杂,但您可以接受提示,采取个别行动和步骤,并根据需要应用它们。
重要部分是action to setup Chrome and chromedriver。与Kentaro Ohkouchi(又名:Kentaro Ohkouchi)的动作相比,简单明了,几乎相同。Nanasess),您正在使用它。
下一个重要部分是启动虚拟帧缓冲区。同样,如果您使用的是无头模式,则不需要它。与你或大口内的例子相比,他们非常简单地开始了:--- step2.yml 2021-04-23 00:02:00 +0000
+++ step3.yml 2021-04-23 00:03:00 +0000
@@ -18,3 +18,3 @@
- name: Start XVFB
run: |
- sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional, disables headless mode
+ Xvfb :99 &
否sudo
,没有额外参数,仅DISPLAY
端口。
--- step3.yml 2021-04-23 00:03:00 +0000
+++ step4.yml 2021-04-23 00:04:00 +0000
@@ -15,3 +15,3 @@
- name: Prepare Selenium
# https://github.com/marketplace/actions/setup-chromedriver
- uses: nanasess/setup-chromedriver@master
+ uses: nanasess/setup-chromedriver@v1.0.5
相关文章