Jenkins+WebDriver+Protractor:原因:org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话

Jenkins+WebDriver+Protractor: Caused by: org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session

我正在尝试将 jenkins 设置为 运行 我的量角器测试。 我知道我需要 运行 没有浏览器的量角器。我该如何设置?

我需要安装哪些 npm 包? 我的实际包裹是(package.json):

"devDependencies": {
"karma": "~0.12",
"karma-phantomjs-launcher": "~0.2",
"karma-ng-html2js-preprocessor": "~0.1",
"protractor": "~2.1.0",
"bower": "~1.3.8",
"jasmine": "~2.3.1",
"karma-jasmine": "~0.3.5",
"karma-requirejs": "~0.2.2"

}

在我的本地机器上一切正常,因为我看到 chrome windows 打开,并且我看到正在对它进行测试。

但是当我尝试在 Jenkins 上 运行 它时,我收到了以下消息:

原因:org.openqa.selenium.remote.UnreachableBrowserException:无法开始新会话。可能的原因是远程服务器地址无效或浏览器启动失败。
构建信息:版本:'2.45.0',修订:'5017cb8',时间:'2015-02-26 23:59:50',ip:'127.0.1.1',os.name:'Linux', os.arch: 'amd64', os.version: '3.13.0-24-generic', java.version: '1.8.0_25' 驱动程序信息:driver.version:ChromeDriver 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:593) 在 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:126) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:139) 在 org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:171) 在 org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:139) ... 还有 14 个
原因:org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时。
构建信息:版本:'2.45.0',修订:'5017cb8',时间:'2015-02-26 23:59:50',ip:'127.0.1.1',os.name:'Linux', os.arch: 'amd64', os.version: '3.13.0-24-generic', java.version: '1.8.0_25' 驱动程序信息:driver.version:ChromeDriver 在 org.openqa.selenium.remote.service.DriverService.start(DriverService.java:171) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:62) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572) ... 还有 19 个
原因:org.openqa.selenium.net.UrlChecker$TimeoutException:等待 [http://localhost:4945/status] 在 20001 毫秒后可用时超时
在 org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:104) 在 org.openqa.selenium.remote.service.DriverService.start(DriverService.java:168) ... 还有 21 个

我的protractor.conf.js:

exports.config = {
// The address of a running selenium server.
seleniumAddress: 'http://localhost:4444/wd/hub',

// Capabilities to be passed to the webdriver instance.
capabilities: {
    'browserName': 'chrome',
    'chromeOptions': {
        'args': ['incognito', 'disable-extensions', 'start-maximized', 'enable-crash-reporter-for-testing', '--test-type']
    },
    'loggingPrefs': {
        'browser': 'ALL'
    }
},

getPageTimeout: 20000,

    framework: 'jasmine2',

// Spec patterns are relative to the current working directly when
// protractor is called.

specs: ['global_setup.js', 'scenarios.js', 'campaign-grid-scenarios.js', 'create-campaign-scenarios.js'],
baseUrl: 'http://localhost:18090',

// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000
}

};

导致此超时的原因是什么?那是因为 webdriver 是 chrome 但 chrome 无法在我的 jenkins 设置中打开吗? 我一直在寻找类似的问题,但没有找到任何相关的问题。

谢谢。

那是因为 chrome 没有安装在您的 Jenkins 设置中。根据您的情况,有几个选项供您选择。

  1. 如果你有一个独立的 Jenkins 实例并且你知道你不会有任何随机选择的节点,那么你可以使用像 PhantomJS 这样的无头浏览器实现。您只需要确保 phantomjs 安装在您的 Jenkins 上,并告诉您的测试在 phantomjs 上 运行 而不是像 browserName : 'phantomjs' 那样的 chrome。您不需要在 package.json 中包含 phantomjs。只需确保已安装 PhantomJS 并将其可执行文件放置在 PATH 中的某个位置。

  2. 其次,您可以使用要测试的不同浏览器设置 Selenium 网格和设置节点。在 Jenkins 中,您 运行 在您选择的浏览器上的远程 selenium 网格上进行测试。如果您想走那条路,有付费的第三方选项,例如 sauce labs 或 browser stack。