我有一个节点应用程序,我可以从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上的服务器?
答案 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图像,最简单的事情可能是作为环境变量