【问题标题】:Not able to run Protractor / Jasmine tests with Microsoft Edge无法使用 Microsoft Edge 运行 Protractor / Jasmine 测试
【发布时间】:2017-12-05 23:49:35
【问题描述】:

我正在做一个项目,开始使用 Protractor 和 Jasmine 测试 Node/Angular 应用程序。我有一个在大多数浏览器中工作的 POC,但在使用 MS Edge 时遇到了很多麻烦。这是我的环境:

OS: Windows 10 Pro (Version 1709, OS Build 16299.98)
Edge: 41.16299.15.0
EdgeHTML: 16.16299
MS Web Driver: 10.0.16299.15
Node: 6.12.0
Protractor: 5.2.1
Jasmine: 2.8.0
Selenium: 3.8.1

当我在 Chrome、Firefox 和 IE (11) 中运行测试时,行为很好(测试运行时得到预期结果)。但是,使用 MS Edge,该过程甚至在测试规范运行之前就失败了。

示例代码/输出使用 Protractor 教程,但在使用我们的应用程序时遇到了同样的问题。

工作 conf.js(适用于 Chrome 和 Firefox)

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['./spec/spec.js'],

  multiCapabilities: [
    { 'browserName': 'chrome' },
    { 'browserName': 'firefox', 'marionette': true, 'firefox_binary': "C:\\Program Files\\Mozilla Firefox\\firefox.exe" }//,
]  
}

conf.js 失败(对于 MS Edge)

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:17556',
  specs: ['./spec/spec.js'],

  capabilites: { browserName: 'MicrosoftEdge' }
}

spec.js

// spec.js
describe('Protractor Demo App', function() {
  it('should have a title', function() {
    browser.get('http://juliemr.github.io/protractor-demo/');

    expect(browser.getTitle()).toEqual('Super Calculator');
  });
});

当我在启动 Microsoft Web 驱动程序后运行 MS Edge 测试时,会发生以下情况:

$ protractor conf.js
[14:14:18] I/launcher - Running 1 instances of WebDriver
[14:14:18] I/hosted - Using the selenium server at http://localhost:17556
[14:14:20] E/launcher - Error code: 135
[14:14:20] E/launcher - Error message: ECONNREFUSED connect ECONNREFUSED 127.0.0.1:17556
[14:14:20] E/launcher - Error: ECONNREFUSED connect ECONNREFUSED 127.0.0.1:17556
    at ClientRequest.<anonymous> (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:238:15)
    at emitOne (events.js:96:13)
    at ClientRequest.emit (events.js:188:7)
    at Socket.socketErrorListener (_http_client.js:310:9)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1281:8)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
From: Task: WebDriver.createSession()
    at Function.createSession (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:769:24)
    at Function.createSession (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\chrome.js:761:15)
    at createDriver (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\index.js:170:33)
    at Builder.build (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\index.js:626:16)
    at Hosted.getNewDriver (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\built\driverProviders\driverProvider.js:53:33)
    at Runner.createBrowser (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\built\runner.js:195:43)
    at q.then.then (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\built\runner.js:339:29)
    at _fulfilled (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:834:54)
    at self.promiseDispatch.done (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:863:30)
    at Promise.promise.promiseDispatch (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:796:13)
[14:14:20] E/launcher - Process exited with error code 135

问题似乎出在某个地方,它说它正在使用“localhost”上的服务器,但随后却在“127.0.0.1”上发出请求。从理论上讲,它们是相同的。但在操作中,只有 'localhost' 有响应。如果我尝试访问 127.0.0.1:17556 它没有响应。

This website could not be found
Error Code: INET_E_RESOURCE_NOT_FOUND

我一直在四处寻找相关信息(这里是 SQA,以及 GitHub 上的 Protactor 讨论),但没有找到解决方案。 GitHub 上的一些讨论表明,使用 Protractor 进行的 MS Edge 测试曾一度奏效。有没有人能够使用此版本的 MS Edge 和 MS Webdriver 成功运行 Protractor 测试?

最后一点信息:我可以访问另一台装有旧版 Edge (10240) 的 Windows 10 机器。在那台机器上我没有这个问题(localhost vs 127.0.0.1),但是它已经足够老了,仍然存在异步问题,我不能用它来测试 Protractor。

谢谢!

更新

spec 文件没有改变,但我更新了配置文件(conf.js):

// conf.js
exports.config = {
    directConnect: false,
    framework: 'jasmine',
    specs: ['./spec/spec.js'],
    seleniumAddress: 'http://localhost:4444/wd/hub',

    multiCapabilities: [
        //{ 'browserName': 'chrome' },
        //{ 'browserName': 'firefox', 'marionette': true, 'firefox_binary': "C:\\Program Files\\Mozilla Firefox\\firefox.exe" },
        { 'browserName': 'MicrosoftEdge' }
    ]
};

