@olib-ai/owl-browser-sdk 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +107 -0
  2. package/dist/extraction/content-cleaner.d.ts +40 -0
  3. package/dist/extraction/content-cleaner.d.ts.map +1 -0
  4. package/dist/extraction/content-cleaner.js +393 -0
  5. package/dist/extraction/content-cleaner.js.map +1 -0
  6. package/dist/extraction/extractor.d.ts +139 -0
  7. package/dist/extraction/extractor.d.ts.map +1 -0
  8. package/dist/extraction/extractor.js +212 -0
  9. package/dist/extraction/extractor.js.map +1 -0
  10. package/dist/extraction/html-processor.d.ts +75 -0
  11. package/dist/extraction/html-processor.d.ts.map +1 -0
  12. package/dist/extraction/html-processor.js +192 -0
  13. package/dist/extraction/html-processor.js.map +1 -0
  14. package/dist/extraction/index.d.ts +14 -0
  15. package/dist/extraction/index.d.ts.map +1 -0
  16. package/dist/extraction/index.js +19 -0
  17. package/dist/extraction/index.js.map +1 -0
  18. package/dist/extraction/list-extractor.d.ts +24 -0
  19. package/dist/extraction/list-extractor.d.ts.map +1 -0
  20. package/dist/extraction/list-extractor.js +303 -0
  21. package/dist/extraction/list-extractor.js.map +1 -0
  22. package/dist/extraction/meta-extractor.d.ts +40 -0
  23. package/dist/extraction/meta-extractor.d.ts.map +1 -0
  24. package/dist/extraction/meta-extractor.js +216 -0
  25. package/dist/extraction/meta-extractor.js.map +1 -0
  26. package/dist/extraction/pagination.d.ts +29 -0
  27. package/dist/extraction/pagination.d.ts.map +1 -0
  28. package/dist/extraction/pagination.js +323 -0
  29. package/dist/extraction/pagination.js.map +1 -0
  30. package/dist/extraction/pattern-detector.d.ts +16 -0
  31. package/dist/extraction/pattern-detector.d.ts.map +1 -0
  32. package/dist/extraction/pattern-detector.js +390 -0
  33. package/dist/extraction/pattern-detector.js.map +1 -0
  34. package/dist/extraction/scrape-session.d.ts +23 -0
  35. package/dist/extraction/scrape-session.d.ts.map +1 -0
  36. package/dist/extraction/scrape-session.js +192 -0
  37. package/dist/extraction/scrape-session.js.map +1 -0
  38. package/dist/extraction/selector-engine.d.ts +23 -0
  39. package/dist/extraction/selector-engine.d.ts.map +1 -0
  40. package/dist/extraction/selector-engine.js +127 -0
  41. package/dist/extraction/selector-engine.js.map +1 -0
  42. package/dist/extraction/table-extractor.d.ts +29 -0
  43. package/dist/extraction/table-extractor.d.ts.map +1 -0
  44. package/dist/extraction/table-extractor.js +282 -0
  45. package/dist/extraction/table-extractor.js.map +1 -0
  46. package/dist/extraction/transforms.d.ts +47 -0
  47. package/dist/extraction/transforms.d.ts.map +1 -0
  48. package/dist/extraction/transforms.js +277 -0
  49. package/dist/extraction/transforms.js.map +1 -0
  50. package/dist/extraction/types.d.ts +199 -0
  51. package/dist/extraction/types.d.ts.map +1 -0
  52. package/dist/extraction/types.js +5 -0
  53. package/dist/extraction/types.js.map +1 -0
  54. package/dist/flow/executor.js +1 -1
  55. package/dist/flow/executor.js.map +1 -1
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/playwright/browser-type.d.ts +101 -0
  61. package/dist/playwright/browser-type.d.ts.map +1 -0
  62. package/dist/playwright/browser-type.js +134 -0
  63. package/dist/playwright/browser-type.js.map +1 -0
  64. package/dist/playwright/browser.d.ts +98 -0
  65. package/dist/playwright/browser.d.ts.map +1 -0
  66. package/dist/playwright/browser.js +229 -0
  67. package/dist/playwright/browser.js.map +1 -0
  68. package/dist/playwright/context.d.ts +211 -0
  69. package/dist/playwright/context.d.ts.map +1 -0
  70. package/dist/playwright/context.js +466 -0
  71. package/dist/playwright/context.js.map +1 -0
  72. package/dist/playwright/extractor.d.ts +108 -0
  73. package/dist/playwright/extractor.d.ts.map +1 -0
  74. package/dist/playwright/extractor.js +404 -0
  75. package/dist/playwright/extractor.js.map +1 -0
  76. package/dist/playwright/frame.d.ts +147 -0
  77. package/dist/playwright/frame.d.ts.map +1 -0
  78. package/dist/playwright/frame.js +492 -0
  79. package/dist/playwright/frame.js.map +1 -0
  80. package/dist/playwright/index.d.ts +163 -0
  81. package/dist/playwright/index.d.ts.map +1 -0
  82. package/dist/playwright/index.js +313 -0
  83. package/dist/playwright/index.js.map +1 -0
  84. package/dist/playwright/keyboard.d.ts +74 -0
  85. package/dist/playwright/keyboard.d.ts.map +1 -0
  86. package/dist/playwright/keyboard.js +187 -0
  87. package/dist/playwright/keyboard.js.map +1 -0
  88. package/dist/playwright/locator.d.ts +237 -0
  89. package/dist/playwright/locator.d.ts.map +1 -0
  90. package/dist/playwright/locator.js +646 -0
  91. package/dist/playwright/locator.js.map +1 -0
  92. package/dist/playwright/mouse.d.ts +82 -0
  93. package/dist/playwright/mouse.d.ts.map +1 -0
  94. package/dist/playwright/mouse.js +137 -0
  95. package/dist/playwright/mouse.js.map +1 -0
  96. package/dist/playwright/page-helpers.d.ts +261 -0
  97. package/dist/playwright/page-helpers.d.ts.map +1 -0
  98. package/dist/playwright/page-helpers.js +423 -0
  99. package/dist/playwright/page-helpers.js.map +1 -0
  100. package/dist/playwright/page.d.ts +566 -0
  101. package/dist/playwright/page.d.ts.map +1 -0
  102. package/dist/playwright/page.js +1476 -0
  103. package/dist/playwright/page.js.map +1 -0
  104. package/dist/playwright/response.d.ts +100 -0
  105. package/dist/playwright/response.d.ts.map +1 -0
  106. package/dist/playwright/response.js +194 -0
  107. package/dist/playwright/response.js.map +1 -0
  108. package/dist/playwright/types.d.ts +354 -0
  109. package/dist/playwright/types.d.ts.map +1 -0
  110. package/dist/playwright/types.js +8 -0
  111. package/dist/playwright/types.js.map +1 -0
  112. package/openapi.json +343 -36
  113. package/package.json +10 -1
