protractor
Advanced tools
Changelog
3.0.0
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.
(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: http://chromedriver.storage.googleapis.com/2.20/notes.txt
(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
(7cba4ec) fix(ng-repeat): properly detect the end of an ng-repeat-start block
Discovered while investigating issue #2365
(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 https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
(ac1e21e) chore(plugins): Split first party plugins into seperate repos
BREAKING CHANGE:
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 https://github.com/angular/protractor/blob/master/docs/plugins.md#first-party-plugins for info for each module.
(ddb8584) chore(cucumber): Remove cucumber from internal implementation
BREAKING CHANGE:
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 https://github.com/angular/protractor/blob/master/docs/frameworks.md#using-cucumber for full instructions on use now.
Changelog
2.5.0
This release contains a hotfix for windows path issues and early support for Angular2 apps
(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
Changelog
2.4.0
This release contains only a version update to selenium-webdriver
, webdriver javascript bindings, and associated bug fixes.
(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 https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
(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 selenium-webdriver@2.47.0.
Changelog
2.3.0
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 Protractor@2.4.0 release. See issue 2245.
(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: https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md ChromeDriver Changelog: http://chromedriver.storage.googleapis.com/2.19/notes.txt
(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
(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
example:
specs: [
'cucumber/lib.feature:7'
]
Changelog
2.2.0
docs/plugins.md
for details. The good news is that it
is being taken out of beta, so it should be more stable in the future.(786ab05) chore(dependencies): update request to 2.57
Closes #2205
(f2a11a7) feat(plugins): Changed and expanded the plugin API
onPageLoad
and onPageSync
entry points for plugins for modifying browser.get
waitForPromise
and waitForCondition
entry points for plugins for modifying
waitForAngular
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.
(c30afdd) fix(test): fixed tests under npm test
(3508335) fix(element): ElementArrayFinder.count was slow
The bug fix for #1903 (https://github.com/angular/protractor/commit/2a765c76e121de13ff86a279fe3f21cb15c17783) 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
fixes(#2359)
(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 https://github.com/cucumber/cucumber-js/issues/342.
Changelog
2.1.0
(25b1fa0) feat(jasmine): update jasmine dependency to 2.3.1
Updated from 2.1.1. See Jasmine's changelog at https://github.com/jasmine/jasmine/tree/master/release_notes
Closes #1795. Closes #2094. Closes #1768.
(25e3b86) chore(chromedrivier): Update chromedriver to 2.15
(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:
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 callreqContinue
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).
We will parse and strip away both the parenthesis and '\n' to support all versions of node.
(7b96db0) feat(browser.get): Return a promise that handles errors in browser.get
(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 https://github.com/angular/jasminewd/issues/22
(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
See http://stackoverflow.com/q/3561711
Closes #1918
(e18d499) fix(cucumber): process no-snippets param for cucumber framework
Changelog
2.0.0
Why is this change version 2.0? Protractor is following semver, and there's some breaking changes here.
(34f0eeb) fix(element): update to selenium-webdriver@2.45.1 and remove element.then
This change updates the version of WebDriverJS (selenium-webdriver node module) from 2.44 to 2.45.1. See the full changelog at https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
(8976e75) chore(jasmine): bump version of jasminewd2
(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
.
(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
(34f0eeb) fix(element): update to selenium-webdriver@2.45.1 and remove element.then
This change updates the version of WebDriverJS (selenium-webdriver node module) from 2.44 to 2.45.1. See the full changelog at https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
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.
Before:
element(by.css('foo')).then(function(el) {
return el.getText().then(...);
});
After:
element(by.css('foo')).getText().then(...);
In other words, an ElementFinder is now no longer a promise until an action has been called.
Before:
var el = element(by.css('foo'));
protractor.promise.isPromise(el); // true
protractor.promise.isPromise(el.click()); // true
After:
var el = element(by.css('foo'));
protractor.promise.isPromise(el); // false
protractor.promise.isPromise(el.click()); // 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 (1159612)
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.
Before:
onPrepare: function() {
browser.driver.manage().window().maximize();
// This second command will not finish before the specs start.
browser.get('http://juliemr.github.io/protractor-demo');
}
To fix, return the last promise from onPrepare:
After:
onPrepare: function() {
browser.driver.manage().window().maximize();
return browser.get('http://juliemr.github.io/protractor-demo');
}
Due to (1159612)
Due to changes in WebDriverJS, wait
without a timeout will now default
to waiting for 0 ms instead of waiting indefinitely.
Before:
browser.wait(fn); // would wait indefinitely
After
browser.wait(fn, 8000) // to fix, add an explicit timeout
This will be reverted in the next version of WebDriverJS.
Changelog
1.8.0
(1159612) fix(webdriver): bump selenium to 2.45.0
Bump the selenium standalone binary to 2.45.0.
See https://code.google.com/p/selenium/source/browse/java/CHANGELOG for a full list of changes to the selenium server.
Closes #1734
(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 Tenon.io
(5f8cffd) feat(plugins): allow plugins to export a name for use in reporting
Changelog
1.7.0
(2658865) feat(webdriver): bump chromedriver to 2.14
Chromedriver 2.14 contains support for accessing elements inside the shadow DOM.
(d220ecf) feat(locators): add by.deepCss selector for finding elements in the shadow dom
Usage:
element(by.deepCss('.foo'))
equivalent to 'element(by.css('* /deep/ .foo'))
(324f69d) feat(locators): add by.exactRepeater
(eb9d567) feat(frameworks): add support for custom frameworks
Usage:
exports.config = {
framework: 'custom',
frameworkPath: '/path/to/your/framework/index.js'
}
(9bc1c53) feat(expectedConditions): add helper library for syncing with non-angular apps
Usage:
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
button.click();
You can also customize the conditions:
var urlChanged = function() {
return browser.getCurrentUrl().then(function(url) {
return url != 'http://www.angularjs.org';
});
};
// 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
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
(ccb165d) fix(webdriver-manager): unzipping chromedriver should override old version
See #1813