gpt4 book ai didi

ruby-on-rails - 在 Alpine Linux 上使用 headless Chrome/Chromium 的 Rspec

转载 作者:行者123 更新时间:2023-12-03 14:44:44 30 4
gpt4 key购买 nike

在 Alpine 3.10.1 上,我尝试使用 headless_chrome 运行 RSpec .

 config.before(:each, type: :system, js: true) do
driven_by :selenium, using: :headless_chrome
end

我已安装 capybarawebdrivers .

由于我还没有找到安装 Chrome 的方法在阿尔卑斯山上,我尝试过 Chromium (76.0.3809.87-r0)。但是,当我运行规范时,它找不到驱动程序。

ChildProcess::LaunchError: No such file or directory - /root/.webdrivers/chromedriver



我也试过安装 chromium-chromedriver直接通过apk,但结果是一样的。

有没有办法安装 Chrome在 Alpine 或使用 ChromiumCapybara ?

最佳答案

要使其正常工作,需要做三件事:

  • 使用 selenium-webdriver 代替 webdrivers
  • 在您的 Docker 镜像上安装chromium、chromium-chromedriver 和 selenium
  • 配置 Capybara 驱动

  • 详情如下。
    使用 selenium-webdriver 而不是 webdrivers
    如果您碰巧在 Gemfile 中使用了 webdrivers gem。 ,将其替换为 selenium-webdriver .
    在你的 Docker 镜像上安装chromium、chromium-chromedriver 和 selenium
    更改您的 Dockerfile以便安装以下软件包:
    chromium chromium-chromedriver python3 python3-dev py3-pip
    然后,在那之后,包括行 RUN pip3 install -U selenium .
    以下是完整样本 Dockerfile .
    FROM ruby:2.7.2-alpine AS builder

    RUN apk add --no-cache \
    build-base libffi-dev \
    nodejs yarn tzdata \
    postgresql-dev postgresql-client zlib-dev libxml2-dev libxslt-dev readline-dev bash \
    #
    # For testing
    chromium chromium-chromedriver python3 python3-dev py3-pip \
    #
    # Nice-to-haves
    git vim \
    #
    # Fixes watch file issues with things like HMR
    libnotify-dev

    RUN pip3 install -U selenium

    FROM builder AS development

    # Add the current apps files into docker image
    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app

    # Install any extra dependencies via Aptfile - These are installed on Heroku
    # COPY Aptfile /usr/src/app/Aptfile
    # RUN apk add --update $(cat /usr/src/app/Aptfile | xargs)

    ENV PATH /usr/src/app/bin:$PATH

    # Install latest bundler
    RUN bundle config --global silence_root_warning 1

    EXPOSE 3000
    CMD ["rails", "server", "-b", "0.0.0.0", "-p", "3000"]

    FROM development AS production

    COPY Gemfile /usr/src/app
    COPY .ruby-version /usr/src/app
    COPY Gemfile.lock /usr/src/app

    COPY package.json /usr/src/app
    COPY yarn.lock /usr/src/app

    # Install Ruby Gems
    RUN bundle config set deployment 'true'
    RUN bundle config set without 'development:test'
    RUN bundle check || bundle install --jobs=$(nproc)

    # Install Yarn Libraries
    RUN yarn install --check-files

    # Copy the rest of the app
    COPY . /usr/src/app

    # Precompile the assets
    RUN RAILS_SERVE_STATIC_FILES=enabled SECRET_KEY_BASE=secret-key-base RAILS_ENV=production RACK_ENV=production NODE_ENV=production bundle exec rake assets:precompile

    # Precompile Bootsnap
    run RAILS_SERVE_STATIC_FILES=enabled SECRET_KEY_BASE=secret-key-base RAILS_ENV=production RACK_ENV=production NODE_ENV=production bundle exec bootsnap precompile --gemfile app/ lib/
    配置 Capybara 驱动程序
    将以下内容放入 spec/support/chrome.rb .
    # spec/support/chrome.rb

    driver = :selenium_chrome_headless

    Capybara.server = :puma, {Silent: true}

    Capybara.register_driver driver do |app|
    options = ::Selenium::WebDriver::Chrome::Options.new

    options.add_argument("--headless")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--window-size=1400,1400")

    Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
    end

    Capybara.javascript_driver = driver

    RSpec.configure do |config|
    config.before(:each, type: :system) do
    driven_by driver
    end
    end
    我在 blog post I wrote on this topic 中写了更多细节.

    关于ruby-on-rails - 在 Alpine Linux 上使用 headless Chrome/Chromium 的 Rspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531771/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com