我正在努力学习AngularJS。作为其中的一部分,我想学习使用端到端测试。目前,我有一个像这样的目录结构:
node_modules
.bin
...
protractor
...
node_modules
.bin
adam-zip
glob
minijasminenode
optimist
saucelabs
selenium-webdriver
protractor
config.js
src
tests
test.e2e.js
我的config.js文件如下所示:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'chrome'
},
specs: [
'../src/tests/test.e2e.js'
],
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
}
};
test.e2e.js如下所示:
'use strict';
describe('My Sample', function () {
driver = protractor.getInstance();
beforeEach(function () {
driver.get('#/');
});
it('My First Test', function () {
message = "Hello.";
expect(message).toEqual('World.');
});
});
当我尝试使用量角器运行我的端到端测试时,我从命令行运行以下命令:
node_modules\.bin\protractor protractor\config.js
当我运行该命令时,收到以下错误:
C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1542
throw error;
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:12
7:16)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1528:9)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:441:14
at process._tickCallback (node.js:415:13)
==== async task ====
WebDriver.createSession()
at Function.webdriver.WebDriver.acquireSession_ (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriv
er\lib\webdriver\webdriver.js:130:49)
at Function.webdriver.WebDriver.createSession (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver
\lib\webdriver\webdriver.js:110:30)
at Builder.build (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\builder.js:105:20)
at runJasmineTests (C:\Src\MyProject\node_modules\protractor\lib\runner.js:191:45)
at C:\Src\MyProject\node_modules\protractor\lib\runner.js:255:5
at C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriv
er\lib\webdriver\promise.js:1438:20)
at notify (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:328:12)
at then (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:377:7)
我做错了什么?
答案 0 :(得分:63)
我用--standalone flag解决了这个问题:
webdriver-manager start --standalone
答案 1 :(得分:29)
我通过从config.js中删除以下行来实现它。
seleniumAddress: 'http://localhost:4444/wd/hub',
&#13;
答案 2 :(得分:13)
你在运行selenium服务器吗? git README声明如下:
WebdriverJS本身并不包含selenium服务器 - 您必须启动一个独立的selenium服务器。您所需要的只是最新的selenium-server-standalone。
答案 3 :(得分:6)
错误消息归因于以下内容:
[ECONNREFUSED]忽略连接尝试(因为目标没有侦听连接)或明确拒绝连接。
检查Webdriver管理器的URL。默认URL为:
http://localhost:4444/wd/hub
使用后台进程运行webdriver-manager,然后运行量角器:
Start-Process webdriver-manager start -passthru
protractor conf.js
这将启动Selenium Server并输出一堆信息日志。您的Protractor测试将向此服务器发送请求以控制本地浏览器。让该服务器继续运行
<强>参考强>
答案 4 :(得分:4)
对我来说,这是因为Node和Protractor版本不兼容而发生的。
我的修复 -
npm install -g量角器
webdriver-manager更新
webdriver-manager start
量角器conf.js
答案 5 :(得分:2)
我也遇到了同样的问题,对我来说有用的诀窍就是使用两个cmd窗口,在输入webdriver-manager start
并且不按输入密钥(如果输入密钥)后保持一个窗口打开按下selenium服务器关闭,不知道为什么)打开另一个cmd窗口并调用你的测试。
答案 6 :(得分:2)
如果您使用的是npm protractor-webdriver grunt插件(https://www.npmjs.org/package/grunt-protractor-webdriver),您可能会遇到同样的错误。 这是因为测试结束前webdriver终止。测试成功运行,然后您会收到如下消息:
Session deleted: Going to shut down the Selenium server
Shutting down Selenium server: http://127.0.0.1:4444
Shut down Selenium server: http://127.0.0.1:4444 (OKOK)
d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:145
callback(new Error(message));
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:145:16)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1547:9)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:419:13)
我使用grunt插件中的keepAlive选项解决了这个问题。
这是我的Gruntfile.js配置:
protractor_webdriver: {
options: {
keepAlive : true // True to keep the webdriver alive
},
start: {
},
},
...
我希望这会对某人有所帮助。
JM。
答案 7 :(得分:1)
答案 8 :(得分:1)
希望它可以帮助某人:我遇到了同样的问题 - 使用grunt-protractor-runner
遇到ECONNREFUSED。我的案例的细微差别在于我在Docker容器中运行我的整个E2E环境(测试文件,Web应用程序和整个后端)。
我尝试过运行量角器
grunt-protractor-webdriver
任务,可以让webdriver启动并“手动”运行(没有区别); directConnect
和keepAlive
设置(绕过Selenium并导致与Chromedriver相关的崩溃,其中一个被描述为here)。解决方案相当简单:增加分配给容器的内存量。在我的Windows 10主机上,我执行了以下步骤:
VBoxManage.exe modifyvm default --memory 8192
(通过自定义shell脚本)(通过Docker Quickstart脚本,相当于docker-machine start
)。 (感谢this SO answer)。--shm-size=4G
参数添加到我的docker run
命令。 (See docs)
df -h
上安装的内存量,在您的来宾计算机中运行/dev/shm
来验证它是否有效。结果,我不再有像ECONNREFUSED这样看似无法解释的错误。
答案 9 :(得分:0)
如果您运行提供的量角器演示,您应该尝试在与selenium相同的命令提示符下运行量角器配置。尝试分别运行selenium服务器和量角器。
通过以下命令确保第一次运行selenium。
webdriver-manager start --standalone
在单独的命令窗口中运行量角器。
protractor conf.js
(在我的情况下,conf.js是配置文件)
答案 10 :(得分:0)
我遇到了一个与Selenium Docker网格/独立的@David Remie相似的问题。如果RAM / CPU最少,则测试将在网络驱动程序启动之前开始。一种较少消耗资源的方法是在测试之前等待几秒钟(运行“ sleep 5”或类似方法)。
增加RAM有时足以解决该问题,但真正的问题是Selenium CMD(/opt/bin/entry_point.sh,启动了基于{{3 }}花了一些时间来启动Selenium Webdriver。
答案 11 :(得分:0)
webdriver-manager start ----- 没有帮助,但下面有帮助
webdriver-manager start --standalone