0

I am trying to run capybara test for minitest through docker-compose and I can no longer connect to my selenium chrome browser. It complains that the connection is failing. The service itself, begins to spin up when the tests are run. How can I properly connect my rails application to the chrome service setup? Mind you, we do use subdomains -- so there will always be a test running with it set.

Error:
HelloWorldCapybaraTest#test_testing_navigation:
Selenium::WebDriver::Error::UnknownError: unknown error: net::ERR_CONNECTION_REFUSED
  (Session info: chrome=108.0.5359.98)
    test/features/hello_world_capybara_test.rb:12:in `block in <class:HelloWorldCapybaraTest>'

docker-compose.yml

  web:
    init: true
    build: ~/projects/web/
    container_name: testme
    restart: unless-stopped
    ports:
      - "3000:3000"
      - "5000:5000"
    volumes:
      - ~/projects/web:/web
      - /web/node_modules
    depends_on:
      - mongo
    links:
      - elasticsearch
      - selenium_chrome
    command: sh -c "./docker_scripts/run-rails.sh"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - PGHOST=postgres
      - MONGODB_USER=admin
      - MONGODB_PASSWORD=root
      - MONGODB_URL=mongo:27017
      - RAILS_ENV=development
    tty: true
    stdin_open: true
  selenium_chrome:
    image: selenium/standalone-chrome
    privileged: true
    ports:
      - "5900:5900"
      - "4444:4444"
      - "7900:7900"

test_helper.rb

WebMock.allow_net_connect!
require 'capybara/rails'
require 'capybara/minitest'
require 'capybara/dsl'
require 'webdrivers'

class ActionDispatch::IntegrationTest
  include Capybara::DSL
  include Capybara::Minitest::Assertions
  config.include Rails.application.routes.url_helpers
  Capybara.default_max_wait_time = 10
  Capybara.run_server = false
  Capybara.default_driver = :selenium_chrome_in_container
  Capybara.always_include_port = true
  Capybara.server_host = "0.0.0.0"
  Capybara.server_port = 5000
  Capybara.javascript_driver = :selenium

  Capybara.register_driver :headless_selenium_chrome_in_container do |app|
    capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
      chromeOptions: { args: %w(headless disable-gpu disable-dev-shm-usage window-size=1440x768) }
    )

    Capybara::Selenium::Driver.new(app,
                                   :browser => :remote,
                                   url: "http://selenium_chrome:4444/wd/hub",
                                   capabilities: capabilities
    )
  end

  Capybara.register_driver :selenium_chrome_in_container do |app|
    Capybara::Selenium::Driver.new(app,
                                   :browser => :remote,
                                   url: "http://selenium_chrome:4444/wd/hub",
                                   capabilities: :chrome
    )
  end

  # Reset sessions and driver between tests
  teardown do
    Capybara.reset_sessions!
  end
end

hello_world_capybara_test.rb

require 'test_helper'
class HelloWorldCapybaraTest < ActionDispatch::IntegrationTest
  setup do
    @company = create(:company)
    @mailing = create(:user)
    Capybara.server_host = '0.0.0.0'
    Capybara.server_port = 5000
    Capybara.app_host = "http://#{@company.subdomain}.lvh.me:5000"
  end

  test 'testing navigation' do
    visit new_user_session_url
  end
end

Logs

web-selenium_chrome-1  | 19:43:35.809 INFO [LocalDistributor.newSession] - Session request received by the Distributor: 
web-selenium_chrome-1  |  [Capabilities {browserName: chrome}]
web-selenium_chrome-1  | Starting ChromeDriver 108.0.5359.71 (1e0e3868ee06e91ad636a874420e3ca3ae3756ac-refs/branch-heads/5359@{#1016}) on port 24771
web-selenium_chrome-1  | Only local connections are allowed.
web-selenium_chrome-1  | Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
web-selenium_chrome-1  | ChromeDriver was started successfully.
web-selenium_chrome-1  | [1671392615.878][SEVERE]: bind() failed: Cannot assign requested address (99)
web-selenium_chrome-1  | 19:43:37.496 INFO [LocalNode.newSession] - Session created by the Node. Id: 5fb54cb47e07699de29b43b00ecef29a, Caps: Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 108.0.5359.98, chrome: {chromedriverVersion: 108.0.5359.71 (1e0e3868ee06..., userDataDir: /tmp/.com.google.Chrome.PEanHy}, goog:chromeOptions: {debuggerAddress: localhost:39557}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: LINUX, proxy: Proxy(), se:cdp: http://localhost:39557, se:cdpVersion: 108.0.5359.98, se:vncEnabled: true, se:vncLocalAddress: ws://172.18.0.6:7900, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
web-selenium_chrome-1  | 19:43:37.507 INFO [LocalDistributor.newSession] - Session created by the Distributor. Id: 5fb54cb47e07699de29b43b00ecef29a 
web-selenium_chrome-1  |  Caps: Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 108.0.5359.98, chrome: {chromedriverVersion: 108.0.5359.71 (1e0e3868ee06..., userDataDir: /tmp/.com.google.Chrome.PEanHy}, goog:chromeOptions: {debuggerAddress: localhost:39557}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: LINUX, proxy: Proxy(), se:bidiEnabled: false, se:cdp: ws://172.18.0.6:4444/sessio..., se:cdpVersion: 108.0.5359.98, se:vnc: ws://172.18.0.6:4444/sessio..., se:vncEnabled: true, se:vncLocalAddress: ws://172.18.0.6:7900, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
web-selenium_chrome-1  | 19:43:38.397 WARN [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "1d19d9608398dc55bfe4ff408f323fa2","eventTime": 1671392618396368100,"eventName": "HTTP request execution complete","attributes": {"http.flavor": 1,"http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.host": "selenium_chrome:4444","http.method": "POST","http.request_content_length": "45","http.scheme": "HTTP","http.status_code": 500,"http.target": "\u002fsession\u002f5fb54cb47e07699de29b43b00ecef29a\u002furl","http.user_agent": "selenium\u002f4.1.0 (ruby linux)"}}
web-selenium_chrome-1  | 
web-selenium_chrome-1  | 19:43:38.926 INFO [LocalSessionMap.lambda$new$0] - Deleted session from local Session Map, Id: 5fb54cb47e07699de29b43b00ecef29a
web-selenium_chrome-1  | 19:43:38.929 INFO [GridModel.release] - Releasing slot for session id 5fb54cb47e07699de29b43b00ecef29a
web-selenium_chrome-1  | 19:43:38.931 INFO [SessionSlot.stop] - Stopping session 5fb54cb47e07699de29b43b00ecef29a
mongo                    | {"t":{"$date":"2022-12-18T19:43:47.530+00:00"},"s":"I",  "c":"NETWORK",  "id":22944,   "ctx":"conn31","msg":"Connection ended","attr":{"remote":"172.18.0.8:60484","connectionId":31,"connectionCount":27}}
mongo                    | {"t":{"$date":"2022-12-18T19:43:47.547+00:00"},"s":"I",  "c":"NETWORK",  "id":22944,   "c
valcod3r
  • 321
  • 4
  • 14
  • did you look at this? https://stackoverflow.com/questions/55844788/how-to-fix-severe-bind-failed-cannot-assign-requested-address-99-while – mrlindsey Dec 22 '22 at 23:46
  • yeah, doesn't work with the arguments. But, I'll get back to it later. – valcod3r Dec 23 '22 at 00:00

0 Answers0