分叉驱动程序实例永不退出

时间:2015-04-17 10:04:19

标签: javascript selenium webdriver protractor

我在Protractor中运行多个浏览器窗口时遇到问题。 测试的示例代码写在下面:我分叉浏览器以获得一个新窗口和一些测试。当我将输入写入原始浏览器时,分叉的输入应该没有输入。 一切正常,但之后分叉的浏览器永远不会关闭,并且会向输出写入某种错误消息。

我的测试套件:

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

这是在终端中运行量角器时写到stdout的内容:

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

使用Protractor 2.0.0。

为什么分叉驱动程序实例不像普通浏览器那样退出。在selenium服务器终止之前,我是否必须手动关闭它?

3 个答案:

答案 0 :(得分:1)

你应该明确退出第二个会话,量角器只负责关闭主会议。

所以,只需添加:

broswer2.quit();

答案 1 :(得分:0)

出错的原因是您仍在尝试退出原始驱动程序,而不是分叉驱动程序。

而不是分叉,你不能做像

这样的事情
browser = new Browser();

希望你的这个新的&#39;浏览器应该退出。

作为解决方案的另一个选择是使用WebDriver的driver.switchTo()。frame()方法

您可以选择使用;

  1. 一个数字。 (0基础指数)
  2. 姓名或身份证。
  3. 以前找到的WebElement。 (也许对你来说最简单)
  4. 切换后,您应该可以退出。

答案 2 :(得分:0)

我遇到了同样的问题。因为我只是在攻击侧项目I've just forked protractor and commented out the piece of code that stops the server prematurely.

//self.server_.stop().then(function() {
       deferred.resolve();
//});

不是很漂亮但是对于我的简单项目来说,它已经成功了。

道歉,我的第一个评论是如此可怕的黑客:-)也许这将为那些比我更多的量角器知识的人提供线索。