├── .circleci └── config.yml ├── .editorconfig ├── .gitignore ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── e2e ├── features │ └── search.feature ├── steps │ ├── app.po.ts │ └── search.steps.ts └── tsconfig.e2e.json ├── package.json ├── protractor.conf.js ├── renovate.json ├── reports └── .gitkeep ├── tsconfig.json └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # Javascript Node CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-javascript/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | # specify the version you desire here 10 | # - image: circleci/node:latest 11 | - image: angular/ngcontainer:latest@sha256:b4c755e59cef8656d43885fc70c8cbd91ec802a614eb08ecc96b4e9e3acd1efd 12 | 13 | working_directory: ~/repo 14 | 15 | steps: 16 | - checkout 17 | 18 | # Download and cache dependencies 19 | - restore_cache: 20 | keys: 21 | - v1-dependencies-{{ checksum "yarn.lock" }} 22 | 23 | - run: yarn install 24 | 25 | - save_cache: 26 | paths: 27 | - node_modules 28 | key: v1-dependencies-{{ checksum "yarn.lock" }} 29 | 30 | # run tests! 31 | - run: xvfb-run -a yarn ci:e2e 32 | 33 | # run deployments for git tags 34 | - deploy: 35 | name: Deploy Tag to npm registry 36 | command: | 37 | if [ "${CIRCLE_TAG}" ]; then 38 | npm pack . 39 | npm publish . 40 | fi 41 | 42 | # trigger builds for git tags 43 | # https://discuss.circleci.com/t/git-tag-deploys-in-2-0/9493/8 44 | deployment: 45 | trigger_tag: 46 | tag: /.*/ 47 | commands: 48 | - echo "make tags run in 2.0" 49 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | # Matches multiple files with brace expansion notation 13 | # Set default charset 14 | [*.{js,ts,json,md}] 15 | charset = utf-8 16 | indent_style = space 17 | indent_size = 2 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # Report files generated by cucumber 61 | reports/*.txt 62 | reports/*.json 63 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "type": "node", 6 | "request": "launch", 7 | "name": "Launch protractor", 8 | "program": "${workspaceRoot}/node_modules/.bin/protractor", 9 | "args": [ 10 | "--baseUrl", 11 | "https://angular.io" 12 | ] 13 | } 14 | ], 15 | "compounds": [] 16 | } 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 David Herges 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | APC: Angular, Protractor, Cucumber 2 | ================================== 3 | 4 | > Feature-driven end-to-end testing. 5 | 6 | [![CircleCI](https://circleci.com/gh/spektrakel-blog/angular-protractor-cucumber/tree/master.svg?style=svg)](https://circleci.com/gh/spektrakel-blog/angular-protractor-cucumber/tree/master) 7 | [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovateapp.com/) 8 | 9 | Demonstrates testing of an [Angular][1] app with [Protractor][2] and [Cucumber][3]. 10 | 11 | ```bash 12 | $ yarn e2e -- --baseUrl https://angular.io 13 | ``` 14 | 15 | 16 | 17 | #### Idea and tech stack 18 | 19 | Protractor is used as the primary testing framework. 20 | It launches a web browser and allows remote control of the web browser. 21 | 22 | Then, [cucumber is plugged-in to protractor][4] and [TypeScript][5] is added as `onPrepare` hook. 23 | Test specifications are written in `.feature` files, 24 | expressing each `Scenario` with the `Given`, `When`, `Then` keywords. 25 | 26 | ```gherkin 27 | Feature: Search 28 | As a developer using Angular 29 | I need to look-up classes and guidelines 30 | So that I can concentrate on building awesome applications 31 | 32 | Scenario: Type in a search-term 33 | Given I am on the angular.io site 34 | When I type "foo" into the search input field 35 | Then I should see some results in the search overlay 36 | ``` 37 | 38 | Scenarios are turned into automated browser actions in so-called step definitions. 39 | Step definitions are written in TypeScript and use protractor's API to control the browser. 40 | Basically, protractor's API is [an addition on top of selenium-webdriver][6] with specialized methods for handling Angular apps. 41 | When not using the Angular-specific additions, it is however to possible to test any other web app running in the browser. 42 | 43 | The actual step definition is: 44 | 45 | ```ts 46 | import { expect } from 'chai'; 47 | import { defineSupportCode } from 'cucumber'; 48 | import { AppPage } from './app.po'; 49 | 50 | defineSupportCode(({Given, When, Then, Before}) => { 51 | let app: AppPage; 52 | 53 | Before(() => { 54 | app = new AppPage(); 55 | }); 56 | 57 | Given('I am on the angular.io site', 58 | () => app.navigateTo()); 59 | 60 | When('I type "{term}" into the search input field', 61 | (text: string) => app.enterSearchInput(text)); 62 | 63 | Then('I should see some results in the search overlay', 64 | () => app.getSearchResultItems() 65 | .then(elems => { 66 | expect(elems.length).to.be.greaterThan(0); 67 | })); 68 | }); 69 | ``` 70 | 71 | For test assertions, [chai's expect/should API][7] is a good fit with cucumber. 72 | A `Then` clause expresses expected behaviour or an expected outcome of an operation, 73 | so a call to `expect()` is a fluent way of writing down such an expectation. 74 | 75 | Rather than automating the browser right from the step definitions, 76 | the testing code uses the [Page Object pattern](http://www.protractortest.org/#/page-objects). 77 | The advantage here is that CSS selectors or the DOM structure of the application may change. 78 | If we were scripting the browser straight out of the step definitions, 79 | we'd need to update every scenario and every step definition. 80 | With page objects, when the application changes, 81 | just the `AppPage` class needs to be updated to reflect the web app in a proper way: 82 | 83 | ```ts 84 | import { browser, by, element, until } from 'protractor'; 85 | 86 | export class AppPage { 87 | 88 | public navigateTo() { 89 | return browser.get('/'); 90 | } 91 | 92 | public enterSearchInput(text: string) { 93 | return element(by.css('input[aria-label="search"]')) 94 | .sendKeys(text); 95 | } 96 | 97 | public getSearchResultItems() { 98 | const condition = until.elementsLocated(by.css('.search-results .search-result-item')); 99 | 100 | return browser.wait(condition, 5000); 101 | } 102 | 103 | } 104 | ``` 105 | 106 | 107 | 108 | [1]: https://angular.io/ 109 | [2]: www.protractortest.org 110 | [3]: https://cucumber.io 111 | [4]: https://github.com/protractor-cucumber-framework/protractor-cucumber-framework 112 | [5]: http://www.typescriptlang.org/ 113 | [6]: https://www.npmjs.com/package/selenium-webdriver 114 | [7]: http://chaijs.com/api/bdd/ 115 | 116 | 117 | #### Further Reading 118 | 119 | Top 5 Cucumber best practices, The Codeship: 120 | 121 | [![Top 5 Cucumber best practices -- The Codeship](https://img.youtube.com/vi/prSSc4KYX0o/0.jpg)](https://youtu.be/prSSc4KYX0o) 122 | 123 | Protractor styleguide – Carmen Popoviciu and Andres Dominguez, AngularConnect 2015: 124 | 125 | [![Protractor styleguide, AngularConnect 2015](https://img.youtube.com/vi/-lTGnYwnEuM/0.jpg)](https://youtu.be/-lTGnYwnEuM) 126 | 127 | [Protractor Style Guide](http://www.protractortest.org/#/style-guide) 128 | 129 | [Debugging Protractor](http://www.protractortest.org/#/debugging) (pausing a browser, taking snapshots, and more...) 130 | 131 | [Protractor API](http://www.protractortest.org/#/api) 132 | 133 | 134 | 135 | #### Transcript 136 | 137 | Set Up: 138 | 139 | ```bash 140 | $ yarn add --dev protractor protractor-cucumber-framework cucumber typescript ts-node chai @types/chai @types/cucumber 141 | yarn add v0.27.5 142 | info No lockfile found. 143 | [1/4] Resolving packages... 144 | [2/4] Fetching packages... 145 | [3/4] Linking dependencies... 146 | [4/4] Building fresh packages... 147 | success Saved lockfile. 148 | success Saved 181 new dependencies. 149 | ├─ @types/chai@4.0.1 150 | ├─ @types/cucumber@2.0.1 151 | ├─ @types/node@6.0.85 152 | ├─ @types/q@0.0.32 153 | ├─ @types/selenium-webdriver@2.53.42 154 | ├─ adm-zip@0.4.7 155 | ├─ agent-base@2.1.1 156 | ├─ ajv@4.11.8 157 | ├─ ansi-regex@2.1.1 158 | ├─ ansi-styles@2.2.1 159 | ├─ any-promise@1.3.0 160 | ├─ array-union@1.0.2 161 | ├─ array-uniq@1.0.3 162 | ├─ arrify@1.0.1 163 | ├─ asn1@0.2.3 164 | ├─ assert-plus@1.0.0 165 | ├─ assertion-error-formatter@2.0.0 166 | ├─ assertion-error@1.0.2 167 | ├─ asynckit@0.4.0 168 | ├─ aws-sign2@0.6.0 169 | ├─ aws4@1.6.0 170 | ├─ babel-runtime@6.23.0 171 | ├─ balanced-match@1.0.0 172 | ├─ bcrypt-pbkdf@1.0.1 173 | ├─ blocking-proxy@0.0.5 174 | ├─ bluebird@3.5.0 175 | ├─ boom@2.10.1 176 | ├─ brace-expansion@1.1.8 177 | ├─ caseless@0.12.0 178 | ├─ chai@4.1.0 179 | ├─ chalk@1.1.3 180 | ├─ check-error@1.0.2 181 | ├─ cli-table@0.3.1 182 | ├─ co@4.6.0 183 | ├─ color-convert@1.9.0 184 | ├─ color-name@1.1.3 185 | ├─ colors@1.1.2 186 | ├─ combined-stream@1.0.5 187 | ├─ commander@2.11.0 188 | ├─ concat-map@0.0.1 189 | ├─ core-js@2.4.1 190 | ├─ core-util-is@1.0.2 191 | ├─ cryptiles@2.0.5 192 | ├─ cucumber-expressions@3.0.0 193 | ├─ cucumber-tag-expressions@1.0.1 194 | ├─ cucumber@2.3.1 195 | ├─ d@1.0.0 196 | ├─ dashdash@1.14.1 197 | ├─ debug@2.6.8 198 | ├─ deep-eql@2.0.2 199 | ├─ del@2.2.2 200 | ├─ delayed-stream@1.0.0 201 | ├─ diff@3.3.0 202 | ├─ duration@0.2.0 203 | ├─ ecc-jsbn@0.1.1 204 | ├─ error-stack-parser@2.0.1 205 | ├─ es5-ext@0.10.24 206 | ├─ es6-iterator@2.0.1 207 | ├─ es6-symbol@3.1.1 208 | ├─ escape-string-regexp@1.0.5 209 | ├─ exit@0.1.2 210 | ├─ extend@3.0.1 211 | ├─ extsprintf@1.0.2 212 | ├─ figures@2.0.0 213 | ├─ forever-agent@0.6.1 214 | ├─ form-data@2.1.4 215 | ├─ fs.realpath@1.0.0 216 | ├─ get-func-name@2.0.0 217 | ├─ getpass@0.1.7 218 | ├─ gherkin@4.1.3 219 | ├─ glob@7.1.2 220 | ├─ globby@5.0.0 221 | ├─ har-schema@1.0.5 222 | ├─ har-validator@4.2.1 223 | ├─ has-ansi@2.0.0 224 | ├─ has-flag@2.0.0 225 | ├─ hawk@3.1.3 226 | ├─ hoek@2.16.3 227 | ├─ http-signature@1.1.1 228 | ├─ https-proxy-agent@1.0.0 229 | ├─ indent-string@3.1.0 230 | ├─ inflight@1.0.6 231 | ├─ inherits@2.0.3 232 | ├─ ini@1.3.4 233 | ├─ is-generator@1.0.3 234 | ├─ is-path-cwd@1.0.0 235 | ├─ is-path-in-cwd@1.0.0 236 | ├─ is-path-inside@1.0.0 237 | ├─ is-stream@1.1.0 238 | ├─ is-typedarray@1.0.0 239 | ├─ isstream@0.1.2 240 | ├─ jasmine-core@2.6.4 241 | ├─ jasmine@2.6.0 242 | ├─ jasminewd2@2.1.0 243 | ├─ jsbn@0.1.1 244 | ├─ json-schema@0.2.3 245 | ├─ json-stable-stringify@1.0.1 246 | ├─ json-stringify-safe@5.0.1 247 | ├─ jsonify@0.0.0 248 | ├─ jsprim@1.4.0 249 | ├─ lodash@4.17.4 250 | ├─ make-error@1.3.0 251 | ├─ mime-db@1.27.0 252 | ├─ mime-types@2.1.15 253 | ├─ minimatch@3.0.4 254 | ├─ minimist@1.2.0 255 | ├─ mkdirp@0.5.1 256 | ├─ ms@2.0.0 257 | ├─ mz@2.6.0 258 | ├─ oauth-sign@0.8.2 259 | ├─ object-assign@4.1.1 260 | ├─ once@1.4.0 261 | ├─ optimist@0.6.1 262 | ├─ options@0.0.6 263 | ├─ os-tmpdir@1.0.2 264 | ├─ pad-right@0.2.2 265 | ├─ path-is-absolute@1.0.1 266 | ├─ path-is-inside@1.0.2 267 | ├─ path-parse@1.0.5 268 | ├─ pathval@1.1.0 269 | ├─ performance-now@0.2.0 270 | ├─ pify@2.3.0 271 | ├─ pinkie-promise@2.0.1 272 | ├─ pinkie@2.0.4 273 | ├─ progress@2.0.0 274 | ├─ protractor-cucumber-framework@3.1.2 275 | ├─ protractor@5.1.2 276 | ├─ punycode@1.4.1 277 | ├─ q@1.5.0 278 | ├─ qs@6.4.0 279 | ├─ regenerator-runtime@0.10.5 280 | ├─ repeat-string@1.6.1 281 | ├─ request@2.81.0 282 | ├─ resolve@1.3.3 283 | ├─ rimraf@2.6.1 284 | ├─ safe-buffer@5.1.1 285 | ├─ saucelabs@1.3.0 286 | ├─ sax@1.2.4 287 | ├─ selenium-webdriver@3.0.1 288 | ├─ semver@5.3.0 289 | ├─ sntp@1.0.9 290 | ├─ source-map-support@0.4.15 291 | ├─ source-map@0.5.6 292 | ├─ sshpk@1.13.1 293 | ├─ stack-chain@1.3.7 294 | ├─ stack-generator@2.0.1 295 | ├─ stackframe@1.0.3 296 | ├─ stacktrace-gps@3.0.1 297 | ├─ stacktrace-js@2.0.0 298 | ├─ string-argv@0.0.2 299 | ├─ stringstream@0.0.5 300 | ├─ strip-ansi@3.0.1 301 | ├─ strip-bom@3.0.0 302 | ├─ strip-json-comments@2.0.1 303 | ├─ supports-color@2.0.0 304 | ├─ thenify-all@1.6.0 305 | ├─ thenify@3.3.0 306 | ├─ tmp@0.0.30 307 | ├─ tough-cookie@2.3.2 308 | ├─ ts-node@3.2.1 309 | ├─ tsconfig@6.0.0 310 | ├─ tunnel-agent@0.6.0 311 | ├─ tweetnacl@0.14.5 312 | ├─ type-detect@4.0.3 313 | ├─ typescript@2.4.2 314 | ├─ ultron@1.0.2 315 | ├─ upper-case-first@1.1.2 316 | ├─ upper-case@1.1.3 317 | ├─ user-home@1.1.1 318 | ├─ util-arity@1.1.0 319 | ├─ uuid@3.1.0 320 | ├─ v8flags@3.0.0 321 | ├─ verror@1.10.0 322 | ├─ webdriver-js-extender@1.0.0 323 | ├─ webdriver-manager@12.0.6 324 | ├─ wordwrap@0.0.3 325 | ├─ wrappy@1.0.2 326 | ├─ ws@1.1.4 327 | ├─ xml2js@0.4.17 328 | ├─ xmlbuilder@4.2.1 329 | └─ yn@2.0.0 330 | Done in 14.16s. 331 | ``` 332 | 333 | Run the tests: 334 | 335 | ```bash 336 | $ yarn e2e -- --baseUrl https://angular.io 337 | yarn e2e v0.27.5 338 | $ webdriver-manager update 339 | webdriver-manager: using local installed version 12.0.6 340 | [17:59:46] I/update - chromedriver: file exists /Users/David/Projects/github/spektrakel-blog/angular-protractor-cucumber/node_modules/webdriver-manager/selenium/chromedriver_2.31.zip 341 | [17:59:46] I/update - chromedriver: unzipping chromedriver_2.31.zip 342 | [17:59:47] I/update - chromedriver: setting permissions to 0755 for /Users/David/Projects/github/spektrakel-blog/angular-protractor-cucumber/node_modules/webdriver-manager/selenium/chromedriver_2.31 343 | [17:59:47] I/update - chromedriver: chromedriver_2.31 up to date 344 | [17:59:47] I/update - selenium standalone: file exists /Users/David/Projects/github/spektrakel-blog/angular-protractor-cucumber/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.4.0.jar 345 | [17:59:47] I/update - selenium standalone: selenium-server-standalone-3.4.0.jar up to date 346 | [17:59:48] I/update - geckodriver: file exists /Users/David/Projects/github/spektrakel-blog/angular-protractor-cucumber/node_modules/webdriver-manager/selenium/geckodriver-v0.18.0.tar.gz 347 | [17:59:48] I/update - geckodriver: unzipping geckodriver-v0.18.0.tar.gz 348 | [17:59:48] I/update - geckodriver: setting permissions to 0755 for /Users/David/Projects/github/spektrakel-blog/angular-protractor-cucumber/node_modules/webdriver-manager/selenium/geckodriver-v0.18.0 349 | [17:59:48] I/update - geckodriver: geckodriver-v0.18.0 up to date 350 | $ protractor "--baseUrl" "https://angular.io" 351 | (node:57809) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead. 352 | [17:59:49] I/launcher - Running 1 instances of WebDriver 353 | [17:59:49] I/direct - Using ChromeDriver directly... 354 | Feature: Search 355 | 356 | As a developer using Angular 357 | I need to look-up classes and guidelines 358 | So that I can concentrate on building awesome applications 359 | 360 | Scenario: Type in a search-term 361 | ✔ Given I am on the angular.io site 362 | ✔ When I type "foo" into the search input field 363 | ✔ Then I should see some results in the search overlay 364 | 365 | 1 scenario (1 passed) 366 | 3 steps (3 passed) 367 | 0m07.073s 368 | [18:00:03] I/launcher - 0 instance(s) of WebDriver still running 369 | [18:00:03] I/launcher - chrome #01 passed 370 | Done in 19.48s. 371 | ``` 372 | -------------------------------------------------------------------------------- /e2e/features/search.feature: -------------------------------------------------------------------------------- 1 | Feature: Search 2 | As a developer using Angular 3 | I need to look-up classes and guidelines 4 | So that I can concentrate on building awesome applications 5 | 6 | Scenario: Type in a search-term 7 | Given I am on the angular.io site 8 | When I type "foo" into the search input field 9 | Then I should see some results in the search overlay 10 | -------------------------------------------------------------------------------- /e2e/steps/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element, until } from 'protractor'; 2 | 3 | export class AppPage { 4 | 5 | public navigateTo() { 6 | return browser.get('/'); 7 | } 8 | 9 | public enterSearchInput(text: string) { 10 | return element(by.css('input[aria-label="search"]')) 11 | .sendKeys(text); 12 | } 13 | 14 | public getSearchResultItems() { 15 | const condition = until.elementsLocated(by.css('.search-results .search-result-item')); 16 | 17 | return browser.wait(condition, 5000); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /e2e/steps/search.steps.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { defineSupportCode } from 'cucumber'; 3 | import { AppPage } from './app.po'; 4 | 5 | defineSupportCode(({Given, When, Then, Before}) => { 6 | let app: AppPage; 7 | 8 | Before(() => { 9 | app = new AppPage(); 10 | }); 11 | 12 | Given('I am on the angular.io site', 13 | () => app.navigateTo()); 14 | 15 | When('I type {string} into the search input field', 16 | (text: string) => app.enterSearchInput(text)); 17 | 18 | Then('I should see some results in the search overlay', 19 | () => app.getSearchResultItems() 20 | .then(elems => expect(elems.length).to.be.greaterThan(0))); 21 | 22 | }); 23 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types": [ 8 | "cucumber", 9 | "node", 10 | "selenium-webdriver" 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-protractor-cucumber", 3 | "version": "1.0.0", 4 | "description": "Feature-driven end-to-end-testing", 5 | "private": true, 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/spektrakel-blog/angular-protractor-cucumber" 9 | }, 10 | "author": "David Herges ", 11 | "license": "MIT", 12 | "devDependencies": { 13 | "@types/chai": "^4.0.1", 14 | "@types/cucumber": "^4.0.0", 15 | "chai": "^4.1.0", 16 | "cucumber": "^4.0.0", 17 | "protractor": "^5.1.2", 18 | "protractor-cucumber-framework": "^4.0.0", 19 | "ts-node": "^7.0.0", 20 | "typescript": "^2.4.2" 21 | }, 22 | "scripts": { 23 | "pree2e": "webdriver-manager update", 24 | "e2e": "protractor", 25 | "ci:e2e": "yarn e2e -- --baseUrl https://angular.io" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | 5 | exports.config = { 6 | allScriptsTimeout: 11000, 7 | capabilities: { 8 | browserName: 'chrome', 9 | chromeOptions: { 10 | args: ['--no-sandbox'] 11 | } 12 | }, 13 | directConnect: true, 14 | baseUrl: 'http://localhost:4200/', 15 | 16 | // Specs here are the cucumber feature files 17 | specs: [ 18 | './e2e/features/*.feature' 19 | ], 20 | 21 | // Use a custom framework adapter and set its relative path 22 | framework: 'custom', 23 | frameworkPath: require.resolve('protractor-cucumber-framework'), 24 | 25 | // cucumber command line options 26 | cucumberOpts: { 27 | // require step definition files before executing features 28 | require: ['./e2e/steps/**/*.ts'], 29 | // (expression) only execute the features or scenarios with tags matching the expression 30 | // tags: [], 31 | // fail if there are any undefined or pending steps 32 | strict: true, 33 | // (type[:path]) specify the output format, optionally supply PATH to redirect formatter output (repeatable) 34 | format: [ 35 | 'json:reports/summary.json' 36 | ], 37 | // invoke formatters without executing steps 38 | dryRun: false, 39 | // ("extension:module") require files with the given EXTENSION after requiring MODULE (repeatable) 40 | compiler: [] 41 | }, 42 | 43 | // Enable TypeScript for the tests 44 | onPrepare() { 45 | require('ts-node').register({ 46 | project: 'e2e/tsconfig.e2e.json' 47 | }); 48 | } 49 | }; 50 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "pinVersions": false, 3 | "semanticCommits": true, 4 | "semanticPrefix": "chore: ", 5 | "packages": [ 6 | { 7 | "packagePattern": "^@angular\/.*", 8 | "groupName": "angular", 9 | "pinVersions": false 10 | }, 11 | { 12 | "packagePattern": "^jasmine.*", 13 | "groupName": "jasmine", 14 | "pinVersions": false 15 | }, 16 | { 17 | "packagePattern": "^karma.*", 18 | "groupName": "karma", 19 | "pinVersions": false 20 | }, 21 | { 22 | "packagePattern": "^protractor.*", 23 | "groupName": "protractor", 24 | "pinVersions": false 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /reports/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sparkles-dev/angular-protractor-cucumber/8133a2d13d74d6abf33ca91e2a90aabb58ae4c03/reports/.gitkeep -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "outDir": "./dist/out-tsc", 5 | "baseUrl": "src", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "target": "es5", 12 | "typeRoots": [ 13 | "node_modules/@types" 14 | ], 15 | "lib": [ 16 | "es2016", 17 | "dom" 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/chai@^4.0.1": 6 | version "4.0.4" 7 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.4.tgz#fe86315d9a66827feeb16f73bc954688ec950e18" 8 | 9 | "@types/cucumber@^4.0.0": 10 | version "4.0.1" 11 | resolved "https://registry.yarnpkg.com/@types/cucumber/-/cucumber-4.0.1.tgz#3e588a3fa510af7ad3dbe753f1c9ea818e984f85" 12 | 13 | "@types/node@^6.0.46": 14 | version "6.0.90" 15 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.90.tgz#0ed74833fa1b73dcdb9409dcb1c97ec0a8b13b02" 16 | 17 | "@types/q@^0.0.32": 18 | version "0.0.32" 19 | resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" 20 | 21 | "@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39": 22 | version "2.53.42" 23 | resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac" 24 | 25 | adm-zip@0.4.4: 26 | version "0.4.4" 27 | resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" 28 | 29 | adm-zip@^0.4.7: 30 | version "0.4.7" 31 | resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" 32 | 33 | agent-base@2: 34 | version "2.1.1" 35 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" 36 | dependencies: 37 | extend "~3.0.0" 38 | semver "~5.0.1" 39 | 40 | ajv@^5.1.0: 41 | version "5.3.0" 42 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" 43 | dependencies: 44 | co "^4.6.0" 45 | fast-deep-equal "^1.0.0" 46 | fast-json-stable-stringify "^2.0.0" 47 | json-schema-traverse "^0.3.0" 48 | 49 | ansi-regex@^2.0.0: 50 | version "2.1.1" 51 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 52 | 53 | ansi-styles@^2.2.1: 54 | version "2.2.1" 55 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 56 | 57 | any-promise@^1.0.0: 58 | version "1.3.0" 59 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 60 | 61 | array-union@^1.0.1: 62 | version "1.0.2" 63 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 64 | dependencies: 65 | array-uniq "^1.0.1" 66 | 67 | array-uniq@^1.0.1: 68 | version "1.0.3" 69 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 70 | 71 | arrify@^1.0.0: 72 | version "1.0.1" 73 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 74 | 75 | asn1@~0.2.3: 76 | version "0.2.3" 77 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 78 | 79 | assert-plus@1.0.0, assert-plus@^1.0.0: 80 | version "1.0.0" 81 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 82 | 83 | assertion-error-formatter@^2.0.1: 84 | version "2.0.1" 85 | resolved "https://registry.yarnpkg.com/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz#6bbdffaec8e2fa9e2b0eb158bfe353132d7c0a9b" 86 | dependencies: 87 | diff "^3.0.0" 88 | pad-right "^0.2.2" 89 | repeat-string "^1.6.1" 90 | 91 | assertion-error@^1.0.1: 92 | version "1.0.2" 93 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" 94 | 95 | asynckit@^0.4.0: 96 | version "0.4.0" 97 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 98 | 99 | aws-sign2@~0.7.0: 100 | version "0.7.0" 101 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 102 | 103 | aws4@^1.6.0: 104 | version "1.6.0" 105 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 106 | 107 | babel-runtime@^6.11.6: 108 | version "6.26.0" 109 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 110 | dependencies: 111 | core-js "^2.4.0" 112 | regenerator-runtime "^0.11.0" 113 | 114 | balanced-match@^1.0.0: 115 | version "1.0.0" 116 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 117 | 118 | bcrypt-pbkdf@^1.0.0: 119 | version "1.0.1" 120 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 121 | dependencies: 122 | tweetnacl "^0.14.3" 123 | 124 | becke-ch--regex--s0-0-v1--base--pl--lib@^1.2.0: 125 | version "1.2.0" 126 | resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.2.0.tgz#2e73e9d21f2c2e6f5a5454045636f0ab93e46130" 127 | 128 | blocking-proxy@0.0.5: 129 | version "0.0.5" 130 | resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-0.0.5.tgz#462905e0dcfbea970f41aa37223dda9c07b1912b" 131 | dependencies: 132 | minimist "^1.2.0" 133 | 134 | bluebird@^3.4.1: 135 | version "3.5.1" 136 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 137 | 138 | boom@4.x.x: 139 | version "4.3.1" 140 | resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" 141 | dependencies: 142 | hoek "4.x.x" 143 | 144 | boom@5.x.x: 145 | version "5.2.0" 146 | resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" 147 | dependencies: 148 | hoek "4.x.x" 149 | 150 | brace-expansion@^1.1.7: 151 | version "1.1.8" 152 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 153 | dependencies: 154 | balanced-match "^1.0.0" 155 | concat-map "0.0.1" 156 | 157 | buffer-from@^1.0.0, buffer-from@^1.1.0: 158 | version "1.1.0" 159 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" 160 | 161 | caseless@~0.12.0: 162 | version "0.12.0" 163 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 164 | 165 | chai@^4.1.0: 166 | version "4.1.2" 167 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" 168 | dependencies: 169 | assertion-error "^1.0.1" 170 | check-error "^1.0.1" 171 | deep-eql "^3.0.0" 172 | get-func-name "^2.0.0" 173 | pathval "^1.0.0" 174 | type-detect "^4.0.0" 175 | 176 | chalk@^1.1.1, chalk@^1.1.3: 177 | version "1.1.3" 178 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 179 | dependencies: 180 | ansi-styles "^2.2.1" 181 | escape-string-regexp "^1.0.2" 182 | has-ansi "^2.0.0" 183 | strip-ansi "^3.0.0" 184 | supports-color "^2.0.0" 185 | 186 | check-error@^1.0.1: 187 | version "1.0.2" 188 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 189 | 190 | cli-table@^0.3.1: 191 | version "0.3.1" 192 | resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" 193 | dependencies: 194 | colors "1.0.3" 195 | 196 | co@^4.6.0: 197 | version "4.6.0" 198 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 199 | 200 | colors@1.0.3: 201 | version "1.0.3" 202 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" 203 | 204 | colors@^1.1.2: 205 | version "1.1.2" 206 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 207 | 208 | combined-stream@^1.0.5, combined-stream@~1.0.5: 209 | version "1.0.5" 210 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 211 | dependencies: 212 | delayed-stream "~1.0.0" 213 | 214 | commander@^2.9.0: 215 | version "2.11.0" 216 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 217 | 218 | concat-map@0.0.1: 219 | version "0.0.1" 220 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 221 | 222 | core-js@^2.4.0: 223 | version "2.5.1" 224 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" 225 | 226 | core-js@~2.3.0: 227 | version "2.3.0" 228 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65" 229 | 230 | core-util-is@1.0.2, core-util-is@~1.0.0: 231 | version "1.0.2" 232 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 233 | 234 | cryptiles@3.x.x: 235 | version "3.1.2" 236 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" 237 | dependencies: 238 | boom "5.x.x" 239 | 240 | cucumber-expressions@^5.0.7: 241 | version "5.0.13" 242 | resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-5.0.13.tgz#f174597dae6d2f0121294ac2ea65443249cf1587" 243 | dependencies: 244 | becke-ch--regex--s0-0-v1--base--pl--lib "^1.2.0" 245 | 246 | cucumber-tag-expressions@^1.1.1: 247 | version "1.1.1" 248 | resolved "https://registry.yarnpkg.com/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz#7f5c7b70009bc2b666591bfe64854578bedee85a" 249 | 250 | cucumber@^4.0.0: 251 | version "4.0.0" 252 | resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-4.0.0.tgz#09f078b852d817c8f818737d0dcc34d40f31534f" 253 | dependencies: 254 | assertion-error-formatter "^2.0.1" 255 | babel-runtime "^6.11.6" 256 | bluebird "^3.4.1" 257 | cli-table "^0.3.1" 258 | colors "^1.1.2" 259 | commander "^2.9.0" 260 | cucumber-expressions "^5.0.7" 261 | cucumber-tag-expressions "^1.1.1" 262 | duration "^0.2.0" 263 | escape-string-regexp "^1.0.5" 264 | figures "2.0.0" 265 | gherkin "^5.0.0" 266 | glob "^7.0.0" 267 | indent-string "^3.1.0" 268 | is-generator "^1.0.2" 269 | is-stream "^1.1.0" 270 | lodash "^4.17.4" 271 | mz "^2.4.0" 272 | progress "^2.0.0" 273 | resolve "^1.3.3" 274 | stack-chain "^2.0.0" 275 | stacktrace-js "^2.0.0" 276 | string-argv "0.0.2" 277 | title-case "^2.1.1" 278 | util-arity "^1.0.2" 279 | verror "^1.9.0" 280 | 281 | d@1: 282 | version "1.0.0" 283 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 284 | dependencies: 285 | es5-ext "^0.10.9" 286 | 287 | d@~0.1.1: 288 | version "0.1.1" 289 | resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" 290 | dependencies: 291 | es5-ext "~0.10.2" 292 | 293 | dashdash@^1.12.0: 294 | version "1.14.1" 295 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 296 | dependencies: 297 | assert-plus "^1.0.0" 298 | 299 | debug@2: 300 | version "2.6.9" 301 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 302 | dependencies: 303 | ms "2.0.0" 304 | 305 | debug@^3.1.0: 306 | version "3.1.0" 307 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 308 | dependencies: 309 | ms "2.0.0" 310 | 311 | deep-eql@^3.0.0: 312 | version "3.0.1" 313 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 314 | dependencies: 315 | type-detect "^4.0.0" 316 | 317 | del@^2.2.0: 318 | version "2.2.2" 319 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 320 | dependencies: 321 | globby "^5.0.0" 322 | is-path-cwd "^1.0.0" 323 | is-path-in-cwd "^1.0.0" 324 | object-assign "^4.0.1" 325 | pify "^2.0.0" 326 | pinkie-promise "^2.0.0" 327 | rimraf "^2.2.8" 328 | 329 | delayed-stream@~1.0.0: 330 | version "1.0.0" 331 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 332 | 333 | diff@^3.0.0, diff@^3.1.0: 334 | version "3.4.0" 335 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" 336 | 337 | duration@^0.2.0: 338 | version "0.2.0" 339 | resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.0.tgz#5f9c4dfaafff655de986112efe25c5978dd85146" 340 | dependencies: 341 | d "~0.1.1" 342 | es5-ext "~0.10.2" 343 | 344 | ecc-jsbn@~0.1.1: 345 | version "0.1.1" 346 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 347 | dependencies: 348 | jsbn "~0.1.0" 349 | 350 | error-stack-parser@^2.0.1: 351 | version "2.0.1" 352 | resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.1.tgz#a3202b8fb03114aa9b40a0e3669e48b2b65a010a" 353 | dependencies: 354 | stackframe "^1.0.3" 355 | 356 | es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: 357 | version "0.10.35" 358 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" 359 | dependencies: 360 | es6-iterator "~2.0.1" 361 | es6-symbol "~3.1.1" 362 | 363 | es6-iterator@~2.0.1: 364 | version "2.0.3" 365 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 366 | dependencies: 367 | d "1" 368 | es5-ext "^0.10.35" 369 | es6-symbol "^3.1.1" 370 | 371 | es6-promise@~3.0.2: 372 | version "3.0.2" 373 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" 374 | 375 | es6-symbol@^3.1.1, es6-symbol@~3.1.1: 376 | version "3.1.1" 377 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 378 | dependencies: 379 | d "1" 380 | es5-ext "~0.10.14" 381 | 382 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 383 | version "1.0.5" 384 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 385 | 386 | exit@^0.1.2: 387 | version "0.1.2" 388 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 389 | 390 | extend@3, extend@~3.0.0, extend@~3.0.1: 391 | version "3.0.1" 392 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 393 | 394 | extsprintf@1.3.0, extsprintf@^1.2.0: 395 | version "1.3.0" 396 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 397 | 398 | fast-deep-equal@^1.0.0: 399 | version "1.0.0" 400 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 401 | 402 | fast-json-stable-stringify@^2.0.0: 403 | version "2.0.0" 404 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 405 | 406 | figures@2.0.0: 407 | version "2.0.0" 408 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 409 | dependencies: 410 | escape-string-regexp "^1.0.5" 411 | 412 | forever-agent@~0.6.1: 413 | version "0.6.1" 414 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 415 | 416 | form-data@~2.3.1: 417 | version "2.3.1" 418 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" 419 | dependencies: 420 | asynckit "^0.4.0" 421 | combined-stream "^1.0.5" 422 | mime-types "^2.1.12" 423 | 424 | fs.realpath@^1.0.0: 425 | version "1.0.0" 426 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 427 | 428 | get-func-name@^2.0.0: 429 | version "2.0.0" 430 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 431 | 432 | getpass@^0.1.1: 433 | version "0.1.7" 434 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 435 | dependencies: 436 | assert-plus "^1.0.0" 437 | 438 | gherkin@^5.0.0: 439 | version "5.0.1" 440 | resolved "https://registry.yarnpkg.com/gherkin/-/gherkin-5.0.1.tgz#9e42816cd188ceefd2cc72d564ebe2cffbdfb9dc" 441 | 442 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: 443 | version "7.1.2" 444 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 445 | dependencies: 446 | fs.realpath "^1.0.0" 447 | inflight "^1.0.4" 448 | inherits "2" 449 | minimatch "^3.0.4" 450 | once "^1.3.0" 451 | path-is-absolute "^1.0.0" 452 | 453 | globby@^5.0.0: 454 | version "5.0.0" 455 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 456 | dependencies: 457 | array-union "^1.0.1" 458 | arrify "^1.0.0" 459 | glob "^7.0.3" 460 | object-assign "^4.0.1" 461 | pify "^2.0.0" 462 | pinkie-promise "^2.0.0" 463 | 464 | har-schema@^2.0.0: 465 | version "2.0.0" 466 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 467 | 468 | har-validator@~5.0.3: 469 | version "5.0.3" 470 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 471 | dependencies: 472 | ajv "^5.1.0" 473 | har-schema "^2.0.0" 474 | 475 | has-ansi@^2.0.0: 476 | version "2.0.0" 477 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 478 | dependencies: 479 | ansi-regex "^2.0.0" 480 | 481 | hawk@~6.0.2: 482 | version "6.0.2" 483 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" 484 | dependencies: 485 | boom "4.x.x" 486 | cryptiles "3.x.x" 487 | hoek "4.x.x" 488 | sntp "2.x.x" 489 | 490 | hoek@4.x.x: 491 | version "4.2.0" 492 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" 493 | 494 | http-signature@~1.2.0: 495 | version "1.2.0" 496 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 497 | dependencies: 498 | assert-plus "^1.0.0" 499 | jsprim "^1.2.2" 500 | sshpk "^1.7.0" 501 | 502 | https-proxy-agent@^1.0.0: 503 | version "1.0.0" 504 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" 505 | dependencies: 506 | agent-base "2" 507 | debug "2" 508 | extend "3" 509 | 510 | immediate@~3.0.5: 511 | version "3.0.6" 512 | resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" 513 | 514 | indent-string@^3.1.0: 515 | version "3.2.0" 516 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 517 | 518 | inflight@^1.0.4: 519 | version "1.0.6" 520 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 521 | dependencies: 522 | once "^1.3.0" 523 | wrappy "1" 524 | 525 | inherits@2, inherits@~2.0.1: 526 | version "2.0.3" 527 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 528 | 529 | ini@^1.3.4: 530 | version "1.3.4" 531 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 532 | 533 | is-generator@^1.0.2: 534 | version "1.0.3" 535 | resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" 536 | 537 | is-path-cwd@^1.0.0: 538 | version "1.0.0" 539 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 540 | 541 | is-path-in-cwd@^1.0.0: 542 | version "1.0.0" 543 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 544 | dependencies: 545 | is-path-inside "^1.0.0" 546 | 547 | is-path-inside@^1.0.0: 548 | version "1.0.0" 549 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 550 | dependencies: 551 | path-is-inside "^1.0.1" 552 | 553 | is-stream@^1.1.0: 554 | version "1.1.0" 555 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 556 | 557 | is-typedarray@~1.0.0: 558 | version "1.0.0" 559 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 560 | 561 | isarray@~1.0.0: 562 | version "1.0.0" 563 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 564 | 565 | isstream@~0.1.2: 566 | version "0.1.2" 567 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 568 | 569 | jasmine-core@~2.8.0: 570 | version "2.8.0" 571 | resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" 572 | 573 | jasmine@^2.5.3: 574 | version "2.8.0" 575 | resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" 576 | dependencies: 577 | exit "^0.1.2" 578 | glob "^7.0.6" 579 | jasmine-core "~2.8.0" 580 | 581 | jasminewd2@^2.1.0: 582 | version "2.2.0" 583 | resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" 584 | 585 | jsbn@~0.1.0: 586 | version "0.1.1" 587 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 588 | 589 | json-schema-traverse@^0.3.0: 590 | version "0.3.1" 591 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 592 | 593 | json-schema@0.2.3: 594 | version "0.2.3" 595 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 596 | 597 | json-stringify-safe@~5.0.1: 598 | version "5.0.1" 599 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 600 | 601 | jsprim@^1.2.2: 602 | version "1.4.1" 603 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 604 | dependencies: 605 | assert-plus "1.0.0" 606 | extsprintf "1.3.0" 607 | json-schema "0.2.3" 608 | verror "1.10.0" 609 | 610 | jszip@^3.1.3: 611 | version "3.1.4" 612 | resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.4.tgz#fc323fe41bb1730348d20dd022aa4d8b57cbbcf9" 613 | dependencies: 614 | core-js "~2.3.0" 615 | es6-promise "~3.0.2" 616 | lie "~3.1.0" 617 | pako "~1.0.2" 618 | readable-stream "~2.0.6" 619 | 620 | lie@~3.1.0: 621 | version "3.1.1" 622 | resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" 623 | dependencies: 624 | immediate "~3.0.5" 625 | 626 | lodash@^4.17.4: 627 | version "4.17.5" 628 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" 629 | 630 | lower-case@^1.1.1: 631 | version "1.1.4" 632 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" 633 | 634 | make-error@^1.1.1: 635 | version "1.3.0" 636 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" 637 | 638 | mime-db@~1.30.0: 639 | version "1.30.0" 640 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 641 | 642 | mime-types@^2.1.12, mime-types@~2.1.17: 643 | version "2.1.17" 644 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 645 | dependencies: 646 | mime-db "~1.30.0" 647 | 648 | minimatch@^3.0.4: 649 | version "3.0.4" 650 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 651 | dependencies: 652 | brace-expansion "^1.1.7" 653 | 654 | minimist@0.0.8: 655 | version "0.0.8" 656 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 657 | 658 | minimist@^1.2.0: 659 | version "1.2.0" 660 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 661 | 662 | minimist@~0.0.1: 663 | version "0.0.10" 664 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 665 | 666 | mkdirp@^0.5.1: 667 | version "0.5.1" 668 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 669 | dependencies: 670 | minimist "0.0.8" 671 | 672 | ms@2.0.0: 673 | version "2.0.0" 674 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 675 | 676 | mz@^2.4.0: 677 | version "2.7.0" 678 | resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" 679 | dependencies: 680 | any-promise "^1.0.0" 681 | object-assign "^4.0.1" 682 | thenify-all "^1.0.0" 683 | 684 | no-case@^2.2.0: 685 | version "2.3.2" 686 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" 687 | dependencies: 688 | lower-case "^1.1.1" 689 | 690 | oauth-sign@~0.8.2: 691 | version "0.8.2" 692 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 693 | 694 | object-assign@^4.0.1: 695 | version "4.1.1" 696 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 697 | 698 | once@^1.3.0: 699 | version "1.4.0" 700 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 701 | dependencies: 702 | wrappy "1" 703 | 704 | optimist@~0.6.0: 705 | version "0.6.1" 706 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 707 | dependencies: 708 | minimist "~0.0.1" 709 | wordwrap "~0.0.2" 710 | 711 | options@>=0.0.5: 712 | version "0.0.6" 713 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 714 | 715 | os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: 716 | version "1.0.2" 717 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 718 | 719 | pad-right@^0.2.2: 720 | version "0.2.2" 721 | resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" 722 | dependencies: 723 | repeat-string "^1.5.2" 724 | 725 | pako@~1.0.2: 726 | version "1.0.6" 727 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" 728 | 729 | path-is-absolute@^1.0.0: 730 | version "1.0.1" 731 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 732 | 733 | path-is-inside@^1.0.1: 734 | version "1.0.2" 735 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 736 | 737 | path-parse@^1.0.5: 738 | version "1.0.5" 739 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 740 | 741 | pathval@^1.0.0: 742 | version "1.1.0" 743 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 744 | 745 | performance-now@^2.1.0: 746 | version "2.1.0" 747 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 748 | 749 | pify@^2.0.0: 750 | version "2.3.0" 751 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 752 | 753 | pinkie-promise@^2.0.0: 754 | version "2.0.1" 755 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 756 | dependencies: 757 | pinkie "^2.0.0" 758 | 759 | pinkie@^2.0.0: 760 | version "2.0.4" 761 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 762 | 763 | process-nextick-args@~1.0.6: 764 | version "1.0.7" 765 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 766 | 767 | progress@^2.0.0: 768 | version "2.0.0" 769 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" 770 | 771 | protractor-cucumber-framework@^4.0.0: 772 | version "4.1.1" 773 | resolved "https://registry.yarnpkg.com/protractor-cucumber-framework/-/protractor-cucumber-framework-4.1.1.tgz#c77e197b99c8c212754665aabbdd81991e85305a" 774 | dependencies: 775 | debug "^3.1.0" 776 | glob "^7.0.3" 777 | q "^1.4.1" 778 | tmp "^0.0.33" 779 | 780 | protractor@^5.1.2: 781 | version "5.2.0" 782 | resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.2.0.tgz#d3f39b195e85f3539ad9d8cb6560a9d2b63297c4" 783 | dependencies: 784 | "@types/node" "^6.0.46" 785 | "@types/q" "^0.0.32" 786 | "@types/selenium-webdriver" "~2.53.39" 787 | blocking-proxy "0.0.5" 788 | chalk "^1.1.3" 789 | glob "^7.0.3" 790 | jasmine "^2.5.3" 791 | jasminewd2 "^2.1.0" 792 | optimist "~0.6.0" 793 | q "1.4.1" 794 | saucelabs "~1.3.0" 795 | selenium-webdriver "3.6.0" 796 | source-map-support "~0.4.0" 797 | webdriver-js-extender "^1.0.0" 798 | webdriver-manager "^12.0.6" 799 | 800 | punycode@^1.4.1: 801 | version "1.4.1" 802 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 803 | 804 | q@1.4.1: 805 | version "1.4.1" 806 | resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" 807 | 808 | q@^1.4.1: 809 | version "1.5.1" 810 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" 811 | 812 | qs@~6.5.1: 813 | version "6.5.1" 814 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 815 | 816 | readable-stream@~2.0.6: 817 | version "2.0.6" 818 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 819 | dependencies: 820 | core-util-is "~1.0.0" 821 | inherits "~2.0.1" 822 | isarray "~1.0.0" 823 | process-nextick-args "~1.0.6" 824 | string_decoder "~0.10.x" 825 | util-deprecate "~1.0.1" 826 | 827 | regenerator-runtime@^0.11.0: 828 | version "0.11.0" 829 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" 830 | 831 | repeat-string@^1.5.2, repeat-string@^1.6.1: 832 | version "1.6.1" 833 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 834 | 835 | request@^2.78.0: 836 | version "2.83.0" 837 | resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" 838 | dependencies: 839 | aws-sign2 "~0.7.0" 840 | aws4 "^1.6.0" 841 | caseless "~0.12.0" 842 | combined-stream "~1.0.5" 843 | extend "~3.0.1" 844 | forever-agent "~0.6.1" 845 | form-data "~2.3.1" 846 | har-validator "~5.0.3" 847 | hawk "~6.0.2" 848 | http-signature "~1.2.0" 849 | is-typedarray "~1.0.0" 850 | isstream "~0.1.2" 851 | json-stringify-safe "~5.0.1" 852 | mime-types "~2.1.17" 853 | oauth-sign "~0.8.2" 854 | performance-now "^2.1.0" 855 | qs "~6.5.1" 856 | safe-buffer "^5.1.1" 857 | stringstream "~0.0.5" 858 | tough-cookie "~2.3.3" 859 | tunnel-agent "^0.6.0" 860 | uuid "^3.1.0" 861 | 862 | resolve@^1.3.3: 863 | version "1.5.0" 864 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" 865 | dependencies: 866 | path-parse "^1.0.5" 867 | 868 | rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4: 869 | version "2.6.2" 870 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 871 | dependencies: 872 | glob "^7.0.5" 873 | 874 | safe-buffer@^5.0.1, safe-buffer@^5.1.1: 875 | version "5.1.1" 876 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 877 | 878 | saucelabs@~1.3.0: 879 | version "1.3.0" 880 | resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee" 881 | dependencies: 882 | https-proxy-agent "^1.0.0" 883 | 884 | sax@0.6.x: 885 | version "0.6.1" 886 | resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" 887 | 888 | sax@>=0.6.0: 889 | version "1.2.4" 890 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 891 | 892 | selenium-webdriver@3.6.0: 893 | version "3.6.0" 894 | resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" 895 | dependencies: 896 | jszip "^3.1.3" 897 | rimraf "^2.5.4" 898 | tmp "0.0.30" 899 | xml2js "^0.4.17" 900 | 901 | selenium-webdriver@^2.53.2: 902 | version "2.53.3" 903 | resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085" 904 | dependencies: 905 | adm-zip "0.4.4" 906 | rimraf "^2.2.8" 907 | tmp "0.0.24" 908 | ws "^1.0.1" 909 | xml2js "0.4.4" 910 | 911 | semver@^5.3.0: 912 | version "5.4.1" 913 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 914 | 915 | semver@~5.0.1: 916 | version "5.0.3" 917 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" 918 | 919 | sntp@2.x.x: 920 | version "2.1.0" 921 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" 922 | dependencies: 923 | hoek "4.x.x" 924 | 925 | source-map-support@^0.5.6: 926 | version "0.5.6" 927 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" 928 | dependencies: 929 | buffer-from "^1.0.0" 930 | source-map "^0.6.0" 931 | 932 | source-map-support@~0.4.0: 933 | version "0.4.18" 934 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 935 | dependencies: 936 | source-map "^0.5.6" 937 | 938 | source-map@0.5.6: 939 | version "0.5.6" 940 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 941 | 942 | source-map@^0.5.6: 943 | version "0.5.7" 944 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 945 | 946 | source-map@^0.6.0: 947 | version "0.6.1" 948 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 949 | 950 | sshpk@^1.7.0: 951 | version "1.13.1" 952 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 953 | dependencies: 954 | asn1 "~0.2.3" 955 | assert-plus "^1.0.0" 956 | dashdash "^1.12.0" 957 | getpass "^0.1.1" 958 | optionalDependencies: 959 | bcrypt-pbkdf "^1.0.0" 960 | ecc-jsbn "~0.1.1" 961 | jsbn "~0.1.0" 962 | tweetnacl "~0.14.0" 963 | 964 | stack-chain@^2.0.0: 965 | version "2.0.0" 966 | resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-2.0.0.tgz#d73d1172af89565f07438b5bcc086831b6689b2d" 967 | 968 | stack-generator@^2.0.1: 969 | version "2.0.2" 970 | resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.2.tgz#3c13d952a596ab9318fec0669d0a1df8b87176c7" 971 | dependencies: 972 | stackframe "^1.0.4" 973 | 974 | stackframe@^1.0.3, stackframe@^1.0.4: 975 | version "1.0.4" 976 | resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" 977 | 978 | stacktrace-gps@^3.0.1: 979 | version "3.0.2" 980 | resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz#33f8baa4467323ab2bd1816efa279942ba431ccc" 981 | dependencies: 982 | source-map "0.5.6" 983 | stackframe "^1.0.4" 984 | 985 | stacktrace-js@^2.0.0: 986 | version "2.0.0" 987 | resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.0.tgz#776ca646a95bc6c6b2b90776536a7fc72c6ddb58" 988 | dependencies: 989 | error-stack-parser "^2.0.1" 990 | stack-generator "^2.0.1" 991 | stacktrace-gps "^3.0.1" 992 | 993 | string-argv@0.0.2: 994 | version "0.0.2" 995 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" 996 | 997 | string_decoder@~0.10.x: 998 | version "0.10.31" 999 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1000 | 1001 | stringstream@~0.0.5: 1002 | version "0.0.5" 1003 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1004 | 1005 | strip-ansi@^3.0.0: 1006 | version "3.0.1" 1007 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1008 | dependencies: 1009 | ansi-regex "^2.0.0" 1010 | 1011 | supports-color@^2.0.0: 1012 | version "2.0.0" 1013 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1014 | 1015 | thenify-all@^1.0.0: 1016 | version "1.6.0" 1017 | resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" 1018 | dependencies: 1019 | thenify ">= 3.1.0 < 4" 1020 | 1021 | "thenify@>= 3.1.0 < 4": 1022 | version "3.3.0" 1023 | resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" 1024 | dependencies: 1025 | any-promise "^1.0.0" 1026 | 1027 | title-case@^2.1.1: 1028 | version "2.1.1" 1029 | resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" 1030 | dependencies: 1031 | no-case "^2.2.0" 1032 | upper-case "^1.0.3" 1033 | 1034 | tmp@0.0.24: 1035 | version "0.0.24" 1036 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" 1037 | 1038 | tmp@0.0.30: 1039 | version "0.0.30" 1040 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" 1041 | dependencies: 1042 | os-tmpdir "~1.0.1" 1043 | 1044 | tmp@^0.0.33: 1045 | version "0.0.33" 1046 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1047 | dependencies: 1048 | os-tmpdir "~1.0.2" 1049 | 1050 | tough-cookie@~2.3.3: 1051 | version "2.3.3" 1052 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 1053 | dependencies: 1054 | punycode "^1.4.1" 1055 | 1056 | ts-node@^7.0.0: 1057 | version "7.0.0" 1058 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.0.tgz#a94a13c75e5e1aa6b82814b84c68deb339ba7bff" 1059 | dependencies: 1060 | arrify "^1.0.0" 1061 | buffer-from "^1.1.0" 1062 | diff "^3.1.0" 1063 | make-error "^1.1.1" 1064 | minimist "^1.2.0" 1065 | mkdirp "^0.5.1" 1066 | source-map-support "^0.5.6" 1067 | yn "^2.0.0" 1068 | 1069 | tunnel-agent@^0.6.0: 1070 | version "0.6.0" 1071 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1072 | dependencies: 1073 | safe-buffer "^5.0.1" 1074 | 1075 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1076 | version "0.14.5" 1077 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1078 | 1079 | type-detect@^4.0.0: 1080 | version "4.0.3" 1081 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" 1082 | 1083 | typescript@^2.4.2: 1084 | version "2.5.3" 1085 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.3.tgz#df3dcdc38f3beb800d4bc322646b04a3f6ca7f0d" 1086 | 1087 | ultron@1.0.x: 1088 | version "1.0.2" 1089 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 1090 | 1091 | upper-case@^1.0.3: 1092 | version "1.1.3" 1093 | resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" 1094 | 1095 | util-arity@^1.0.2: 1096 | version "1.1.0" 1097 | resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330" 1098 | 1099 | util-deprecate@~1.0.1: 1100 | version "1.0.2" 1101 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1102 | 1103 | uuid@^3.1.0: 1104 | version "3.1.0" 1105 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 1106 | 1107 | verror@1.10.0, verror@^1.9.0: 1108 | version "1.10.0" 1109 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1110 | dependencies: 1111 | assert-plus "^1.0.0" 1112 | core-util-is "1.0.2" 1113 | extsprintf "^1.2.0" 1114 | 1115 | webdriver-js-extender@^1.0.0: 1116 | version "1.0.0" 1117 | resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515" 1118 | dependencies: 1119 | "@types/selenium-webdriver" "^2.53.35" 1120 | selenium-webdriver "^2.53.2" 1121 | 1122 | webdriver-manager@^12.0.6: 1123 | version "12.0.6" 1124 | resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.6.tgz#3df1a481977010b4cbf8c9d85c7a577828c0e70b" 1125 | dependencies: 1126 | adm-zip "^0.4.7" 1127 | chalk "^1.1.1" 1128 | del "^2.2.0" 1129 | glob "^7.0.3" 1130 | ini "^1.3.4" 1131 | minimist "^1.2.0" 1132 | q "^1.4.1" 1133 | request "^2.78.0" 1134 | rimraf "^2.5.2" 1135 | semver "^5.3.0" 1136 | xml2js "^0.4.17" 1137 | 1138 | wordwrap@~0.0.2: 1139 | version "0.0.3" 1140 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1141 | 1142 | wrappy@1: 1143 | version "1.0.2" 1144 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1145 | 1146 | ws@^1.0.1: 1147 | version "1.1.4" 1148 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" 1149 | dependencies: 1150 | options ">=0.0.5" 1151 | ultron "1.0.x" 1152 | 1153 | xml2js@0.4.4: 1154 | version "0.4.4" 1155 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d" 1156 | dependencies: 1157 | sax "0.6.x" 1158 | xmlbuilder ">=1.0.0" 1159 | 1160 | xml2js@^0.4.17: 1161 | version "0.4.19" 1162 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" 1163 | dependencies: 1164 | sax ">=0.6.0" 1165 | xmlbuilder "~9.0.1" 1166 | 1167 | xmlbuilder@>=1.0.0, xmlbuilder@~9.0.1: 1168 | version "9.0.4" 1169 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" 1170 | 1171 | yn@^2.0.0: 1172 | version "2.0.0" 1173 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1174 | --------------------------------------------------------------------------------