【发布时间】:2018-03-13 17:07:46
【问题描述】:
总结:
我在 Windows 10 上使用 Protractor v5.3.0 和 Protractor-Cucumber-Framework v4.2.0。我使用 WebStorm IDE 用 Javascript 编写了一个示例测试项目。我使用 Chrome 浏览器运行示例测试场景没有任何问题。然而,当我尝试使用 IE11 时,相同的测试场景无法运行。相反,我看到 WebStorm 终端窗口上显示以下错误消息:
Microsoft Windows [Version 10.0.15063]
(c) 2017 Microsoft Corporation. All rights reserved.
C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2>node_modules\.bin\protractor cucumber.config.js
(node:17976) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[15:58:12] I/launcher - Running 1 instances of WebDriver
[15:58:12] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
F---
Failures:
1) Scenario: Protractor and Cucumber Test # features\testone.feature:7
× Given I go to "https://angularjs.org/" # features\step_definitions\testone.steps.js:73
JavascriptError: Error executing JavaScript
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:33:15.31Z'
System info: host: <computer name>, ip: <ip address>, os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '9.0.4'
Driver info: driver.version: unknown
at Object.checkLegacyResponse (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\error.js:546:15)
at parseHttpResponse (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\http.js:509:13)
at doSend.then.response (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\http.js:441:30)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
From: Task: Protractor.get(https://angularjs.org/) - reset url
at thenableWebDriverProxy.schedule (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\webdriver.js:807:17)
at ProtractorBrowser.executeScriptWithDescription (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\protractor\built\browser.js:404
:28)
at driver.controlFlow.execute.then.then.then (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\protractor\built\browser.js:679:25)
at ManagedPromise.invokeCallback_ (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\promise.js:1376:14)
at TaskQueue.execute_ (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\promise.js:3084:14)
at TaskQueue.executeNext_ (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\promise.js:3067:27)
at asyncRun (C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\promise.js:2927:27)
at C:\Users\<user name>\<project name>\WebStorm\protractorCucumberTest_v2\node_modules\selenium-webdriver\lib\promise.js:668:7
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
- When I add "Be Awesome" in the task field # features\step_definitions\testone.steps.js:77
- And I click the add button # features\step_definitions\testone.steps.js:81
- Then I should see my new task in the list # features\step_definitions\testone.steps.js:86
1 scenario (1 failed)
4 steps (1 failed, 3 skipped)
0m00.250s
[15:58:29] I/launcher - 0 instance(s) of WebDriver still running
[15:58:29] I/launcher - internet explorerANY #01 failed 1 test(s)
[15:58:29] I/launcher - overall: 1 failed spec(s)
[15:58:29] E/launcher - Process exited with error code 1
在新打开的 IE 窗口中出现无法访问此页面的错误信息。
我已经查看了许多有关此主题的 Stack Overflow 帖子以及其他地方。到目前为止,我无法让 IE 11 工作。感谢您的帮助...
注意: 每次运行测试时,我都会在新打开的 IE 窗口中看到不同的 localhost 端口号。
http://localhost:44234/
http://localhost:30821/
注意:我是使用 JavaScript 和量角器等的新手。
详细说明:
所有必需的软件都已本地安装到项目中。我目前没有在计算机上全局安装任何版本的量角器等。
我的 WebStorm 项目结构是:
我的 package.json 文件是:
{
"name": "protractorCucumberTest_v2",
"version": "1.0.0",
"description": "To test Protractor and Cucumber Integration",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "tbd"
},
"keywords": [],
"author": "user name",
"license": "ISC",
"dependencies": {
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"cucumber": "^4.0.0",
"protractor": "^5.3.0",
"protractor-cucumber-framework": "^4.2.0"
}
}
我的 testone.feature 文件是:
#features/test.feature
Feature: Angular Task List
As a basic user
I should be able to add and remove tasks from the task list
So that I can keep track of my tasks
Scenario: Protractor and Cucumber Test
Given I go to "https://angularjs.org/"
When I add "Be Awesome" in the task field
And I click the add button
Then I should see my new task in the list
我的 testone.steps.js 文件是:
var {Given, Then, When} = require ('cucumber');
var chai = require('chai'),
expect = chai.expect,
chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
Given(/^I go to "([^"]*)"$/, function (site) {
return browser.get(site);
});
When(/^I add "([^"]*)" in the task field$/, function (task) {
return element(by.model('todoList.todoText')).sendKeys(task);
});
When(/^I click the add button$/, function () {
var el = element(by.css('[value="add"]'));
return el.click();
});
Then(/^I should see my new task in the list$/, function () {
var todoList = element.all(by.repeater('todo in todoList.todos'));
expect(todoList.count()).to.eventually.equal(3);
return expect(todoList.get(2).getText()).to.eventually.equal('Do not Be Awesome');
});
我的 cucumber.config.js 文件是:
exports.config = {
capabilities: {
seleniumAddress: 'http://localhost:4444/wd/hub',
// browserName: 'chrome'
browserName: 'internet explorer',
ignoreProtectedModeSettings: true,
version: 'ANY'
},
localSeleniumStandaloneOpts : {
jvmArgs : ["-Dwebdriver.ie.driver=./node_modules/protractor/node_modules/webdriver-manager/selenium/IEDriverServer3.11.0.exe"],
},
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: [
'./features/*.feature'
],
cucumberOpts: {
require: ['./features/step_definitions/*.steps.js'],
tags: [],
strict: true,
dryRun: false,
compiler: []
},
onPrepare: function () {
browser.manage().window().maximize();
}
};
我用来启动网络服务器的命令是:
node_modules\.bin\webdriver-manager start --ie
我用来启动测试运行的命令是:
node_modules\.bin\protractor cucumber.config.js
软件版本信息:
npm: v5.5.1
节点:v8.9.1
量角器:v5.3.0
量角器黄瓜框架:v4.2.0
黄瓜-js:v4.0.0
JDK:9.0.4
JRE:9.0.4
node_modules\.bin\webdriver-manager status
[15:22:42] I/status - selenium standalone version available: 3.11.0 [last]
[15:22:42] I/status - chromedriver version available: 2.36 [last]
[15:22:42] I/status - geckodriver version available: v0.19.1 [last]
[15:22:42] I/status - IEDriverServer version available: 3.11.0 [last]
[15:22:42] I/status - android-sdk is not present
[15:22:42] I/status - appium is not present
截至 2018 年 3 月 20 日的新信息:
我在我的系统上尝试了以下技术堆栈:
- 量角器
- Jasmine 测试框架
- IE 11
- Windows 10
使用此设置,我可以执行 IE 11 测试。但是,当我在具有大致相同软件的同一台计算机上使用以下设置时,IE 11 测试将不起作用。将测试框架从 Jasmine 切换到 Cucumber 似乎是关键。我们想将 Cucumber 用于我们的 BDD 测试自动化程序。
- 量角器
- Cucumber 测试框架(通过 Cucumber 和 protractor-cucumber-framework)
- IE 11
- Windows 10
对于现在适用于 IE 11 的 Protractor / Jasmine 测试设置,以下代码文件构成了我的项目的基础:
package.json
{
"name": "protractorJasmineTest",
"version": "1.0.0",
"description": "Trial replication of locally installed variant the project",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "tbd"
},
"keywords": [],
"author": "user name",
"license": "ISC",
"dependencies": {
"protractor": "^5.3.0"
}
}
protractor.config.js
exports.config = {
jvmArgs: ['-Dwebdriver.ie.driver=.\node_modules\protractor\node_modules\webdriver-manager\selenium\IEDriverServer3.11.1.exe'],
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
multiCapabilities: [
{
browserName: 'internet explorer',
ignoreProtectedModeSettings: true,
version: 'ANY'
// ensureCleanSession : 'true'
// browserName: 'chrome'
}
],
specs: ['spec.js']
}
spec.js
describe('Protractor Demo App', function() {
it('should have a title', function() {
browser.manage().timeouts().pageLoadTimeout(30000);
browser.driver.get('https://angularjs.org');
expect(browser.driver.getTitle()).not.toEqual('Super Calculator');
});
});
【问题讨论】:
-
通常情况下,IE的webdriver环境设置比其他浏览器复杂,请阅读github.com/SeleniumHQ/selenium/wiki/…的一些提示
-
@yong :感谢您提供的一般信息。我已经查看了它,不幸的是我仍然没有我的测试和 IE11 的工作设置。我开始认为这种技术组合不适用于 IE11。
标签: javascript jasmine protractor cucumber internet-explorer-11