分叉的驱动程序实例永远不会退出
Forked driver instance never quits
我在 Protractor 中使用 运行 多个浏览器 windows 时遇到问题。
测试的示例代码写在下面:我 fork 浏览器以获取新的 window 并进行一些测试。当我将输入写入原始浏览器时,分叉的浏览器不应该有该输入。
一切正常,除了之后分叉的浏览器永远不会关闭并且将某种错误消息写入输出。
我的测试套件:
'use strict';
describe('testing', function () {
it('should work', function () {
browser.get('http://angularjs.org');
var browser2 = browser.forkNewDriverInstance(true);
element(by.name('as_q')).sendKeys('search');
expect(browser2.element(by.name('as_q')).getText()).toBe('');
});
});
这是我的配置:
exports.config = {
framework: 'jasmine2',
capabilities: {
'browserName': 'chrome'
},
baseUrl: 'http://localhost:4000',
specs: 'test.spec.js',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
}
};
这就是在终端中 运行 量角器时写入标准输出的内容:
Starting selenium standalone server...
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://<my-ip-adress>:54721/wd/hub
Started
.
1 spec, 0 failures
Finished in 8.755 seconds
Shutting down selenium standalone server.
/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:145
callback(new Error(message));
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:145:16)
at ClientRequest.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1552:9)
at Socket.emit (events.js:95:17)
at net.js:441:14
at process._tickCallback (node.js:442:13)
From: Task: WebDriver.quit()
at [object Object].webdriver.WebDriver.schedule (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:360:15)
at [object Object].webdriver.WebDriver.quit (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:443:21)
at /usr/local/lib/node_modules/protractor/lib/driverProviders/driverProvider.js:59:14
at [object Object].promise.ControlFlow.runInFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1877:20)
at [object Object].promise.Callback_.goog.defineClass.notify (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:2464:25)
at [object Object].promise.Promise.notify_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:563:12)
at Array.forEach (native)
at Object.goog.array.forEach (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/array/array.js:203:43)
at [object Object].promise.Promise.notifyAll_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:552:16)
at [object Object].goog.async.run.processWorkQueue [as _onTimeout] (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/async/run.js:125:21)
[launcher] Process exited with error code 1
使用量角器 2.0.0。
为什么分叉驱动实例不像普通浏览器那样退出。我必须在 selenium 服务器终止之前手动关闭它吗?
错误的原因是您仍在尝试退出原始驱动程序,而不是分叉驱动程序。
除了分叉,你能不能不做类似的事情
browser = new Browser();
希望您的 'new' 浏览器应该退出。
另一种解决方案是使用 WebDriver 的 driver.switchTo().frame() 方法
您可以select使用;
- 一个数字。 (基于 0 的索引)
- 姓名或 ID。
- 一个以前找到的 WebElement。 (也许对你来说最简单)
切换后,您应该可以退出。
您应该明确退出第二个会话,量角器只负责关闭主要会话。
所以,只需添加:
broswer2.quit();
我遇到了同样的问题。因为我只是在搞一个副项目 I've just forked protractor and commented out the piece of code that stops the server prematurely.
//self.server_.stop().then(function() {
deferred.resolve();
//});
不太好,但对于我的简单项目来说,它已经成功了。
抱歉,我的第一个 SO 评论是如此糟糕:-)也许这会为量角器知识比我多一点的人提供线索。
我在 Protractor 中使用 运行 多个浏览器 windows 时遇到问题。 测试的示例代码写在下面:我 fork 浏览器以获取新的 window 并进行一些测试。当我将输入写入原始浏览器时,分叉的浏览器不应该有该输入。 一切正常,除了之后分叉的浏览器永远不会关闭并且将某种错误消息写入输出。
我的测试套件:
'use strict';
describe('testing', function () {
it('should work', function () {
browser.get('http://angularjs.org');
var browser2 = browser.forkNewDriverInstance(true);
element(by.name('as_q')).sendKeys('search');
expect(browser2.element(by.name('as_q')).getText()).toBe('');
});
});
这是我的配置:
exports.config = {
framework: 'jasmine2',
capabilities: {
'browserName': 'chrome'
},
baseUrl: 'http://localhost:4000',
specs: 'test.spec.js',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
}
};
这就是在终端中 运行 量角器时写入标准输出的内容:
Starting selenium standalone server...
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://<my-ip-adress>:54721/wd/hub
Started
.
1 spec, 0 failures
Finished in 8.755 seconds
Shutting down selenium standalone server.
/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:145
callback(new Error(message));
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:145:16)
at ClientRequest.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1552:9)
at Socket.emit (events.js:95:17)
at net.js:441:14
at process._tickCallback (node.js:442:13)
From: Task: WebDriver.quit()
at [object Object].webdriver.WebDriver.schedule (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:360:15)
at [object Object].webdriver.WebDriver.quit (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:443:21)
at /usr/local/lib/node_modules/protractor/lib/driverProviders/driverProvider.js:59:14
at [object Object].promise.ControlFlow.runInFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1877:20)
at [object Object].promise.Callback_.goog.defineClass.notify (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:2464:25)
at [object Object].promise.Promise.notify_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:563:12)
at Array.forEach (native)
at Object.goog.array.forEach (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/array/array.js:203:43)
at [object Object].promise.Promise.notifyAll_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:552:16)
at [object Object].goog.async.run.processWorkQueue [as _onTimeout] (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/async/run.js:125:21)
[launcher] Process exited with error code 1
使用量角器 2.0.0。
为什么分叉驱动实例不像普通浏览器那样退出。我必须在 selenium 服务器终止之前手动关闭它吗?
错误的原因是您仍在尝试退出原始驱动程序,而不是分叉驱动程序。
除了分叉,你能不能不做类似的事情
browser = new Browser();
希望您的 'new' 浏览器应该退出。
另一种解决方案是使用 WebDriver 的 driver.switchTo().frame() 方法
您可以select使用;
- 一个数字。 (基于 0 的索引)
- 姓名或 ID。
- 一个以前找到的 WebElement。 (也许对你来说最简单)
切换后,您应该可以退出。
您应该明确退出第二个会话,量角器只负责关闭主要会话。
所以,只需添加:
broswer2.quit();
我遇到了同样的问题。因为我只是在搞一个副项目 I've just forked protractor and commented out the piece of code that stops the server prematurely.
//self.server_.stop().then(function() {
deferred.resolve();
//});
不太好,但对于我的简单项目来说,它已经成功了。
抱歉,我的第一个 SO 评论是如此糟糕:-)也许这会为量角器知识比我多一点的人提供线索。