@@ -37,9 +37,9 @@ clientSideScripts.findBinding = function() {
37
37
var matches = [ ] ;
38
38
var binding = arguments [ 0 ] ;
39
39
for ( var i = 0 ; i < bindings . length ; ++ i ) {
40
- if ( angular . element ( bindings [ i ] ) . data ( ) . $binding == binding ) {
41
- matches . push ( bindings [ i ] ) ;
42
- } else if ( angular . element ( bindings [ i ] ) . data ( ) . $ binding[ 0 ] . exp == binding ) {
40
+ var bindingName = angular . element ( bindings [ i ] ) . data ( ) . $binding [ 0 ] . exp ||
41
+ angular . element ( bindings [ i ] ) . data ( ) . $binding ;
42
+ if ( bindingName . indexOf ( binding ) != - 1 ) {
43
43
matches . push ( bindings [ i ] ) ;
44
44
}
45
45
}
@@ -58,15 +58,37 @@ clientSideScripts.findBindings = function() {
58
58
var matches = [ ] ;
59
59
var binding = arguments [ 0 ] ;
60
60
for ( var i = 0 ; i < bindings . length ; ++ i ) {
61
- if ( angular . element ( bindings [ i ] ) . data ( ) . $binding == binding ) {
62
- matches . push ( bindings [ i ] ) ;
63
- } else if ( angular . element ( bindings [ i ] ) . data ( ) . $ binding[ 0 ] . exp == binding ) {
61
+ var bindingName = angular . element ( bindings [ i ] ) . data ( ) . $binding [ 0 ] . exp ||
62
+ angular . element ( bindings [ i ] ) . data ( ) . $binding ;
63
+ if ( bindingName . indexOf ( binding ) != - 1 ) {
64
64
matches . push ( bindings [ i ] ) ;
65
65
}
66
66
}
67
67
return matches ; // Return the whole array for webdriver.findElements.
68
68
} ;
69
69
70
+ /**
71
+ * Find a row within an ng-repeat.
72
+ *
73
+ * arguments[0] {string} The text of the repeater, e.g. 'cat in cats'
74
+ * arguments[1] {number} The row index
75
+ *
76
+ * @return {Element } The row element
77
+ */
78
+ clientSideScripts . findRepeaterRow = function ( ) {
79
+ var repeater = arguments [ 0 ] ;
80
+ var index = arguments [ 1 ] ;
81
+
82
+ var rows = [ ] ;
83
+ var repeatElems = document . querySelectorAll ( '[ng-repeat]' ) ;
84
+ for ( var i = 0 ; i < repeatElems . length ; ++ i ) {
85
+ if ( repeatElems [ i ] . getAttribute ( 'ng-repeat' ) . indexOf ( repeater ) != - 1 ) {
86
+ rows . push ( repeatElems [ i ] ) ;
87
+ }
88
+ }
89
+ return rows [ index - 1 ] ;
90
+ } ;
91
+
70
92
/**
71
93
* Find an element within an ng-repeat by its row and column.
72
94
*
@@ -82,12 +104,19 @@ clientSideScripts.findRepeaterElement = function() {
82
104
var index = arguments [ 1 ] ;
83
105
var binding = arguments [ 2 ] ;
84
106
85
- var rows = document . querySelectorAll ( '[ng-repeat="'
86
- + repeater + '"]' ) ;
107
+ var rows = [ ] ;
108
+ var repeatElems = document . querySelectorAll ( '[ng-repeat]' ) ;
109
+ for ( var i = 0 ; i < repeatElems . length ; ++ i ) {
110
+ if ( repeatElems [ i ] . getAttribute ( 'ng-repeat' ) . indexOf ( repeater ) != - 1 ) {
111
+ rows . push ( repeatElems [ i ] ) ;
112
+ }
113
+ }
87
114
var row = rows [ index - 1 ] ;
88
115
var bindings = row . getElementsByClassName ( 'ng-binding' ) ;
89
116
for ( var i = 0 ; i < bindings . length ; ++ i ) {
90
- if ( angular . element ( bindings [ i ] ) . data ( ) . $binding [ 0 ] . exp == binding ) {
117
+ var bindingName = angular . element ( bindings [ i ] ) . data ( ) . $binding [ 0 ] . exp ||
118
+ angular . element ( bindings [ i ] ) . data ( ) . $binding ;
119
+ if ( bindingName . indexOf ( binding ) != - 1 ) {
91
120
matches . push ( bindings [ i ] ) ;
92
121
}
93
122
}
@@ -108,12 +137,19 @@ clientSideScripts.findRepeaterElement = function() {
108
137
var repeater = arguments [ 0 ] ;
109
138
var binding = arguments [ 1 ] ;
110
139
111
- var rows = document . querySelectorAll ( '[ng-repeat="'
112
- + repeater + '"]' ) ;
140
+ var rows = [ ] ;
141
+ var repeatElems = document . querySelectorAll ( '[ng-repeat]' ) ;
142
+ for ( var i = 0 ; i < repeatElems . length ; ++ i ) {
143
+ if ( repeatElems [ i ] . getAttribute ( 'ng-repeat' ) . indexOf ( repeater ) != - 1 ) {
144
+ rows . push ( repeatElems [ i ] ) ;
145
+ }
146
+ }
113
147
for ( var i = 0 ; i < rows . length ; ++ i ) {
114
148
var bindings = rows [ i ] . getElementsByClassName ( 'ng-binding' ) ;
115
149
for ( var j = 0 ; j < bindings . length ; ++ j ) {
116
- if ( angular . element ( bindings [ j ] ) . data ( ) . $binding [ 0 ] . exp == binding ) {
150
+ var bindingName = angular . element ( bindings [ j ] ) . data ( ) . $binding [ 0 ] . exp ||
151
+ angular . element ( bindings [ j ] ) . data ( ) . $binding ;
152
+ if ( bindingName . indexOf ( binding ) != - 1 ) {
117
153
matches . push ( bindings [ j ] ) ;
118
154
}
119
155
}
@@ -346,9 +382,11 @@ ProtractorBy.prototype.repeater = function(repeatDescriptor) {
346
382
return {
347
383
row : function ( index ) {
348
384
return {
349
- using : 'css selector' ,
350
- value : '[ng-repeat="' + repeatDescriptor
351
- + '"]:nth-of-type(' + index + ')' ,
385
+ findOverride : function ( driver ) {
386
+ return driver . findElement (
387
+ webdriver . By . js ( clientSideScripts . findRepeaterRow ) ,
388
+ repeatDescriptor , index ) ;
389
+ } ,
352
390
column : function ( binding ) {
353
391
return {
354
392
findOverride : function ( driver ) {
0 commit comments