I am going to deploy my website on a server with the use of
Docker. My components are:
.Net Core Api
With the usage of
docker-compose I created my
container but it could not be run because of this error:
crit: Microsoft.AspNetCore.Hosting.Diagnostics Application startup exception OpenQA.Selenium.WebDriverException: An unknown exception was encountered sending an HTTP request to the remote WebDriver server for URL http://localhost:4444/wd/hub/session. The exception message was: Cannot assign requested address (localhost:4444)
This is the
version: "3" services: selenium-hub: image: selenium/hub container_name: selenium-hub ports: - "4444:4444" chrome: image: selenium/standalone-chrome volumes: - /dev/shm:/dev/shm depends_on: - selenium-hub environment: - HUB_HOST=selenium-hub - HUB_PORT=4444 web: build: . ports: - "8090:80"
And this a piece of code in my project in which I instantiate the
ChromeOptions options = new ChromeOptions(); options.AddArgument("no-sandbox"); options.AddArgument("headless"); driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options);
In my opinion the problem stem from
Uri setting because the container successfully created and selenium-hub is running.
selenium-hub | 08:31:29.415 INFO [Hub.execute] - Started Selenium Hub 4.3.0 (revision a4995e2c09*): http://192.168.80.3:4444
The issue here is you are using
localhost as host to connect to selenium hub. That would not work when all your services are running as containers in docker.
what you can try is add all your services under one network and reference to the selenium-hub service from your selenium code as shown below
version: "3" services: chrome: image: selenium/node-chrome:4.3.0-20220706 shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOST=selenium-hub - SE_EVENT_BUS_PUBLISH_PORT=4442 - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 networks: - hub_network selenium-hub: image: selenium/hub:4.3.0-20220706 container_name: selenium-hub ports: - "4442:4442" - "4443:4443" - "4444:4444" networks: - hub_network web: build: . ports: - "8090:80" depends_on: - selenium-hub - chrome restart: always networks: - hub_network networks: hub_network: external: false
And in your selenium code you can call invoke the hub like,
driver = new RemoteWebDriver(new Uri("http://selenium-hub:4444/wd/hub"), options);
Answered By – LiquidDeath