도커 컨테이너에서 카피 바라를 사용한 테스트가 있습니다. 나는 이것을 사용하여 셀레늄을 설정합니다.
Capybara.register_driver :selenium do |app|
require 'selenium/webdriver'
Selenium::WebDriver::Firefox::Binary.path = ENV['FIREFOX_BINARY_PATH'] || Selenium::WebDriver::Firefox::Binary.path
Capybara::Selenium::Driver.new(app, :browser => :firefox)
end
xvfb로 테스트를 실행할 때 작동하지만 테스트가 실행될 때 실제 브라우저를보고 싶어서 호스트에서 브라우저를 사용하는 방법을 찾고 있습니다.
호스트에서 geckodriver를 시작하고 포트 4444를 공유 할 수 있다고 생각하지만 아직 성공하지 못했습니다. Capybara는 매번 컨테이너에서 geckodriver의 새 인스턴스를 시작합니다.
어떡해?
나는 카피 바라에 대한 모든 구성을 가지고 있습니다.
#<Capybara::SessionConfig:0x0055ce67731a00
@always_include_port=false,
@app_host="http://domain-test.engagement.lvh.me:1300",
@automatic_label_click=false,
@automatic_reload=true,
@default_host="http://www.example.com",
@default_max_wait_time=5,
@default_selector=:css,
@enable_aria_label=false,
@exact=false,
@exact_text=false,
@ignore_hidden_elements=true,
@match=:smart,
@raise_server_errors=true,
@run_server=true,
@save_path=#<Pathname:/app/tmp/capybara>,
@server_errors=[StandardError],
@server_host=nil,
@server_port=1300,
@visible_text_only=false,
@wait_on_first_by_default=false>
다음은 내 도커 작성 파일입니다.
version: '3'
services:
web:
build: .
command: rails s -b 0.0.0.0
working_dir: /app
volumes:
- .:/app
- ./tmp/bundle:/usr/local/bundle
- $SSH_AUTH_SOCK:/ssh-agent
environment:
- BUNDLE_JOBS=4
- SSH_AUTH_SOCK=/ssh-agent
- MONGO_HOST=mongo
- REDIS_HOST=redis
- MEMCACHE_HOST=memcache
ports:
- "80:3000"
- "1300:1300"
links:
- mongo
- redis
- memcache
mongo:
image: mongo:3.4.9
volumes:
- ~/data/mongo/db:/data/db
redis:
image: redis:2.8.17
volumes:
- ~/data/redis:/data
memcache:
image: memcached:1.5-alpine
그리고 마지막으로 내 Dockerfile :
FROM ruby:2.3.1
RUN apt-get update && apt-get install -y build-essential qt5-default \
libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools gstreamer1.0-x \
xvfb rsync
ARG GECKODRIVER_VERSION=0.19.0
RUN wget --no-verbose -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER_VERSION/geckodriver-v$GECKODRIVER_VERSION-linux64.tar.gz \
&& rm -rf /opt/geckodriver \
&& tar -C /opt -zxf /tmp/geckodriver.tar.gz \
&& rm /tmp/geckodriver.tar.gz \
&& mv /opt/geckodriver /opt/geckodriver-$GECKODRIVER_VERSION \
&& chmod 755 /opt/geckodriver-$GECKODRIVER_VERSION \
&& ln -fs /opt/geckodriver-$GECKODRIVER_VERSION /usr/bin/geckodriver
RUN apt-get install -y libgtk-3-dev \
&& wget --no-verbose https://ftp.mozilla.org/pub/firefox/releases/56.0/linux-x86_64/en-US/firefox-56.0.tar.bz2 \
&& tar -xjf firefox-56.0.tar.bz2 \
&& mv firefox /opt/firefox56 \
&& ln -s /opt/firefox56/firefox /usr/bin/firefox
ENV TZ Europe/Paris
RUN echo $TZ > /etc/timezone && \
apt-get update && apt-get install -y tzdata && \
dpkg-reconfigure -f noninteractive tzdata && \
apt-get clean
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 && \
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | tee /etc/apt/sources.list.d/mongodb-org-3.4.list && \
apt-get update && \
apt-get install -y mongodb-org
RUN gem install bundler
RUN mkdir /app
WORKDIR /app
Selenium이 원격 geckodriver 인스턴스를 사용하도록하려면 이에 대한 url
옵션을 제공해야 합니다.
Capybara.register_driver :selenium do |app|
require 'selenium/webdriver'
Capybara::Selenium::Driver.new(app, :browser => :firefox, url: 'http://<your ip as reachable from docker>:<port geckodriver is available on>')
end
그러면 파이어 폭스가 실행될 시스템에서 geckodriver를 실행 --binary
해야합니다. 파이어 폭스의 위치를 지정 하는 옵션을 사용할 수 있습니다. 또한 브라우저 요청이 Docker 인스턴스에서 실행중인 테스트중인 앱으로 다시 라우팅되도록 설정 Capybara.app_host
(그리고 가능하면 Capybara.always_include_port
정확한 구성에 따라 다름)이 필요할 수도 있습니다 .
고려해야 할 또 다른 사항은 AUT가 호스트에서 도달 할 수있는 도커 인스턴스의 인터페이스에 바인딩되어야한다는 것입니다. 기본적으로 Capybara는 연결할 수없는 127.0.0.1 인터페이스 Capybara.server = '0.0.0.0'
에 바인딩하므로 사용 가능한 모든 인터페이스에 바인딩하도록 설정 하거나 특정 외부 인터페이스를 지정할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다