@@ -19,6 +19,29 @@ var WebdriverBy = function() {};
19
19
WebdriverBy . prototype = webdriver . By ;
20
20
util . inherits ( ProtractorBy , WebdriverBy ) ;
21
21
22
+ /**
23
+ * Add a locator to this instance of ProtractorBy. This locator can then be
24
+ * used with element(by.<name>(<args>)).
25
+ *
26
+ * @param {string } name
27
+ * @param {function|string } script A script to be run in the context of
28
+ * the browser. This script will be passed an array of arguments
29
+ * that begins with the element scoping the search, and then
30
+ * contains any args passed into the locator. It should return
31
+ * an array of elements.
32
+ */
33
+ ProtractorBy . prototype . addLocator = function ( name , script ) {
34
+ this [ name ] = function ( varArgs ) {
35
+ return {
36
+ findElementsOverride : function ( driver , using ) {
37
+ return driver . findElements (
38
+ webdriver . By . js ( script ) , using , varArgs ) ;
39
+ } ,
40
+ message : 'by.' + name + '("' + varArgs + '")'
41
+ }
42
+ } ;
43
+ } ;
44
+
22
45
/**
23
46
* Usage:
24
47
* <span>{{status}}</span>
@@ -31,7 +54,7 @@ ProtractorBy.prototype.binding = function(bindingDescriptor) {
31
54
webdriver . By . js ( clientSideScripts . findBindings ) ,
32
55
using , bindingDescriptor ) ;
33
56
} ,
34
- message : 'by.binding(' + bindingDescriptor + ')'
57
+ message : 'by.binding(" ' + bindingDescriptor + '" )'
35
58
} ;
36
59
} ;
37
60
@@ -46,7 +69,7 @@ ProtractorBy.prototype.select = function(model) {
46
69
return driver . findElements (
47
70
webdriver . By . js ( clientSideScripts . findSelects ) , using , model ) ;
48
71
} ,
49
- message : 'by.select(' + model + ')'
72
+ message : 'by.select(" ' + model + '" )'
50
73
} ;
51
74
} ;
52
75
@@ -61,7 +84,7 @@ ProtractorBy.prototype.selectedOption = function(model) {
61
84
return driver . findElements (
62
85
webdriver . By . js ( clientSideScripts . findSelectedOptions ) , using , model ) ;
63
86
} ,
64
- message : 'by.selectedOption(' + model + ')'
87
+ message : 'by.selectedOption(" ' + model + '" )'
65
88
} ;
66
89
} ;
67
90
@@ -77,7 +100,7 @@ ProtractorBy.prototype.input = function(model) {
77
100
return driver . findElements (
78
101
webdriver . By . js ( clientSideScripts . findInputs ) , using , model ) ;
79
102
} ,
80
- message : 'by.input(' + model + ')'
103
+ message : 'by.input(" ' + model + '" )'
81
104
} ;
82
105
} ;
83
106
@@ -92,7 +115,7 @@ ProtractorBy.prototype.model = function(model) {
92
115
return driver . findElements (
93
116
webdriver . By . js ( clientSideScripts . findInputs ) , using , model ) ;
94
117
} ,
95
- message : 'by.model(' + model + ')'
118
+ message : 'by.model(" ' + model + '" )'
96
119
} ;
97
120
} ;
98
121
@@ -107,7 +130,7 @@ ProtractorBy.prototype.textarea = function(model) {
107
130
return driver . findElements (
108
131
webdriver . By . js ( clientSideScripts . findTextareas ) , using , model ) ;
109
132
} ,
110
- message : 'by.textarea(' + model + ')'
133
+ message : 'by.textarea(" ' + model + '" )'
111
134
} ;
112
135
} ;
113
136
@@ -137,24 +160,24 @@ ProtractorBy.prototype.repeater = function(repeatDescriptor) {
137
160
webdriver . By . js ( clientSideScripts . findAllRepeaterRows ) ,
138
161
using , repeatDescriptor ) ;
139
162
} ,
140
- message : 'by.repeater(' + repeatDescriptor + ')' ,
163
+ message : 'by.repeater(" ' + repeatDescriptor + '" )' ,
141
164
row : function ( index ) {
142
165
return {
143
166
findElementsOverride : function ( driver , using ) {
144
167
return driver . findElements (
145
168
webdriver . By . js ( clientSideScripts . findRepeaterRows ) ,
146
169
using , repeatDescriptor , index ) ;
147
170
} ,
148
- message : 'by.repeater(' + repeatDescriptor + ').row(' + index + ') ' ,
171
+ message : 'by.repeater(' + repeatDescriptor + '" ).row(" ' + index + '")" ' ,
149
172
column : function ( binding ) {
150
173
return {
151
174
findElementsOverride : function ( driver , using ) {
152
175
return driver . findElements (
153
176
webdriver . By . js ( clientSideScripts . findRepeaterElement ) ,
154
177
using , repeatDescriptor , index , binding ) ;
155
178
} ,
156
- message : 'by.repeater(' + repeatDescriptor + ').row(' + index +
157
- ').column(' + binding + ')'
179
+ message : 'by.repeater(" ' + repeatDescriptor + '" ).row(" ' + index +
180
+ '" ).column(" ' + binding + '" )'
158
181
} ;
159
182
}
160
183
} ;
@@ -166,17 +189,17 @@ ProtractorBy.prototype.repeater = function(repeatDescriptor) {
166
189
webdriver . By . js ( clientSideScripts . findRepeaterColumn ) ,
167
190
using , repeatDescriptor , binding ) ;
168
191
} ,
169
- message : 'by.repeater(' + repeatDescriptor + ').column(' + binding +
170
- ')' ,
192
+ message : 'by.repeater(" ' + repeatDescriptor + '" ).column(" ' + binding +
193
+ '" )' ,
171
194
row : function ( index ) {
172
195
return {
173
196
findElementsOverride : function ( driver , using ) {
174
197
return driver . findElements (
175
198
webdriver . By . js ( clientSideScripts . findRepeaterElement ) ,
176
199
using , repeatDescriptor , index , binding ) ;
177
200
} ,
178
- message : 'by.repeater(' + repeatDescriptor + ').column(' + binding
179
- + ').row(' + index + ')'
201
+ message : 'by.repeater(" ' + repeatDescriptor + '" ).column(" ' +
202
+ binding + '" ).row(" ' + index + '" )'
180
203
} ;
181
204
}
182
205
} ;
0 commit comments