我试图使用Selenium docker运行我的测试, 我有一个在9000端口运行的本地grunt服务器,我'推出了以下selenium docker:
docker run -d -p 4444:4444 -p 5900:5900 selenium/standalone-chrome-debug
然后我启动了我的测试(使用Capybara)并打开VNC观看测试,但我得到的只是镀铬乱七八糟"这个网站无法到达"。
cabybara.rb:
isWindows = (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
require 'capybara/rspec'
require 'capybara'
require 'capybara/dsl'
require_relative 'sinatra_proxy'
require 'selenium/webdriver'
require 'selenium/webdriver/remote/http/curb' if !isWindows
Capybara.register_driver :selenium_chrome do |app|
http_client = isWindows ? nil : Selenium::WebDriver::Remote::Http::Curb.new
options = {
http_client: http_client,
browser: :chrome,
# service_log_path: 'chromedriver.out', # Enable Selenium logs
switches: ["--disable-web-security", '--user-agent="Chrome under Selenium for Capybara"']
}
options[:url] = "http://172.17.0.2:4444/wd/hub"
Capybara::Selenium::Driver.new app, options
end
Capybara.default_driver = :selenium_chrome
Capybara.app = SinatraProxy.new
Capybara.app_host = "http://127.0.0.1:9000"
Capybara.server_host = '0.0.0.0'
ip addr show docker0
ip addr show docker0
6: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:22:ec:65:9e:f1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe40::42:ecdd:fe73:9ef4/64 scope link
valid_lft forever preferred_lft forever
需要是docker host的IP,使用:
ip route show | grep docker0 | awk '{print $9}'
表示Capybara.app_host
(DOCKER_HOST_IP:PORT)和Capybara.server_host
(DOCKER_HOST_IP)
答案 0 :(得分:3)
使用:
Capybara.app_host = "http://yourhostip:9000"
不是localhost。对于docker容器,localhost本身就是。
另外,我建议不要通过内部ip调用docker,只需使用:
options[:url] = "http://localhost:4444/wd/hub"
但首先解决前一个问题
问候