gpt4 book ai didi

selenium - 使用 docker 和 Capybara 在主机中运行 selenium

转载 作者:行者123 更新时间:2023-12-02 19:34:49 25 4
gpt4 key购买 nike

我在 docker 容器中对 capybara 进行了测试。我用它来设置 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

当我们使用 xvfb 运行测试时它可以工作,但我想在测试运行时看到真正的浏览器,所以我正在寻找一种在主机中使用浏览器的方法。

我认为可以在主机上启动 geckodriver 并共享端口 4444 但我还没有成功。 Capybara 每次都会在容器上启动一个新的 geckodriver 实例。

我能做些什么?

编辑 1:添加更多信息

我对 capybara 的所有配置:
#<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

然后,这将要求您在要运行 Firefox 的机器上运行 geckodriver,可能使用 --binary用于指定 firefox 所在位置的选项。它也可能需要设置 Capybara.app_host (可能 Capybara.always_include_port 取决于您的确切配置)因此浏览器请求被路由回在 docker 实例上运行的被测应用程序。

要考虑的另一件事是,AUT 需要绑定(bind)到 docker 实例上的接口(interface),该接口(interface)可从主机访问。 Capybara 默认绑定(bind)到可能无法访问的 127.0.0.1 接口(interface),因此您可以设置 Capybara.server = '0.0.0.0'绑定(bind)到所有可用的接口(interface),或指定特定的外部接口(interface)。

关于selenium - 使用 docker 和 Capybara 在主机中运行 selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46811102/

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