Usar o selénio/cromo-autônomo na composição do docker ligando-se ao selénio do Python
selenium/standalone-chrome
, e estava à procura de informações sobre como resolver o meu problema. Gostaria de evitar o uso de selenium/hub
, mas incluí-lo não parece resolver o meu problema.
Aqui está a minha composição de Estivador.yml
version: '3.1'
networks:
web:
external: true
services:
chrome:
image: selenium/standalone-chrome:latest
hostname: chrome
networks:
- web
ports:
- "5900:5900"
- "4444:4444"
privileged: true
shm_size: 2g
tests:
build: ./tests
networks:
- web
E o teste que estou a fazer dentro do recipiente de teste. O entrypoint verifica se o chrome está pronto e em execução antes de executar os scripts.
#!/usr/bin/env python3
"""Tests that the remote webdriver works."""
import unittest
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class LocalGoogleTestCase(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.addCleanup(self.browser.quit)
def testPageTitle(self):
self.browser.get('http://www.google.com')
self.assertIn('Google', self.browser.title)
class RemoteGoogleTestCase(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Remote(
command_executor='http://chrome:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
self.addCleanup(self.browser.quit)
def testPageTitle(self):
self.browser.get('http://www.google.com')
self.assertIn('Google', self.browser.title)
if __name__ == '__main__':
unittest.main(verbosity=2)
para os resultados dos testes, o Local
o teste tem sucesso, é só quando se tenta usar o comando. Ocasionalmente eu vou ter o erro hub not found in PATH
, mas esse erro é intermitente.
Eu sou capaz de Acessar a interface web via http://server:444/wd/hub
e pode iniciar sessões e executar scripts a partir daí.
- https://forums.docker.com/t/cant-connect-to-other-containers-inside-docker-network/66512
- https://forums.docker.com/t/docker-compose-doesnt-let-my-images-connect-with-each-other/54951
lugares que examinei que não funcionavam:
- acoplador: utilizar recipiente com Cromedriver de selénio sem cabeça
- docker selenium/standalone-chrome incapaz de se ligar à web do docker servidor
- a maneira mais fácil de fazer testes de selénio num contentor sobre o Jenkins CI
- Selenium webdriver.O controlador remoto não funciona com o tor proxy(webdriver.Cromo faz)
- Como faço para ligar e escalar vários contentores de ancoragem?
- como apontar o WebDriver para um dos múltiplos navegadores cromados do docker Selenium standalone?
actualização: a partir de dentro os testes recipiente, eu sou capaz de curl http://chrome:4444/wd/hub/status
para recuperar o status que a conexão está funcionando, e isso é parte do entryscript.sh
, então eu sei que os recipientes podem falar uns com os outros de alguma forma.
1 answers
Nome do ficheiro: "docker-compose".yml
version: '3.8'
networks:
web:
external: true
driver: bridge
services:
chrome:
image: selenium/standalone-chrome:latest
hostname: chrome
networks:
- web
privileged: true
shm_size: 2g
framework:
build: .
networks:
- web
depends_on:
- chrome
Também, note que o url da grelha é http://chrome:4444/wd/hub
Com esta mudança na configuração, eu fui capaz de executar o meu código com sucesso e eu também foi capaz de enviar e-mails.