启用后,Chrome 和 Firefox 可以运行测试。

Edge 出现以下故障(等待驱动程序服务器启动超时):

$ protractor conf.js
[13:13:53] I/launcher - Running 1 instances of WebDriver
[13:13:53] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
[13:14:13] E/launcher - Timed out waiting for driver server to start.
Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:32.194Z'
System info: host: 'QA-01', ip: '10.1.1.80', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '9.0.1'
Driver info: driver.version: unknown
[13:14:13] E/launcher - WebDriverError: Timed out waiting for driver server to start.
Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:32.194Z'
System info: host: 'QA-01', ip: '10.1.1.80', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '9.0.1'
Driver info: driver.version: unknown
    at WebDriverError (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:27:5)
    at Object.checkLegacyResponse (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:546:15)
    at parseHttpResponse (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:509:13)
    at doSend.then.response (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:441:30)
    at process._tickCallback (internal/process/next_tick.js:109:7)
From: Task: WebDriver.createSession()
    at Function.createSession (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:769:24)
    at createDriver (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\index.js:170:33)
    at Builder.build (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\index.js:635:14)
    at Hosted.getNewDriver (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\built\driverProviders\driverProvider.js:53:33)
    at Runner.createBrowser (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\built\runner.js:195:43)
    at q.then.then (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\built\runner.js:339:29)
    at _fulfilled (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:834:54)
    at self.promiseDispatch.done (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:863:30)
    at Promise.promise.promiseDispatch (C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:796:13)
    at C:\Users\USER.NAME\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:556:49
[13:14:13] E/launcher - Process exited with error code 199

和以前一样 - 在旧版本的 Windows 10、Edge (10240) 和 Edge 驱动程序上使用相同的设置会尝试运行测试(尽管存在异步执行问题)。

这个设置可能比我以前使用的要好,但总体结果是一样的。量角器测试(在这台机器上)没有在 MS Edge (16299) 中运行。

非常感谢任何见解或建议。

谢谢!

【问题讨论】:

  • selenium地址不应该包括/wd/hub吗?您是否尝试添加它以查看它是否有效?
  • @tehbeardedone 据我所知,使用 MS Edge 进行的测试使用 MS Webdriver 代替 Selenium(或 webdriver-manager)。令人担忧的是,我可以对旧版本的 Edge 和 MS Webdriver 使用相同的设置(规范和配置),并且它确实打开了浏览器并尝试运行测试。因此,对于 Protractor 测试,它似乎已损坏、不受支持,或者需要一些我尚未找到的设置。

标签: jasmine protractor microsoft-edge microsoft-webdriver


【解决方案1】:

据我所知,您需要告诉量角器在哪里可以找到 Edge 驱动程序。我发现一些博客文章提到将seleniumArgs 添加到配置中。

seleniumArgs: ['-Dwebdriver.edge.driver=your/path/to/MicrosoftWebDriver.exe']

【讨论】:

  • 我已经尝试了一些变体但没有成功。但是,使用旧版本的 Edge 和 MS Webdriver 就没有必要了。我只需要启动 MS Webdriver 并使用 conf.js 文件运行 Protractor。
【解决方案2】:

经过额外的时间并使用另一台 Windows 10 机器,我成功地运行了这个简单的测试。

我只能得出结论,那台特定的机器上有一些东西阻止了测试的正确执行。我无法弄清楚那是什么,但是,“它有用吗?”问题得到解答。确实如此(这是人们所期望的)。

conf.js:

// conf.js
exports.config = {
  directConnect: false,
  framework: 'jasmine',
  specs: ['./spec/spec.js'],
  seleniumAddress: 'http://localhost:4444/wd/hub',

  multiCapabilities: [
    { 'browserName': 'chrome' },
    { 'browserName': 'firefox', 'marionette': true },
    { 'browserName': 'MicrosoftEdge' }
  ]
};

spec.js:

// spec.js
describe('Protractor Demo App', function() {
  it('should have a title', function() {
    browser.get('http://juliemr.github.io/protractor-demo/');

    expect(browser.getTitle()).toEqual('Super Calculator');
  });
});

结果:

[10:07:15] I/launcher - 0 instance(s) of WebDriver still running
[10:07:15] I/launcher - chrome #01 passed
[10:07:15] I/launcher - MicrosoftEdge #21 passed
[10:07:15] I/launcher - firefox #11 passed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2018-10-04
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2015-07-21
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多