运行 黄瓜和水豚在 docker 容器中
Running cucumber and capybara in a docker container
我有一个使用
的 e2e 测试的 repo
- Cucumber (ruby) 用于编写规范和步骤定义
- 水豚作为浏览和执行用户交互的驱动程序
- Chrome 驱动程序
我想要一个 docker 容器:
- 从
<integration-test-repo-url>
中提取 repo
- 安装所有必要的先决条件(
ruby
、bundler
、chromedriver
、cucumber
)
- 进入
integration-test-repo
并运行 ./runtests.sh
(使用 bundle install
安装必备 gem,然后运行 bundle exec cucumber
)
这是我目前所拥有的(使用 this docker 图片):
FROM 2glab/ruby-chrome-driver
RUN \
apt-get update && \
apt-get install -qy bundler && \
apt-get install -qy cucumber
RUN useradd -d /home/<user> -ms /bin/bash -g root -G sudo -p <user> <password>
USER <user>
WORKDIR /home/<user>
RUN cd && git clone <my_repo_url>
WORKDIR <my_repo_folder>
RUN bundle install && bundle exec cucumber
不幸的是,这会导致错误:
unknown error: Chrome failed to start: crashed
(Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Linux 4.9.87-linuxkit-aufs x86_64) (Selenium::WebDriver::Error::UnknownError
我该如何解决这个问题? chrome 是不是遗漏了什么? Chromedriver 是否遗漏了什么?据我所知,chrome 和 chrome 驱动程序的依赖项应该在 docker 映像中解决(参见 here)。
解决方案是配置自定义 chrome 驱动程序,而不是使用 chrome 驱动程序+水豚附带的 selenium_chrome_headless
:
require 'selenium-webdriver'
Capybara.register_driver :custom_chrome_headless do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.args << '--headless'
browser_options.args << '--no-sandbox'
browser_options.args << '--disable-gpu'
browser_options.args << '--window-size=1920,1080'
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
options: browser_options
)
end
Capybara.configure do |config|
config.default_driver = :custom_chrome_headless
# Other irrelevant config stuff...
end
出于某种原因,这有效,但 selenium_chrome_headless
无效。
我遇到了同样的问题并通过添加 >options.add_argument('--disable-dev-shm-usage')>
解决了它。尝试将标志添加到选项。
我有一个使用
的 e2e 测试的 repo- Cucumber (ruby) 用于编写规范和步骤定义
- 水豚作为浏览和执行用户交互的驱动程序
- Chrome 驱动程序
我想要一个 docker 容器:
- 从
<integration-test-repo-url>
中提取 repo
- 安装所有必要的先决条件(
ruby
、bundler
、chromedriver
、cucumber
) - 进入
integration-test-repo
并运行./runtests.sh
(使用bundle install
安装必备 gem,然后运行 bundle exec cucumber
)
这是我目前所拥有的(使用 this docker 图片):
FROM 2glab/ruby-chrome-driver
RUN \
apt-get update && \
apt-get install -qy bundler && \
apt-get install -qy cucumber
RUN useradd -d /home/<user> -ms /bin/bash -g root -G sudo -p <user> <password>
USER <user>
WORKDIR /home/<user>
RUN cd && git clone <my_repo_url>
WORKDIR <my_repo_folder>
RUN bundle install && bundle exec cucumber
不幸的是,这会导致错误:
unknown error: Chrome failed to start: crashed
(Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Linux 4.9.87-linuxkit-aufs x86_64) (Selenium::WebDriver::Error::UnknownError
我该如何解决这个问题? chrome 是不是遗漏了什么? Chromedriver 是否遗漏了什么?据我所知,chrome 和 chrome 驱动程序的依赖项应该在 docker 映像中解决(参见 here)。
解决方案是配置自定义 chrome 驱动程序,而不是使用 chrome 驱动程序+水豚附带的 selenium_chrome_headless
:
require 'selenium-webdriver'
Capybara.register_driver :custom_chrome_headless do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.args << '--headless'
browser_options.args << '--no-sandbox'
browser_options.args << '--disable-gpu'
browser_options.args << '--window-size=1920,1080'
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
options: browser_options
)
end
Capybara.configure do |config|
config.default_driver = :custom_chrome_headless
# Other irrelevant config stuff...
end
出于某种原因,这有效,但 selenium_chrome_headless
无效。
我遇到了同样的问题并通过添加 >options.add_argument('--disable-dev-shm-usage')>
解决了它。尝试将标志添加到选项。