@@ -299,6 +299,49 @@ class Locator {
299
299
return new Locator ( { xpath } ) ;
300
300
}
301
301
302
+ /**
303
+ * Adds condition: attribute value starts with text
304
+ * (analog of XPATH: [starts-with(@attr,'startValue')] or CSS [attr^='startValue']
305
+ * Example: I.click(locate('a').withAttrStartsWith('href', 'https://')));
306
+ * Works with any attribute: class, href etc.
307
+ * @param {string } attrName
308
+ * @param {string } startsWith
309
+ * @returns {Locator }
310
+ */
311
+ withAttrStartsWith ( attrName , startsWith ) {
312
+ const xpath = sprintf ( '%s[%s]' , this . toXPath ( ) , `starts-with(@${ attrName } , "${ startsWith } ")` ) ;
313
+ return new Locator ( { xpath } ) ;
314
+ }
315
+
316
+ /**
317
+ * Adds condition: attribute value ends with text
318
+ * (analog of XPATH: [ends-with(@attr,'endValue')] or CSS [attr$='endValue']
319
+ * Example: I.click(locate('a').withAttrEndsWith('href', '.com')));
320
+ * Works with any attribute: class, href etc.
321
+ * @param {string } attrName
322
+ * @param {string } endsWith
323
+ * @returns {Locator }
324
+ */
325
+ withAttrEndsWith ( attrName , endsWith ) {
326
+ const xpath = sprintf ( '%s[%s]' , this . toXPath ( ) , `substring(@${ attrName } , string-length(@${ attrName } ) - string-length("${ endsWith } ") + 1) = "${ endsWith } "` ,
327
+ ) ;
328
+ return new Locator ( { xpath } ) ;
329
+ }
330
+
331
+ /**
332
+ * Adds condition: attribute value contains text
333
+ * (analog of XPATH: [contains(@attr,'partOfAttribute')] or CSS [attr*='partOfAttribute']
334
+ * Example: I.click(locate('a').withAttrContains('href', 'google')));
335
+ * Works with any attribute: class, href etc.
336
+ * @param {string } attrName
337
+ * @param {string } partOfAttrValue
338
+ * @returns {Locator }
339
+ */
340
+ withAttrContains ( attrName , partOfAttrValue ) {
341
+ const xpath = sprintf ( '%s[%s]' , this . toXPath ( ) , `contains(@${ attrName } , "${ partOfAttrValue } ")` ) ;
342
+ return new Locator ( { xpath } ) ;
343
+ }
344
+
302
345
/**
303
346
* @param {String } text
304
347
* @returns {Locator }
0 commit comments