All Versions
Latest Version
Avg Release Cycle
136 days
Latest Release
1430 days ago

Changelog History
Page 5

  • v3.0.0 Changes

    ๐Ÿšš We're releasing version 3.0 with some breaking changes. In summary - Jasmine 1.3 is removed, only Jasmine 2 is now supported, old Node.JS support is dropped, and plugins now need to be explicitly required. Full details below.

    โฌ†๏ธ Dependency Version Upgrades

    • (18e1f71) chore(webdriver): upgrade Protractor to webdriver 2.48.2

    • (1f44a6e) chore(deps): bump chromedriver and iedriver versions IEDriver from 2.47.0 to 2.48.0

    ChromeDriver from 2.19 to 2.20. Changelog:

    ๐Ÿ”‹ Features

    • (97e6703) feat(protractor): Add protractor.prototype.restart

    • (2007f06) feat(protractor): add flag to stop protractor from tracking $timeout

    • (a40a4ba) feat(ElementArrayFinder#get): Implemented ability to pass promise as index to ElementArrayFinder#get

    • (a54c0e0) feat(plugins): Add config option to disable logging of warnings in console plugin

    Running tests in multiple browsers ends up printing out a lot of useless warnings I'm already aware of. To make skimming through logs in the case of an actual failure easier, I want to be able to disable the logging of warnings in the console plugin.

    • (7015010) feat(driver providers): Add BrowserStack support.

    Also added BrowserStack to CI

    ๐Ÿ› Bug Fixes

    • (7cba4ec) fix(ng-repeat): properly detect the end of an ng-repeat-start block

    Discovered while investigating issue #2365

    ๐Ÿ’ฅ Breaking Changes

    • (2bde92b) chore(jasmine): remove jasmine 1.3

    and update docs. Also, use jasmine 2 for running all Protractor's unit tests.

    BREAKING CHANGE: Now, both jasmine and jasmine2 frameworks use jasmine 2.3. Users still using jasmine version <2 will have to upgrade.

    • (18e1f71) chore(webdriver): upgrade Protractor to webdriver 2.48.2

    BREAKING CHANGE: 1) Users will no longer be able to use node versions <4. 2) There is significant changes to the control flow, and tests may need to be modified to be compliant with the new control flow. See

    • (ac1e21e) chore(plugins): Split first party plugins into seperate repos


    The Accessibility, NgHint, Timeline, and Console plugins are now located in their own separate node modules. You will need to explicitly require each module you use. See for info for each module.

    • (ddb8584) chore(cucumber): Remove cucumber from internal implementation


    Cucumber has been community maintained for a while, and in order to allow it to move faster, it is no longer part of the core Protractor library. It is now published on npm under protractor-cucumber-framework and will require setting frameworkPath in your configuration file. See for full instructions on use now.

  • v2.5.1 Changes

    ๐Ÿš‘ This release is a hotfix for node 0.10 support

    • (039ffa7) fix(configParser): Remove path.parse so protractor works with node < v0.12

    Closes #2588

  • v2.5.0 Changes

    ๐Ÿš‘ This release contains a hotfix for windows path issues and early support for Angular2 apps

    ๐Ÿ”‹ Features

    • (c5d37c2) feat(lib): add useAllAngularAppRoots option

    This allows waiting for all angular applications on the page, for angular2 apps only.

    • (f246880) feat(lib): add support for waiting for angular2

    Use Angular2's testability API, if present, when waiting for stability or loading a page.

    Closes #2396

    ๐Ÿ› Bug Fixes

    • (d6aebba) fix(config): Fixes absolute path parsing in windows

    This allows absolute paths absolute paths in to be properly parsed in windows. This should maintain the line-number feature introduced in ff88e without breakage.

    • (04e5bfb) chore(runner): make plugins optional param for createBrowser
  • v2.4.0 Changes

    ๐Ÿš€ This release contains only a version update to selenium-webdriver, webdriver javascript bindings, and associated bug fixes.

    โฌ†๏ธ Dependency Version Upgrades

    • (9a202ab) chore(dependencies): update selenium-webdriver to 2.47.0

    Along with it, update jasminewd2 to avoid situations where the control flow gets locked up and hangs.

    Potential Breaking Change:

    This is passing all existing Protractor tests, but there is a possibility that the changes to the control flow will cause some test flows to hang. If this causes issues, such as tests hanging or commands executing out of order, please revisit your use of functions affecting the control flow, such as flow.execute.

    See the selenium-webdriver changelog at

    ๐Ÿ› Bug Fixes

    • (f034e01) fix(synchronizing): use the same control flow when ignoring sync

    Previously, the order of frames and tasks on the control flow was different depending on browser.ignoreSynchronization. This fixes the inconsistency by creating an empty task when ignoreSynchronization is true.

    Practically, this fixes the polling spec failing after the update to [email protected].

  • v2.3.0 Changes

    ๐Ÿš€ This release contains updates which fix some issues with dependencies that had gotten stale. However, it does not yet contain an update to the selenium-webdriver dependency, because of potential breaking changes. That update will be done in a separate [email protected] release. See issue 2245.

    โฌ†๏ธ Dependency Version Upgrades

    • (cfd8d00) feat(webdriver): update webdriver and chromedriver to latest version

    Updating Selenium standalone from 2.45.0 to 2.47.0 Updating ChromeDriver from 2.15 to 2.19 Selenium Changelog: ChromeDriver Changelog:

    • (802b20f) chore(selenium): update selenium from 2.47.0 to 2.47.1

    • (7a7aca8) chore(jasmine): bump jasmine version from 2.3.1 to 2.3.2

    • (eab828e) chore(travis): test against node 4

    Test against node 4 on Travis, and remove support for node 0.10.

    • (96def81) chore(saucelabs): updated saucelabs dependency to 1.0.1 to support proxy

    ๐Ÿ”‹ Features

    • (c989a7e) feat(webdriver-manager): add --ie32 commandline option

    The new option allows to download the 32-bit version of the IE driver on a 64-bit system, as the 64-bit version has been broken for over a year now (the sendKeys() function works very slowly on it).

    • (ff88e96) feat(cucumber): Allow cucumber tests containing line numbers


      specs: [

    ๐Ÿ› Bug Fixes

    • (1487e5a) fix(protractor.wrapDriver): allow browser instances to work even if they were not set up through the runner

    Fixes #2456

    • (2ff7a07) fix(Chrome Accessibility Plugin): resolving the location of AUDIT_FILE

    • (f9b0a92) fix(debugger): Fix potential debugger lockups

  • v2.2.0 Changes

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿ‘€ If you use the plugin API, it has changed a lot. See [docs/](docs/ for details. The good news is that it is being taken out of beta, so it should be more stable in the future.

    โฌ†๏ธ Dependency Version Upgrades

    • (786ab05) chore(dependencies): update request to 2.57

    Closes #2205

    ๐Ÿ”‹ Features

    • (f2a11a7) feat(plugins): Changed and expanded the plugin API

      • Changed the plugin API so that it is more uniform (see docs/
      • Updated existing plugins to the new API
      • Added the onPageLoad and onPageSync entry points for plugins for modifying browser.get
      • Added the waitForPromise and waitForCondition entry points for plugins for modifying waitForAngular
      • Added tests

    This closes #2126 and helps out @andresdominguez

    • (aded26b) feat(webdriver-manager): update download logic with streaming

    Also adds a content length check to make sure the downloaded binaries are the correct size. This seems to fix up some unreliable download issues that we were previously having.

    • (7aeebd6) feat(plugins): reporting loaded plugins

    • (6c10378) feat(protractor): expose pending $http and $timeout on a timeout

    Now when a test times out while waiting for Angular to be stable, pending $timeout and $http tasks will be reported to the console.

    ๐Ÿ› Bug Fixes

    • (c30afdd) fix(test): fixed tests under npm test

    • (3508335) fix(element): ElementArrayFinder.count was slow

    The bug fix for #1903 ( was causing ElementArrayFinder.prototype.count to be slow because of the extranous checks that must be performed. However, the checks could be delayed into the isPresent check, which will mitigate this issue


    • (b147033) fix(by.exactRepeater): should split by "="

    Closes #2335

    • (4c9886b) fix(Chrome Accessibility Plugin) No error context

    If your tests fail because of StaleElementReferenceError then there is no context about where this is coming from. By having the failure be handled inside of the plugin then grunt can fail gracefully. Additionally, this provides context about where the error originated from.

    Fixes #2331

    • (d15ccdc) fix(phantomJS): Reset URL cannot be a data url for PhantomJS

    When trying to use the lates version of Angular with PhantomJS we get a message complaining about "Detected a page unload event". This was fixed in earlier versions of Angular, see issue #85, but reappeared now. The problem is that using data urls to reset the page causes this issue, so we have to do as we do with Safari and use "about:blank" instead

    • (e6369ac) docs(tutorial): use Jasmine v2 in the tutorial

    • (e60dc0f) fix(browser.refresh): use timeout in milliseconds

    When invoked without arguments browser.refresh used a 10-millisecond timeout, wrongly documented as seconds. It now delegates timeout handling to browser.get, which defaults to DEFAULT_GET_PAGE_TIMEOUT (10 seconds).

    • (0262268) fix(cucumber): fix beforeFeature event handler call guard

    Fixes the run failures reported in

  • v2.1.0 Changes

    โฌ†๏ธ Dependency Version Upgrades

    • (25b1fa0) feat(jasmine): update jasmine dependency to 2.3.1

    Updated from 2.1.1. See Jasmine's changelog at

    Closes #1795. Closes #2094. Closes #1768.

    • (25e3b86) chore(chromedrivier): Update chromedriver to 2.15

    ๐Ÿ”‹ Features

    • (45341c9) feat(explorer): allow element explorer to start as a server

    If element explorer is run with a port (i.e. --debuggerServerPort 1234), it will start up a server that listens to command from the port instead of a repl that listens to process.stdin.

    • (cf9a26f) feat(plugins): allow plugins.postTest to know what test just ran

    • (0f80696) feat(plugins): inline plugins

    • (de49969) feat(debugger): make element explorer work with node 0.12.0

    Node has changed its debugger significantly in 0.12.0, and these changes are necessary to get it to work now.

    Specifically here are the key points to take note:

    • Before, the process continues running after process._debugProcess(pid); is called, but now, the process stops.

      To over come this, the call to process._debugProcess(pid) is moved from protractor into the debugger client. Secondly, because the process stops after the call, we call reqContinue once the debugger connection is established, so that protractor continues into the first break point (for backwards compatibility, we added an extra empty webdriver command so that in earlier versions of node, protractor doesn't go past the first break point from the reqContinue).

    • Before repl provides '(foobar\n)' when an user inputs 'foobar'. Now it is just 'foobar\n'.

      We will parse and strip away both the parenthesis and '\n' to support all versions of node.

    • Additionally (non-related to node 0.12.0), this change makes debugger processes fail fast if the port is taken.

      • (7b96db0) feat(browser.get): Return a promise that handles errors in browser.get

    ๐Ÿ› Bug Fixes

    • (815ff5d) fix(jasmine2): be consistent about passing assertions in output JSON

    See #2051

    • (e6e668c) chore(jasmine): update jasminewd2 to 0.0.4

    This improves the control flow schedule messages for debugging and fixes an issue with the this variable inside tests. See

    • (e599cf3) fix(taskscheduler): label sharded tasks with numbers instead of letters

    Letters run into a problem with a maximum of 26. See #2042

    • (fda3236) fix(config): add sauceAgent property to protractor config

    Closes #2040

    • (fa699b8) fix(debugger): fix 'getControlFlowText()' broken in webdriver 2.45

    • (b783dd8) fix(browser): remove subsequent duplicate module

    browser.removeMockModule() misses next duplicate module because of iteration over an array it's modifying.

    • (e3d4ad1) fix(stacktrace): remove jasmine2 specific stacktraces

    • (3cded9b) fix(locators): escape query in byExactBinding


    Closes #1918

    • (e18d499) fix(cucumber): process no-snippets param for cucumber framework
  • v2.0.0 Changes

    Why is this change version 2.0? Protractor is following semver, and there's some breaking changes here.

    โฌ†๏ธ Dependency Version Upgrades

    This change updates the version of WebDriverJS (selenium-webdriver node module) from 2.44 to 2.45.1. See the full changelog at

    • (8976e75) chore(jasmine): bump version of jasminewd2

    ๐Ÿ”‹ Features

    • (997937d) feat(console plugin): Added new console plugin

    • (ef6a09d) feat(webdriver-manager): allow a custom cdn for binaries

    Added a cdn value for each binary to be overrided by the cli argument alternate_cdn.

    ๐Ÿ› Bug Fixes

    • (fb92be6) fix(accessibility): improve output for long elements

    Instead of just printing the first N characters of the element's template, print the first and last N/2.

    See #1854

    • (2a765c7) fix(element): return not present when an element disappears

    • (8a3412e) fix(bug): by.buttonText() should not be effected by CSS style

    Closes issue #1904

    • (5d23280) fix(debugger): fix issue where output does not display circular dep and functions

    • (ef0fbc0) fix(debugger): expose require into debugger

    ๐Ÿ’ฅ Breaking Changes

    This change updates the version of WebDriverJS (selenium-webdriver node module) from 2.44 to 2.45.1. See the full changelog at

    To enable the update and remove confusion, this removes the element().then function unless there is an action result. This function is completely unnecessary, because it would always resolve to itself, but the removal may cause breaking changes.


      element(by.css('foo')).then(function(el) {
        return el.getText().then(...);



    In other words, an ElementFinder is now no longer a promise until an action has been called.


      var el = element(by.css('foo'));
      protractor.promise.isPromise(el); // true
      protractor.promise.isPromise(; // true


      var el = element(by.css('foo'));
      protractor.promise.isPromise(el); // false
      protractor.promise.isPromise(; // true

    Also, fixes filter and map to work with the new WebDriverJS.

    • (3c04858) chore(config): remove deprecated chromeOnly

    This has been replaced with directConnect.

    Due to changes in how scheduling works on the control flow, specs in Jasmine1 will no longer wait for multiple commands scheduled in onPrepare or in the global space of the test file.


      onPrepare: function() {
        // This second command will not finish before the specs start.

    To fix, return the last promise from onPrepare:


      onPrepare: function() {
        return browser.get('');

    Due to changes in WebDriverJS, wait without a timeout will now default to waiting for 0 ms instead of waiting indefinitely.


      browser.wait(fn); // would wait indefinitely


      browser.wait(fn, 8000) // to fix, add an explicit timeout

    This will be reverted in the next version of WebDriverJS.

  • v1.8.0 Changes

    โฌ†๏ธ Dependency Version Upgrades

    • (1159612) fix(webdriver): bump selenium to 2.45.0

    Bump the selenium standalone binary to 2.45.0.

    See for a full list of changes to the selenium server.

    Closes #1734

    ๐Ÿ”‹ Features

    • (54163dc) feat(a11yPlugin): plugin for integrating with Chrome Accessibility Developer Tools

    Also includes missing Angular map files. See plugins/accessibility/index.js for usage.

    • (658902b) feat(plugins): add postTest hook for plugins

    Additionally, add some tests to make sure that plugins can fail properly.

    Closes #1842

    • (13d34c9) feat(a11yPlugin): add support for

    • (5f8cffd) feat(plugins): allow plugins to export a name for use in reporting

    ๐Ÿ› Bug Fixes

    • (aabdd56) fix(debugger): breakpoint isn't set properly for windows

    • (361ae21) fix(plugins): add a 'test' or 'fail' string to plugins

    Closes #1843

    • (847e739) fix(webdriver-manager): unzipping ie driver should overwrite old version
  • v1.7.0 Changes

    โฌ†๏ธ Dependency Version Upgrades

    • (2658865) feat(webdriver): bump chromedriver to 2.14

    Chromedriver 2.14 contains support for accessing elements inside the shadow DOM.

    ๐Ÿ”‹ Features

    • (d220ecf) feat(locators): add by.deepCss selector for finding elements in the shadow dom


      equivalent to 'element(by.css('* /deep/ .foo'))
    • (324f69d) feat(locators): add by.exactRepeater

    • (eb9d567) feat(frameworks): add support for custom frameworks


      exports.config = {
        framework: 'custom',
        frameworkPath: '/path/to/your/framework/index.js'
    • (9bc1c53) feat(expectedConditions): add helper library for syncing with non-angular apps


      var EC = protractor.ExpectedConditions;
      var button = $('#xyz');
      var isClickable = EC.elementToBeClickable(button);
      browser.get(URL); browser.wait(isClickable, 5000); //wait for an element to become clickable;

    You can also customize the conditions:

      var urlChanged = function() {
        return browser.getCurrentUrl().then(function(url) {
          return url != '';
      // condition to wait for url to change, title to contain 'foo', and $('abc') element to contain text 'bar'
      var condition = EC.and(urlChanged, EC.titleContains('foo'),
          EC.textToBePresentInElement($('abc'), 'bar'));
      $('navButton').click(); browser.wait(condition, 5000); //wait for condition to be true.
      // do other things
    • (fb099de) feat(elementExplorer): Combine browser.pause with elementExplorer

      • reuse logic for browser.pause for elementExplorer
      • introduce browser.enterRepl
      • allow customization of driver for elementExplorer
      • fix bug where repl cannot return an ElementFinder (related #1600)

      Closes #1314, #1315

    • (9def5e0) feat(runner): add browser.getProcessedConfig method

    Now, instances of the browser object have a getProcessedConfig method which returns a promise that resolves to the current Protractor configuration object for the current runner instance. This means that if multiCapabilities are being used or tests are sharded, getProcessedConfig will return an object with the capabilities and specs property specific to the current instance.

    Closes #1724

    ๐Ÿ› Bug Fixes

    • (ccb165d) fix(webdriver-manager): unzipping chromedriver should override old version

    See #1813