如何使用Selenium Docker映像连接到localhost站点?

时间:2017-10-13 19:25:30

标签: selenium docker e2e-testing

我有一个节点应用程序,我可以从node server.js开始,并在localhost:9000上访问。

我对硒的一系列e2e测试运行良好,但我现在正在寻找使用docker selenium图像。

我用docker run -d -p 4444:4444 selenium/standalone-chrome

启动泊坞窗图片

我将我的e2e测试代码改为:

  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
    });

但是selenium根本无法连接到应用程序!

(如果我取消注释setSize行,程序就会失败)

我让服务器运行起来,并且它确实可以在localhost:9000上访问。如何让我的测试正确使用dockerized selenium,并正确指向localhost上的服务器?

5 个答案:

答案 0 :(得分:0)

在主机上,无法在localhost访问Docker端点。您是否尝试使用0.0.0.0代替127.0.0.1

答案 1 :(得分:0)

如果您使用的是mac,您可以尝试从docker image中的netstat获取网关:

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

或从终端写下ifconfig,并获取inet地址,尝试使用该地址而不是127.0.0.1

答案 2 :(得分:0)

这个容器的docker ps命令是什么? 是否显示为" 0.0.0.0:4444-> 4444 / tcp"。

您可以运行sudo iptables -L -n并在" Chain DOCKER"下验证。以下部分应该来了。 ACCEPT tcp - 0.0.0.0/0 x.x.x.x tcp dpt:4444

答案 3 :(得分:0)

如果您希望容器网络行为与主机一样,请使用docker run --network = host

答案 4 :(得分:0)

为了确保我理解 - selenium在docker中运行,并尝试访问在服务器上运行的节点应用程序?

在这种情况下,这些是两个不同的“服务器”,因此您需要使用真实IP地址(或DNS名称)

将服务器的ip作为参数传递给dockerized selenium图像,最简单的事情可能是作为环境变量