@@ -0,0 +1,646 @@
1
+ /**
2
+ * Playwright-compatible Locator class for Owl Browser.
3
+ *
4
+ * Locators are lazy element references that resolve at action time.
5
+ * They store a selector and delegate all operations to the parent Page,
6
+ * enabling the same retry and auto-waiting semantics as Playwright.
7
+ *
8
+ * Supports Playwright selector engine formats: text=, css=, xpath=,
9
+ * role=, data-testid=, placeholder=, alt=, title=, label=.
10
+ */
11
+ /**
12
+ * Convert a Playwright selector to a CSS/XPath selector that Owl understands.
13
+ *
14
+ * Playwright supports prefixed selectors like text=, css=, xpath=, role=, etc.
15
+ * This function converts those to standard CSS selectors or passes them as
16
+ * natural language descriptions to Owl's semantic matching.
17
+ *
18
+ * @param selector - Playwright-format selector
19
+ * @returns Transformed selector for Owl Browser
20
+ */
21
+ export function convertSelector(selector) {
22
+ // text= prefix: find by text content (use as natural language description)
23
+ if (selector.startsWith('text=')) {
24
+ return selector.slice(5).replace(/^["']|["']$/g, '');
25
+ }
26
+ // css= prefix: standard CSS selector
27
+ if (selector.startsWith('css=')) {
28
+ return selector.slice(4);
29
+ }
30
+ // xpath= prefix: pass through for Owl's XPath support
31
+ if (selector.startsWith('xpath=')) {
32
+ return selector.slice(6);
33
+ }
34
+ // id= prefix: convert to CSS ID selector
35
+ if (selector.startsWith('id=')) {
36
+ return `#${selector.slice(3)}`;
37
+ }
38
+ // data-testid= prefix: convert to attribute selector
39
+ if (selector.startsWith('data-testid=')) {
40
+ const value = selector.slice(12).replace(/^["']|["']$/g, '');
41
+ return `[data-testid="${value}"]`;
42
+ }
43
+ // placeholder= prefix: convert to attribute selector
44
+ if (selector.startsWith('placeholder=')) {
45
+ const value = selector.slice(12).replace(/^["']|["']$/g, '');
46
+ return `[placeholder="${value}"]`;
47
+ }
48
+ // alt= prefix: convert to attribute selector
49
+ if (selector.startsWith('alt=')) {
50
+ const value = selector.slice(4).replace(/^["']|["']$/g, '');
51
+ return `[alt="${value}"]`;
52
+ }
53
+ // title= prefix: convert to attribute selector
54
+ if (selector.startsWith('title=')) {
55
+ const value = selector.slice(6).replace(/^["']|["']$/g, '');
56
+ return `[title="${value}"]`;
57
+ }
58
+ // label= prefix: use as natural language description
59
+ if (selector.startsWith('label=')) {
60
+ return selector.slice(6).replace(/^["']|["']$/g, '');
61
+ }
62
+ // role= prefix: convert to attribute selector with role name
63
+ // Playwright syntax: role=button[name="Save"]
64
+ if (selector.startsWith('role=')) {
65
+ const roleStr = selector.slice(5);
66
+ const bracketIdx = roleStr.indexOf('[');
67
+ if (bracketIdx === -1) {
68
+ return `[role="${roleStr}"]`;
69
+ }
70
+ const role = roleStr.slice(0, bracketIdx);
71
+ const attrs = roleStr.slice(bracketIdx);
72
+ // Extract name from [name="..."]
73
+ const nameMatch = attrs.match(/name=["']([^"']+)["']/);
74
+ if (nameMatch?.[1]) {
75
+ // Use role + name as natural language: "Save button"
76
+ return `${nameMatch[1]} ${role}`;
77
+ }
78
+ return `[role="${role}"]`;
79
+ }
80
+ // No prefix: return as-is (CSS selector or natural language)
81
+ return selector;
82
+ }
83
+ /**
84
+ * Locator represents a lazy reference to one or more DOM elements.
85
+ *
86
+ * All operations on a Locator are automatically retried until the element
87
+ * is available or the timeout expires. Locators can be chained to narrow
88
+ * the selection scope.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const button = page.locator('button.submit');
93
+ * await button.click();
94
+ *
95
+ * const text = await page.locator('.result').textContent();
96
+ * await page.locator('text=Sign In').click();
97
+ * await page.locator('[data-testid="submit"]').fill('hello');
98
+ * ```
99
+ */
100
+ export class Locator {
101
+ /** @internal */
102
+ _page;
103
+ /** @internal */
104
+ _selector;
105
+ constructor(page, selector) {
106
+ this._page = page;
107
+ this._selector = convertSelector(selector);
108
+ }
109
+ // ==================== Actions ====================
110
+ /** Click the element. */
111
+ async click(options) {
112
+ await this._page.click(this._selector, options);
113
+ }
114
+ /** Double-click the element. */
115
+ async dblclick(options) {
116
+ await this._page.dblclick(this._selector, options);
117
+ }
118
+ /** Fill the element with text (clears existing content first). */
119
+ async fill(value, options) {
120
+ await this._page.fill(this._selector, value, options);
121
+ }
122
+ /** Type text into the element (does NOT clear existing content). */
123
+ async type(text, options) {
124
+ await this._page.type(this._selector, text, options);
125
+ }
126
+ /** Focus the element and press a key. */
127
+ async press(key, options) {
128
+ await this._page.press(this._selector, key, options);
129
+ }
130
+ /** Hover over the element. */
131
+ async hover(options) {
132
+ await this._page.hover(this._selector, options);
133
+ }
134
+ /** Focus the element. */
135
+ async focus(options) {
136
+ void options;
137
+ await this._page.focus(this._selector);
138
+ }
139
+ /** Check a checkbox (no-op if already checked). */
140
+ async check(options) {
141
+ await this._page.check(this._selector, options);
142
+ }
143
+ /** Uncheck a checkbox (no-op if already unchecked). */
144
+ async uncheck(options) {
145
+ await this._page.uncheck(this._selector, options);
146
+ }
147
+ /** Select an option from a dropdown. */
148
+ async selectOption(values, options) {
149
+ return this._page.selectOption(this._selector, values, options);
150
+ }
151
+ /**
152
+ * Upload files to a file input element.
153
+ *
154
+ * @param files - File path(s) to upload
155
+ * @param options - Upload options
156
+ */
157
+ async setInputFiles(files, options) {
158
+ void options;
159
+ await this._page.setInputFiles(this._selector, files);
160
+ }
161
+ /** Select all text within the element. */
162
+ async selectText() {
163
+ await this._page._execute('browser_select_all', {
164
+ selector: this._selector,
165
+ });
166
+ }
167
+ /**
168
+ * Dispatch a DOM event on the element.
169
+ *
170
+ * @param type - Event type (e.g., 'click', 'input', 'change')
171
+ * @param eventInit - Event initialization properties
172
+ */
173
+ async dispatchEvent(type, eventInit) {
174
+ await this._page._execute('browser_dispatch_event', {
175
+ selector: this._selector,
176
+ event_type: type,
177
+ bubbles: eventInit?.['bubbles'] !== false,
178
+ });
179
+ }
180
+ /**
181
+ * Scroll the element into view if not already visible.
182
+ */
183
+ async scrollIntoViewIfNeeded() {
184
+ await this._page._execute('browser_scroll_to_element', {
185
+ selector: this._selector,
186
+ });
187
+ }
188
+ /**
189
+ * Highlight the element with a colored border for debugging.
190
+ */
191
+ async highlight() {
192
+ await this._page._execute('browser_highlight', {
193
+ selector: this._selector,
194
+ });
195
+ }
196
+ // ==================== Queries ====================
197
+ /** Get the text content of the element. */
198
+ async textContent() {
199
+ return this._page.textContent(this._selector);
200
+ }
201
+ /** Get the inner HTML of the element. */
202
+ async innerHTML() {
203
+ return this._page.innerHTML(this._selector);
204
+ }
205
+ /** Get the inner text of the element (visible text only). */
206
+ async innerText() {
207
+ const text = await this._page.textContent(this._selector);
208
+ return text ?? '';
209
+ }
210
+ /** Get the value of an attribute. */
211
+ async getAttribute(name) {
212
+ return this._page.getAttribute(this._selector, name);
213
+ }
214
+ /** Get the input value. */
215
+ async inputValue() {
216
+ const result = await this._page._execute('browser_get_attribute', {
217
+ selector: this._selector,
218
+ attribute: 'value',
219
+ });
220
+ if (typeof result === 'string')
221
+ return result;
222
+ const res = result;
223
+ return String(res?.['value'] ?? '');
224
+ }
225
+ /**
226
+ * Get the bounding box of the element.
227
+ *
228
+ * @returns Bounding box {x, y, width, height} or null if not visible
229
+ */
230
+ async boundingBox() {
231
+ try {
232
+ const result = await this._page._execute('browser_get_bounding_box', {
233
+ selector: this._selector,
234
+ });
235
+ const res = result;
236
+ return {
237
+ x: Number(res['x'] ?? 0),
238
+ y: Number(res['y'] ?? 0),
239
+ width: Number(res['width'] ?? 0),
240
+ height: Number(res['height'] ?? 0),
241
+ };
242
+ }
243
+ catch {
244
+ return null;
245
+ }
246
+ }
247
+ /**
248
+ * Get the count of elements matching this locator.
249
+ *
250
+ * Uses browser_count_elements for native element counting.
251
+ *
252
+ * @returns Number of matching elements
253
+ */
254
+ async count() {
255
+ try {
256
+ const result = await this._page._execute('browser_count_elements', {
257
+ selector: this._selector,
258
+ });
259
+ if (typeof result === 'number')
260
+ return result;
261
+ if (result !== null && typeof result === 'object') {
262
+ const res = result;
263
+ // Browser returns count in error_code field as a string, or in count/total
264
+ const raw = res['error_code'] ?? res['count'] ?? res['total'];
265
+ if (raw !== undefined && raw !== null) {
266
+ const n = Number(raw);
267
+ if (!Number.isNaN(n))
268
+ return n;
269
+ }
270
+ // Fallback: extract from message "N element(s) matching ..."
271
+ const msg = String(res['message'] ?? '');
272
+ const match = msg.match(/^(\d+)\s+element/);
273
+ if (match?.[1])
274
+ return Number(match[1]);
275
+ }
276
+ const n = Number(result);
277
+ return Number.isNaN(n) ? 0 : n;
278
+ }
279
+ catch {
280
+ return 0;
281
+ }
282
+ }
283
+ /**
284
+ * Resolve all matching elements to an array of locators.
285
+ *
286
+ * @returns Array of Locators, one per matching element
287
+ */
288
+ async all() {
289
+ const n = await this.count();
290
+ const locators = [];
291
+ for (let i = 0; i < n; i++) {
292
+ locators.push(this.nth(i));
293
+ }
294
+ return locators;
295
+ }
296
+ // ==================== State ====================
297
+ /** Whether the element is visible. */
298
+ async isVisible() {
299
+ return this._page.isVisible(this._selector);
300
+ }
301
+ /** Whether the element is enabled. */
302
+ async isEnabled() {
303
+ return this._page.isEnabled(this._selector);
304
+ }
305
+ /** Whether the element (checkbox/radio) is checked. */
306
+ async isChecked() {
307
+ return this._page.isChecked(this._selector);
308
+ }
309
+ /** Whether the element is hidden. */
310
+ async isHidden() {
311
+ return !(await this._page.isVisible(this._selector));
312
+ }
313
+ /** Whether the element is disabled. */
314
+ async isDisabled() {
315
+ return !(await this._page.isEnabled(this._selector));
316
+ }
317
+ /** Whether the element is editable. */
318
+ async isEditable() {
319
+ const result = await this._page._execute('browser_is_editable', {
320
+ selector: this._selector,
321
+ });
322
+ const res = result;
323
+ return res['error_code'] === 'editable';
324
+ }
325
+ // ==================== Waiting ====================
326
+ /** Wait for the element to satisfy a condition. */
327
+ async waitFor(options) {
328
+ await this._page.waitForSelector(this._selector, {
329
+ state: options?.state,
330
+ timeout: options?.timeout,
331
+ });
332
+ }
333
+ // ==================== Screenshots ====================
334
+ /** Take a screenshot of the element. */
335
+ async screenshot(options) {
336
+ return this._page.screenshot({
337
+ ...options,
338
+ // Use element mode if available
339
+ });
340
+ }
341
+ // ==================== Evaluate ====================
342
+ /** Evaluate a function in the context of the matched element. */
343
+ async evaluate(pageFunction, arg) {
344
+ const escapedSelector = this._selector.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
345
+ const script = typeof pageFunction === 'function'
346
+ ? `(() => { const el = document.querySelector('${escapedSelector}'); return (${pageFunction.toString()})(el${arg !== undefined ? `, ${JSON.stringify(arg)}` : ''}); })()`
347
+ : pageFunction;
348
+ return this._page.evaluate(script);
349
+ }
350
+ // ==================== Filtering & Chaining ====================
351
+ /**
352
+ * Filter this locator to only include elements matching additional criteria.
353
+ *
354
+ * @param options - Filter criteria (hasText, hasNotText)
355
+ * @returns A new filtered Locator
356
+ */
357
+ filter(options) {
358
+ if (options?.hasText) {
359
+ const text = options.hasText instanceof RegExp
360
+ ? options.hasText.source
361
+ : options.hasText;
362
+ // Use :has-text pseudo-class concept; fall back to combined selector
363
+ return new Locator(this._page, `${this._selector}:has-text("${text}")`);
364
+ }
365
+ return new Locator(this._page, this._selector);
366
+ }
367
+ /**
368
+ * Create a locator matching elements that match either this or the given locator.
369
+ *
370
+ * @param locator - Another locator to OR with
371
+ * @returns A new combined Locator
372
+ */
373
+ or(locator) {
374
+ return new Locator(this._page, `${this._selector}, ${locator._selector}`);
375
+ }
376
+ /**
377
+ * Create a locator matching elements that match both this AND the given locator.
378
+ *
379
+ * @param locator - Another locator to AND with
380
+ * @returns A new combined Locator
381
+ */
382
+ and(locator) {
383
+ return new Locator(this._page, `${this._selector}${locator._selector}`);
384
+ }
385
+ /**
386
+ * Create a child locator by combining selectors.
387
+ *
388
+ * The resulting selector targets elements matching `selector`
389
+ * that are descendants of this locator's element.
390
+ */
391
+ locator(selector) {
392
+ const converted = convertSelector(selector);
393
+ const combined = `${this._selector} ${converted}`;
394
+ return new Locator(this._page, combined);
395
+ }
396
+ /**
397
+ * Return a locator for the first matching element.
398
+ *
399
+ * Uses :first-of-type when the selector is a simple tag, otherwise
400
+ * appends :nth-of-type(1) as a best-effort CSS approximation.
401
+ * For evaluate-dependent lookups, uses nth(0) semantics.
402
+ */
403
+ get first() {
404
+ // Construct an evaluate-based NthLocator wrapping the base selector
405
+ return new NthLocator(this._page, this._selector, 0);
406
+ }
407
+ /**
408
+ * Return a locator for the last matching element.
409
+ */
410
+ get last() {
411
+ return new NthLocator(this._page, this._selector, -1);
412
+ }
413
+ /**
414
+ * Return a locator for the nth matching element (0-indexed).
415
+ *
416
+ * @param index - Zero-based index
417
+ */
418
+ nth(index) {
419
+ return new NthLocator(this._page, this._selector, index);
420
+ }
421
+ /**
422
+ * Get a locator for elements matching text content.
423
+ *
424
+ * @param text - Text to search for
425
+ * @returns A new Locator targeting elements with matching text
426
+ */
427
+ getByText(text) {
428
+ const textStr = text instanceof RegExp ? text.source : text;
429
+ return new Locator(this._page, textStr);
430
+ }
431
+ /** Return the selector string this locator targets. */
432
+ toString() {
433
+ return `Locator(${this._selector})`;
434
+ }
435
+ }
436
+ /**
437
+ * NthLocator wraps a base selector and an index.
438
+ *
439
+ * Uses the native `index` parameter supported by Owl Browser tools
440
+ * to target the Nth matching element without JavaScript evaluate hacks.
441
+ * When `index >= 0`, targets that specific match. When `index === -1`,
442
+ * targets the last match.
443
+ */
444
+ export class NthLocator extends Locator {
445
+ _baseSelector;
446
+ _index; // -1 means "last"
447
+ constructor(page, baseSelector, index) {
448
+ super(page, baseSelector);
449
+ this._baseSelector = baseSelector;
450
+ this._index = index;
451
+ }
452
+ /**
453
+ * Execute a tool with the base selector and index parameter.
454
+ * @internal
455
+ */
456
+ _nthExecute(toolName, params = {}) {
457
+ return this._page._execute(toolName, {
458
+ selector: this._baseSelector,
459
+ index: this._index,
460
+ ...params,
461
+ });
462
+ }
463
+ async click(options) {
464
+ if (options?.button === 'right') {
465
+ await this._nthExecute('browser_right_click');
466
+ }
467
+ else if (options?.clickCount === 2) {
468
+ await this._nthExecute('browser_double_click');
469
+ }
470
+ else {
471
+ await this._nthExecute('browser_click');
472
+ }
473
+ }
474
+ async dblclick(options) {
475
+ void options;
476
+ await this._nthExecute('browser_double_click');
477
+ }
478
+ async fill(value, options) {
479
+ void options;
480
+ await this._nthExecute('browser_clear_input');
481
+ await this._nthExecute('browser_type', { text: value });
482
+ }
483
+ async type(text, options) {
484
+ void options;
485
+ await this._nthExecute('browser_type', { text });
486
+ }
487
+ async press(key, options) {
488
+ void options;
489
+ await this._nthExecute('browser_focus');
490
+ await this._page.keyboard.press(key);
491
+ }
492
+ async hover(options) {
493
+ void options;
494
+ await this._nthExecute('browser_hover');
495
+ }
496
+ async focus(options) {
497
+ void options;
498
+ await this._nthExecute('browser_focus');
499
+ }
500
+ async check(options) {
501
+ void options;
502
+ const checked = await this.isChecked();
503
+ if (!checked) {
504
+ await this._nthExecute('browser_click');
505
+ }
506
+ }
507
+ async uncheck(options) {
508
+ void options;
509
+ const checked = await this.isChecked();
510
+ if (checked) {
511
+ await this._nthExecute('browser_click');
512
+ }
513
+ }
514
+ async textContent() {
515
+ const result = await this._nthExecute('browser_extract_text');
516
+ if (result === null || result === undefined)
517
+ return null;
518
+ if (typeof result === 'string')
519
+ return result;
520
+ const res = result;
521
+ return res['text'] ?? String(res['result'] ?? '');
522
+ }
523
+ async innerHTML() {
524
+ const result = await this._nthExecute('browser_get_html');
525
+ if (typeof result === 'string')
526
+ return result;
527
+ const res = result;
528
+ return String(res['html'] ?? res['result'] ?? '');
529
+ }
530
+ async innerText() {
531
+ const text = await this.textContent();
532
+ return text ?? '';
533
+ }
534
+ async inputValue() {
535
+ const result = await this._nthExecute('browser_get_attribute', {
536
+ attribute: 'value',
537
+ });
538
+ if (typeof result === 'string')
539
+ return result;
540
+ const res = result;
541
+ return String(res?.['value'] ?? '');
542
+ }
543
+ async isVisible() {
544
+ try {
545
+ const result = await this._nthExecute('browser_is_visible');
546
+ const res = result;
547
+ if (res['error_code'] === 'visible' || res['visible'] === true)
548
+ return true;
549
+ return false;
550
+ }
551
+ catch {
552
+ return false;
553
+ }
554
+ }
555
+ async isChecked() {
556
+ try {
557
+ const result = await this._nthExecute('browser_is_checked');
558
+ const res = result;
559
+ if (res['error_code'] === 'checked' || res['checked'] === true)
560
+ return true;
561
+ return false;
562
+ }
563
+ catch {
564
+ return false;
565
+ }
566
+ }
567
+ async isEnabled() {
568
+ try {
569
+ const result = await this._nthExecute('browser_is_enabled');
570
+ const res = result;
571
+ if (res['error_code'] === 'enabled' || res['enabled'] === true)
572
+ return true;
573
+ return false;
574
+ }
575
+ catch {
576
+ return false;
577
+ }
578
+ }
579
+ async isEditable() {
580
+ try {
581
+ const result = await this._nthExecute('browser_is_editable');
582
+ const res = result;
583
+ return res['error_code'] === 'editable';
584
+ }
585
+ catch {
586
+ return false;
587
+ }
588
+ }
589
+ async getAttribute(name) {
590
+ const result = await this._nthExecute('browser_get_attribute', {
591
+ attribute: name,
592
+ });
593
+ if (result === null || result === undefined)
594
+ return null;
595
+ if (typeof result === 'string')
596
+ return result.length > 0 ? result : null;
597
+ const res = result;
598
+ const val = res['value'] ?? res['result'];
599
+ if (val === undefined || val === null)
600
+ return null;
601
+ return String(val);
602
+ }
603
+ async dispatchEvent(type, eventInit) {
604
+ await this._nthExecute('browser_dispatch_event', {
605
+ event_type: type,
606
+ bubbles: eventInit?.['bubbles'] !== false,
607
+ });
608
+ }
609
+ async boundingBox() {
610
+ try {
611
+ const result = await this._nthExecute('browser_get_bounding_box');
612
+ const res = result;
613
+ return {
614
+ x: Number(res['x'] ?? 0),
615
+ y: Number(res['y'] ?? 0),
616
+ width: Number(res['width'] ?? 0),
617
+ height: Number(res['height'] ?? 0),
618
+ };
619
+ }
620
+ catch {
621
+ return null;
622
+ }
623
+ }
624
+ async scrollIntoViewIfNeeded() {
625
+ await this._nthExecute('browser_scroll_to_element');
626
+ }
627
+ async selectText() {
628
+ await this._nthExecute('browser_select_all');
629
+ }
630
+ async count() {
631
+ // Count uses the base selector (index is irrelevant for counting)
632
+ try {
633
+ const result = await this._page._execute('browser_count_elements', {
634
+ selector: this._baseSelector,
635
+ });
636
+ return typeof result === 'number' ? result : Number(result ?? 0);
637
+ }
638
+ catch {
639
+ return 0;
640
+ }
641
+ }
642
+ toString() {
643
+ return `NthLocator(${this._baseSelector}[${this._index}])`;
644
+ }
645
+ }
646
+ //# sourceMappingURL=locator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator.js","sourceRoot":"","sources":["../../src/playwright/locator.ts"],"names":[],"mappings":"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"}