在docker和水豚的主机运行selenium

我在docker集装箱里用水豚进行了testing。 我用这个来设置selenium:

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 

它运行时,我们运行与xvfbtesting,但我希望看到真正的浏览器,当testing正在运行,所以我正在寻找一种方法来使用浏览器的主机。

我认为可以在主机上启动geckodriver并共享端口4444,但是我还没有成功。 水豚每次都会在集装箱上发射一个新的虎钳。

我能做什么?

编辑1:添加更多信息

我所有的configuration我有水豚:

 #<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> 

这是我的docker-compose文件:

 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选项来指定firefox的位置。 它也可能需要设置Capybara.app_host (也可能是Capybara.always_include_port取决于您的确切configuration),以便浏览器请求被路由回在Docker实例上运行的testing应用程序。

另一件要考虑的事情是,AUT将需要绑定到docker实例上的一个接口,这个接口可以从主机访问。 默认情况下,Capybara绑定到可能无法访问的127.0.0.1接口,因此您可以将Capybara.server = '0.0.0.0'为绑定到所有可用的接口,或者指定特定的外部接口。