Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit 92c5d17

Browse files
committed
fix(element): test crashes when using certain locators with fromWebElement_
Protractor crashes when one uses locators with findElementsOverride (i.e. any custom protractor locator like by.binding/repeater/etc) in map/filter/then/each/reduce
1 parent aa40df1 commit 92c5d17

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

lib/element.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ ElementArrayFinder.prototype.filter = function(filterFn) {
207207
var list = [];
208208
parentWebElements.forEach(function(parentWebElement, index) {
209209
var elementFinder =
210-
ElementFinder.fromWebElement_(parentWebElement, self.locator_);
210+
ElementFinder.fromWebElement_(self.ptor_, parentWebElement, self.locator_);
211211

212212
var filterResults = filterFn(elementFinder, index);
213213
if (filterResults instanceof webdriver.promise.Promise) {
@@ -412,7 +412,7 @@ ElementArrayFinder.prototype.asElementFinders_ = function() {
412412
return this.getWebElements().then(function(arr) {
413413
var list = [];
414414
arr.forEach(function(webElem) {
415-
list.push(ElementFinder.fromWebElement_(webElem, self.locator_));
415+
list.push(ElementFinder.fromWebElement_(self.ptor_, webElem, self.locator_));
416416
});
417417
return list;
418418
});
@@ -703,11 +703,11 @@ util.inherits(ElementFinder, webdriver.promise.Promise);
703703

704704
exports.ElementFinder = ElementFinder;
705705

706-
ElementFinder.fromWebElement_ = function(webElem, locator) {
706+
ElementFinder.fromWebElement_ = function(ptor, webElem, locator) {
707707
var getWebElements = function() {
708708
return webdriver.promise.fulfilled([webElem]);
709709
};
710-
return new ElementArrayFinder(this.ptor_, getWebElements, locator).
710+
return new ElementArrayFinder(ptor, getWebElements, locator).
711711
toElementFinder_();
712712
};
713713

spec/basic/elements_spec.js

+19
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,25 @@ describe('ElementArrayFinder', function() {
503503
var e1 = element(by.tagName('body')).then(function(){});
504504
expect(e1 instanceof protractor.promise.Promise).toBe(true);
505505
});
506+
507+
it('should allow using protractor locator within map', function() {
508+
browser.get('index.html#/repeater');
509+
510+
var expected = [ { first: 'M', second: 'Monday' },
511+
{ first: 'T', second: 'Tuesday' },
512+
{ first: 'W', second: 'Wednesday' },
513+
{ first: 'Th', second: 'Thursday' },
514+
{ first: 'F', second: 'Friday' } ];
515+
516+
var result = element.all(by.repeater('allinfo in days')).map(function(el) {
517+
return {
518+
first: el.element(by.binding('allinfo.initial')).getText(),
519+
second: el.element(by.binding('allinfo.name')).getText(),
520+
};
521+
});
522+
523+
expect(result).toEqual(expected);
524+
});
506525
});
507526

508527
describe('evaluating statements', function() {

0 commit comments

Comments
 (0)