Debugging your integration tests, that run a headless Chrome inside a docker image, is tricky.
In many cases you can connect your Chrome to a remote docker container like docker-selenium Show archive.org snapshot , which should be the preferred way when you try to inspect a page within your integration test.
Otherwise you might be able to start your docker container with --net=host
and access your local chromedriver in the host address space host.docker.internal
.
If both options above don't work for you here is a quick instruction, how you can bind a local chromedriver to your integration test via ssh
. The setup assumes:
CHROMEDRIVER_URL
that defines the host and port of the docker image running the headless Chrome (e.g. chrome:4444
)apt update
apt-get install openssh-server -y
apt-get install vim
vim /etc/ssh/sshd_config # Edit `PermitRootLogin yes` and `GatewayPorts yes`
service ssh start
chromedriver # Note the chromedriver port number in the output
docker ps # Note the container name or ID
docker exec -itu 0 container_name_or_id passwd # Change the password to be able to connect via SSH later
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id # Not the docke image IP address
ssh root@ip_address -R 127.0.0.1:9999:localhost:chromedriver_port_number # Bind your local chromedriver port to port 9999 inside the docker container
export CHROMEDRIVER_URL=http://localhost:9999
bundle exec rspec specs/system/test_spec.rb # You might need to set remove `--headless` from your chromedriver options in e.g. selenium to see a browser window opening