我将首先回答你的问题,然后我将提供另一种方法。我将使用一个统一差异格式 http://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html#Detailed-Unified突出显示我将对您的工作流程进行的更改。如果您不熟悉格式,请忽略前三行,然后想象我要删除以“开头的行-
” 从您的工作流程中添加以“开头的行+
”。以“开头的行
” 保持原样。
当您发布问题时,操作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
您也不需要“启动浏览器”步骤。 Selenium 库会为你做这件事。它默认执行本地 chromedriver 二进制文件,而后者又默认执行 Chrome 浏览器二进制文件。如果您不想使用无头模式,您仍然需要启动虚拟帧缓冲区(但仅此而已):
--- 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
与相同的DISPLAY
启动 XVFB 时传递的端口。
我的猜测是,您在此处共享的错误是由于您已启动的 chromedriver 和 Google Chrome 与您的测试套件尝试启动和控制的 Chromedriver 和 Google Chrome 之间的冲突而发生的。
我的替代方法是什么?我个人在引入第三方依赖项时有点谨慎。特别是对于那些应该只有几行代码的事情。在寻找灵感时,我会尝试尽可能接近源头。那么,Selenium 如何测试他们的代码呢?
有趣的是,Selenium 项目正在使用 GitHub Actions 来测试库本身,并且它们有相当广泛的集成测试套件,需要运行浏览器。他们不使用第三方操作来设置浏览器环境。他们的测试非常复杂,但您可以接受提示,采取个人行动和步骤,并根据您的需要应用它们。
重要的部分是设置 Chrome 和 chromedriver 的操作 https://github.com/SeleniumHQ/selenium/blob/selenium-4.0.0-beta-3/.github/actions/setup-chrome/action.yml。与您正在使用的 Kentaro Ohkouchi(又名 nanasess)的动作相比,直接且几乎相同。
下一个重要部分是启动虚拟帧缓冲区。同样,如果您使用无头模式,则不需要它。与你或 Ohkouchi 的例子相比,他们的开始非常简单:
--- 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 &
No sudo
,没有额外的参数,只是DISPLAY
port.
P.S.:使用第三方操作时,请使用标签。你永远不知道什么样的改变会被挤进别人的代码中。宁愿让测试在 CI 期间失败,调查发生了什么变化,然后升级版本,而不是盲目地相信有人总是会为你做出正确的改变......
--- 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/[email protected] /cdn-cgi/l/email-protection