Docker языковые предпочтения Capybara Selenium - PullRequest
0 голосов
/ 09 июля 2020

Я сейчас пытаюсь настроить наше приложение Rails с Docker для использования в нашем конвейере тестирования CI. При этом я столкнулся с проблемой с языковыми настройками наших chrome драйверов.

В нашей конфигурации capybara мы настроили наш драйвер на использование en по умолчанию, это работает нормально локально и в настоящее время CircleCI, где мы просто используем их ruby с браузерами docker изображение . Однако, когда мы запускаем наш собственный образ docker, это не похоже на то, что заголовок HTTP_ACCEPT_LANGUAGE установлен неправильно. С той же конфигурацией capybara в docker это устанавливается на en-US, а не только на en, как мы ищем и как мы видим в CircleCI.

Наша конфигурация capybara выглядит как

Capybara.register_driver :headless_chrome do |app|
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(loggingPrefs: { browser: "ALL" })
  opts = Selenium::WebDriver::Chrome::Options.new

  chrome_args = %w[--headless --window-size=1920,1080 --no-sandbox --disable-gpu --lang=en --disable-dev-shm-usage]
  chrome_args.each { |arg| opts.add_argument(arg) }
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: opts, desired_capabilities: caps)
end

Capybara.configure do |config|
  config.always_include_port = true
  config.javascript_driver = :headless_chrome

  config.default_max_wait_time =  5
end

и наш Dockerfile обрабатывает Chrome и Chrome драйверы, такие как

FROM ruby:2.5.1

EXPOSE 5000

# Node/Yarn stuff
ENV NODE_VERSION 10.15.3
ENV YARN_VERSION 1.16.0

RUN apt-get update

# Node, needed for asset pipeline
RUN curl -sSL "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" | tar --strip-components=2 -xJ -C /usr/local/bin/ node-v$NODE_VERSION-linux-x64/bin/node
RUN curl https://www.npmjs.com/install.sh | bash

# ============ CHROME =================
# Install Chrome for Selenium

# Add Chrome WebDriver
RUN apt-get install -y unzip && \
    CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    mkdir -p /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip -qq /tmp/chromedriver_linux64.zip -d /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    rm /tmp/chromedriver_linux64.zip && \
    chmod +x /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver && \
    ln -fs /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver /usr/local/bin/chromedriver

# Add Google Chrome
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
    apt-get -yqq update && \
    apt-get -yqq install google-chrome-stable && \
    rm -rf /var/lib/apt/lists/*

... rest of Dockerfile

. До сих пор мы пробовали различные методы установки языковых параметров, как описано в Selenium Webdriver - установите предпочтительный язык браузера DE , но всегда увидите ACCEPT_LANGUAGE_HEADER как en-US.

Любые указатели на это будут очень благодарны.

...