2017-10-13 4 views
0

J'ai une application de noeud que je peux commencer par node server.js et accéder sur localhost: 9000.Comment me connecter à un site localhost en utilisant l'image Selenium Docker?

J'ai une série de tests e2e sur le sélénium qui fonctionnent bien, mais je cherche maintenant à utiliser l'image docker sélénium.

Je commence l'image docker avec docker run -d -p 4444:4444 selenium/standalone-chrome

et j'ai changé mon code de test E2E pour ressembler à:

var driver = new webdriver.Builder(). 
    usingServer('http://127.0.0.1:4444/wd/hub'). 
    withCapabilities(webdriver.Capabilities.chrome()). 
    build(); 

    // driver.manage().window().setSize(1600, 1000); 

    return driver.get('http://127.0.0.1:9000') 
    .then(function() { 
     // driver.executeScript('localStorage.clear();') 
     return driver 
    }); 

Mais le sélénium ne parvient pas à se connecter à l'application du tout!

(Si je Décommentez la ligne setSize, le programme échoue là)

J'ai le serveur jusqu'à une course, et il est en effet accessible à localhost: 9000. Comment puis-je obtenir mon test pour utiliser correctement le sélénium dockerized et pointer correctement vers un serveur sur localhost?

+0

Quel OS hôte utilisez-vous? –

Répondre

0

Depuis la machine hôte, les points de terminaison Docker ne sont pas accessibles à localhost. Avez-vous essayé d'utiliser 0.0.0.0 au lieu de 127.0.0.1?

+0

Je suis passé à 'usingServer ('http://0.0.0:4444/wd/hub') .' et les tests ne sont toujours pas exécutés. J'ai un test qui imprime le corps et il dit "Ce site ne peut pas être atteint." – swagrov

0

Si vous utilisez Mac, vous pouvez essayer d'obtenir la passerelle de netstat à l'intérieur de l'image docker:

netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}' 

ou écrire ifconfig du terminal, et obtenir l'adresse iNet, essayez avec qu'au lieu de 127.0.0.1.

0

Que fait la commande docker ps pour ce conteneur? Est-il affiché comme "0.0.0.0:4444->4444/tcp".?

Vous pouvez exécuter sudo iptables -L -n et vérifier dans la section "Chain DOCKER" ci-dessous la ligne devrait venir. ACCEPTER tcp - 0.0.0.0/0 xxxx tcp dpt: 4444

0

Si vous voulez que votre comportement du réseau de conteneurs pour être comme vos machines hôtes utilisent run docker --network = hôte

0

Juste pour vous assurer que je comprends - le sélénium s'exécute dans le docker et tente d'accéder à l'application de noeud qui s'exécute sur le serveur?

Dans ce cas, ce sont deux « serveurs », vous devez donc utiliser des adresses IP réelles (ou les noms de dns)

transmettent l'adresse IP du serveur en tant que paramètre à l'image de sélénium dockerized la chose la plus simple serait probablement comme une variable d'environnement