@olib-ai/owl-browser-sdk 2.0.5 → 2.0.7

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 (111) 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/index.d.ts +1 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +2 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/playwright/browser-type.d.ts +101 -0
  59. package/dist/playwright/browser-type.d.ts.map +1 -0
  60. package/dist/playwright/browser-type.js +134 -0
  61. package/dist/playwright/browser-type.js.map +1 -0
  62. package/dist/playwright/browser.d.ts +98 -0
  63. package/dist/playwright/browser.d.ts.map +1 -0
  64. package/dist/playwright/browser.js +229 -0
  65. package/dist/playwright/browser.js.map +1 -0
  66. package/dist/playwright/context.d.ts +217 -0
  67. package/dist/playwright/context.d.ts.map +1 -0
  68. package/dist/playwright/context.js +518 -0
  69. package/dist/playwright/context.js.map +1 -0
  70. package/dist/playwright/extractor.d.ts +108 -0
  71. package/dist/playwright/extractor.d.ts.map +1 -0
  72. package/dist/playwright/extractor.js +404 -0
  73. package/dist/playwright/extractor.js.map +1 -0
  74. package/dist/playwright/frame.d.ts +147 -0
  75. package/dist/playwright/frame.d.ts.map +1 -0
  76. package/dist/playwright/frame.js +492 -0
  77. package/dist/playwright/frame.js.map +1 -0
  78. package/dist/playwright/index.d.ts +163 -0
  79. package/dist/playwright/index.d.ts.map +1 -0
  80. package/dist/playwright/index.js +313 -0
  81. package/dist/playwright/index.js.map +1 -0
  82. package/dist/playwright/keyboard.d.ts +74 -0
  83. package/dist/playwright/keyboard.d.ts.map +1 -0
  84. package/dist/playwright/keyboard.js +187 -0
  85. package/dist/playwright/keyboard.js.map +1 -0
  86. package/dist/playwright/locator.d.ts +237 -0
  87. package/dist/playwright/locator.d.ts.map +1 -0
  88. package/dist/playwright/locator.js +667 -0
  89. package/dist/playwright/locator.js.map +1 -0
  90. package/dist/playwright/mouse.d.ts +82 -0
  91. package/dist/playwright/mouse.d.ts.map +1 -0
  92. package/dist/playwright/mouse.js +137 -0
  93. package/dist/playwright/mouse.js.map +1 -0
  94. package/dist/playwright/page-helpers.d.ts +267 -0
  95. package/dist/playwright/page-helpers.d.ts.map +1 -0
  96. package/dist/playwright/page-helpers.js +449 -0
  97. package/dist/playwright/page-helpers.js.map +1 -0
  98. package/dist/playwright/page.d.ts +605 -0
  99. package/dist/playwright/page.d.ts.map +1 -0
  100. package/dist/playwright/page.js +1698 -0
  101. package/dist/playwright/page.js.map +1 -0
  102. package/dist/playwright/response.d.ts +100 -0
  103. package/dist/playwright/response.d.ts.map +1 -0
  104. package/dist/playwright/response.js +194 -0
  105. package/dist/playwright/response.js.map +1 -0
  106. package/dist/playwright/types.d.ts +354 -0
  107. package/dist/playwright/types.d.ts.map +1 -0
  108. package/dist/playwright/types.js +8 -0
  109. package/dist/playwright/types.js.map +1 -0
  110. package/openapi.json +327 -35
  111. package/package.json +10 -1
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Schema-driven HTML data extraction using cheerio.
3
+ *
4
+ * Pure functions for extracting structured data from HTML strings using
5
+ * a declarative field schema. No side effects, no browser interaction.
6
+ *
7
+ * String field syntax (backward compatible):
8
+ * "selector" -> textContent of the matched element
9
+ * "selector@attr" -> attribute value of the matched element
10
+ * "@attr" -> attribute value of the container itself
11
+ *
12
+ * Object field specs add: type coercion, regex, transforms, nested
13
+ * extraction, multi-value collection, and defaults.
14
+ */
15
+ import { load } from 'cheerio';
16
+ // ==================== Public Functions ====================
17
+ /**
18
+ * Extract structured data from all elements matching containerSelector.
19
+ *
20
+ * @param html - Raw HTML string to parse
21
+ * @param containerSelector - CSS selector for repeating container elements
22
+ * @param fields - Mapping of output field names to extraction specs
23
+ * @returns Array of objects, one per matched container
24
+ */
25
+ export function queryAll(html, containerSelector, fields) {
26
+ const $ = load(html);
27
+ const results = [];
28
+ $(containerSelector).each((_i, el) => {
29
+ results.push(extractItem($, $(el), fields));
30
+ });
31
+ return results;
32
+ }
33
+ /**
34
+ * Extract structured data from the first element matching containerSelector.
35
+ *
36
+ * @param html - Raw HTML string to parse
37
+ * @param containerSelector - CSS selector for the container element
38
+ * @param fields - Mapping of output field names to extraction specs
39
+ * @returns Single record or null if no match
40
+ */
41
+ export function queryFirst(html, containerSelector, fields) {
42
+ const $ = load(html);
43
+ const container = $(containerSelector).first();
44
+ if (container.length === 0)
45
+ return null;
46
+ return extractItem($, container, fields);
47
+ }
48
+ /**
49
+ * Extract a <table> as an array of records.
50
+ *
51
+ * Auto-detects headers from <th> or the first row. Handles colspan/rowspan.
52
+ *
53
+ * @param html - Raw HTML string
54
+ * @param selector - CSS selector for the table (default: 'table')
55
+ * @param options - Optional headers override
56
+ * @returns Array of records with header keys
57
+ */
58
+ export function extractTable(html, selector = 'table', options) {
59
+ const $ = load(html);
60
+ const table = $(selector).first();
61
+ if (table.length === 0)
62
+ return [];
63
+ let headers = options?.headers ?? [];
64
+ // Auto-detect headers from <th> elements
65
+ if (headers.length === 0) {
66
+ const thElements = table.find('thead th, tr:first-child th');
67
+ if (thElements.length > 0) {
68
+ thElements.each((_i, th) => {
69
+ headers.push($(th).text().trim());
70
+ });
71
+ }
72
+ }
73
+ // If still no headers, use first row as headers
74
+ const rows = table.find('tbody tr, tr');
75
+ let startIdx = 0;
76
+ if (headers.length === 0 && rows.length > 0) {
77
+ const firstRow = $(rows[0]);
78
+ firstRow.find('td, th').each((_i, cell) => {
79
+ headers.push($(cell).text().trim());
80
+ });
81
+ startIdx = 1;
82
+ }
83
+ // Skip header rows in tbody
84
+ const dataRows = [];
85
+ rows.each((i, row) => {
86
+ if (i < startIdx)
87
+ return;
88
+ // Skip rows that are purely <th> rows (header rows in tbody)
89
+ const tds = $(row).find('td');
90
+ const ths = $(row).find('th');
91
+ if (tds.length === 0 && ths.length > 0)
92
+ return;
93
+ dataRows.push($(row));
94
+ });
95
+ // Build a grid to handle colspan/rowspan
96
+ const grid = [];
97
+ for (let r = 0; r < dataRows.length; r++) {
98
+ if (!grid[r])
99
+ grid[r] = [];
100
+ const cells = dataRows[r].find('td, th');
101
+ let cellIdx = 0;
102
+ cells.each((_ci, cell) => {
103
+ const $cell = $(cell);
104
+ const colspan = parseInt($cell.attr('colspan') ?? '1', 10) || 1;
105
+ const rowspan = parseInt($cell.attr('rowspan') ?? '1', 10) || 1;
106
+ const text = $cell.text().trim();
107
+ // Find next empty column in current row
108
+ while (grid[r][cellIdx] !== undefined)
109
+ cellIdx++;
110
+ for (let dr = 0; dr < rowspan; dr++) {
111
+ for (let dc = 0; dc < colspan; dc++) {
112
+ if (!grid[r + dr])
113
+ grid[r + dr] = [];
114
+ grid[r + dr][cellIdx + dc] = text;
115
+ }
116
+ }
117
+ cellIdx += colspan;
118
+ });
119
+ }
120
+ // Convert grid to records
121
+ const results = [];
122
+ for (const row of grid) {
123
+ if (!row)
124
+ continue;
125
+ const record = {};
126
+ for (let c = 0; c < headers.length; c++) {
127
+ const key = headers[c] || `col_${c}`;
128
+ record[key] = row[c] ?? null;
129
+ }
130
+ results.push(record);
131
+ }
132
+ return results;
133
+ }
134
+ /**
135
+ * Extract meta tags from HTML.
136
+ *
137
+ * @param html - Raw HTML string
138
+ * @returns MetaData with title, description, canonical, og, twitter, and other meta tags
139
+ */
140
+ export function extractMeta(html) {
141
+ const $ = load(html);
142
+ const result = {
143
+ title: null,
144
+ description: null,
145
+ canonical: null,
146
+ og: {},
147
+ twitter: {},
148
+ other: {},
149
+ };
150
+ // Title
151
+ const titleEl = $('title').first();
152
+ if (titleEl.length > 0) {
153
+ result.title = titleEl.text().trim() || null;
154
+ }
155
+ // Canonical
156
+ const canonicalEl = $('link[rel="canonical"]').first();
157
+ if (canonicalEl.length > 0) {
158
+ result.canonical = canonicalEl.attr('href') ?? null;
159
+ }
160
+ // Meta tags
161
+ $('meta').each((_i, el) => {
162
+ const $el = $(el);
163
+ const name = $el.attr('name') ?? $el.attr('property') ?? '';
164
+ const content = $el.attr('content') ?? '';
165
+ if (!name || !content)
166
+ return;
167
+ if (name === 'description') {
168
+ result.description = content;
169
+ }
170
+ else if (name.startsWith('og:')) {
171
+ result.og[name.slice(3)] = content;
172
+ }
173
+ else if (name.startsWith('twitter:')) {
174
+ result.twitter[name.slice(8)] = content;
175
+ }
176
+ else {
177
+ result.other[name] = content;
178
+ }
179
+ });
180
+ return result;
181
+ }
182
+ /**
183
+ * Extract JSON-LD structured data from HTML.
184
+ *
185
+ * @param html - Raw HTML string
186
+ * @returns Array of parsed JSON-LD objects
187
+ */
188
+ export function extractStructuredData(html) {
189
+ const $ = load(html);
190
+ const results = [];
191
+ $('script[type="application/ld+json"]').each((_i, el) => {
192
+ const text = $(el).html();
193
+ if (!text)
194
+ return;
195
+ try {
196
+ const parsed = JSON.parse(text);
197
+ if (Array.isArray(parsed)) {
198
+ results.push(...parsed);
199
+ }
200
+ else if (typeof parsed === 'object' && parsed !== null) {
201
+ results.push(parsed);
202
+ }
203
+ }
204
+ catch {
205
+ // Skip malformed JSON-LD
206
+ }
207
+ });
208
+ return results;
209
+ }
210
+ /**
211
+ * Count elements matching a CSS selector.
212
+ *
213
+ * @param html - Raw HTML string
214
+ * @param selector - CSS selector
215
+ * @returns Number of matching elements
216
+ */
217
+ export function countElements(html, selector) {
218
+ const $ = load(html);
219
+ return $(selector).length;
220
+ }
221
+ // ==================== Internal Helpers ====================
222
+ /**
223
+ * Extract all fields from a single container element.
224
+ */
225
+ function extractItem($, container, fields) {
226
+ const record = {};
227
+ for (const [name, spec] of Object.entries(fields)) {
228
+ record[name] = resolveField($, container, spec);
229
+ }
230
+ return record;
231
+ }
232
+ /**
233
+ * Resolve a field spec (string or object) to a value.
234
+ */
235
+ function resolveField($, container, spec) {
236
+ if (typeof spec === 'string') {
237
+ return extractStringField($, container, spec);
238
+ }
239
+ return extractObjectField($, container, spec);
240
+ }
241
+ /**
242
+ * Extract a field value using a string spec (backward compatible).
243
+ */
244
+ function extractStringField($, container, spec) {
245
+ const atPos = spec.lastIndexOf('@');
246
+ if (atPos >= 0) {
247
+ const sel = spec.slice(0, atPos).trim();
248
+ const attr = spec.slice(atPos + 1);
249
+ const target = sel ? container.find(sel).first() : container;
250
+ if (target.length === 0)
251
+ return null;
252
+ if (attr === 'outerHTML')
253
+ return $.html(target) ?? null;
254
+ if (attr === 'innerHTML')
255
+ return target.html() ?? null;
256
+ return target.attr(attr) ?? null;
257
+ }
258
+ // No '@' -> extract text content
259
+ const el = spec.trim() ? container.find(spec).first() : container;
260
+ if (el.length === 0)
261
+ return null;
262
+ return el.text().trim() || null;
263
+ }
264
+ /**
265
+ * Extract a field value using an object spec.
266
+ */
267
+ function extractObjectField($, container, spec) {
268
+ // Handle nested extraction
269
+ if (spec.nested) {
270
+ return extractNested($, container, spec.nested);
271
+ }
272
+ const sel = spec.selector;
273
+ const attr = spec.attribute;
274
+ if (spec.all) {
275
+ // Multi-value: return array of all matches
276
+ const values = [];
277
+ const targets = sel ? container.find(sel) : container;
278
+ targets.each((_i, el) => {
279
+ let raw = extractRawValue($, $(el), attr, spec.type);
280
+ raw = applyPattern(raw, spec.pattern, spec.group);
281
+ raw = applyTransforms(raw, spec.transform);
282
+ const coerced = coerceType(raw, spec.type);
283
+ values.push(coerced ?? spec.default ?? null);
284
+ });
285
+ return values;
286
+ }
287
+ // Single value
288
+ const target = sel ? container.find(sel).first() : container;
289
+ if (target.length === 0) {
290
+ return spec.default ?? null;
291
+ }
292
+ let raw = extractRawValue($, target, attr, spec.type);
293
+ raw = applyPattern(raw, spec.pattern, spec.group);
294
+ raw = applyTransforms(raw, spec.transform);
295
+ const coerced = coerceType(raw, spec.type);
296
+ return coerced ?? spec.default ?? null;
297
+ }
298
+ /**
299
+ * Extract the raw value from an element.
300
+ */
301
+ function extractRawValue($, el, attr, type) {
302
+ if (el.length === 0)
303
+ return null;
304
+ if (type === 'html')
305
+ return $.html(el) ?? null;
306
+ if (type === 'innerHtml')
307
+ return el.html() ?? null;
308
+ if (attr) {
309
+ if (attr === 'outerHTML')
310
+ return $.html(el) ?? null;
311
+ if (attr === 'innerHTML')
312
+ return el.html() ?? null;
313
+ return el.attr(attr) ?? null;
314
+ }
315
+ return el.text().trim() || null;
316
+ }
317
+ /**
318
+ * Apply a regex pattern to extract a substring.
319
+ */
320
+ function applyPattern(value, pattern, group) {
321
+ if (!pattern || value === null)
322
+ return value;
323
+ try {
324
+ const re = new RegExp(pattern);
325
+ const match = re.exec(value);
326
+ if (!match)
327
+ return null;
328
+ return match[group ?? 0] ?? null;
329
+ }
330
+ catch {
331
+ return value;
332
+ }
333
+ }
334
+ /**
335
+ * Apply a pipeline of transforms to a string value.
336
+ */
337
+ function applyTransforms(value, transforms) {
338
+ if (!transforms || value === null)
339
+ return value;
340
+ const pipeline = Array.isArray(transforms) ? transforms : [transforms];
341
+ let result = value;
342
+ for (const t of pipeline) {
343
+ if (result === null)
344
+ break;
345
+ result = applyOneTransform(result, t);
346
+ }
347
+ return result;
348
+ }
349
+ /**
350
+ * Apply a single transform to a string.
351
+ */
352
+ function applyOneTransform(value, transform) {
353
+ switch (transform) {
354
+ case 'trim':
355
+ return value.trim();
356
+ case 'lowercase':
357
+ return value.toLowerCase();
358
+ case 'uppercase':
359
+ return value.toUpperCase();
360
+ case 'number': {
361
+ const cleaned = value.replace(/[^0-9.\-,]/g, '').replace(/,/g, '');
362
+ const n = parseFloat(cleaned);
363
+ return isNaN(n) ? null : String(n);
364
+ }
365
+ case 'clean':
366
+ return value.replace(/\s+/g, ' ').trim();
367
+ case 'slug':
368
+ return value
369
+ .toLowerCase()
370
+ .replace(/[^a-z0-9]+/g, '-')
371
+ .replace(/^-|-$/g, '');
372
+ default:
373
+ return value;
374
+ }
375
+ }
376
+ /**
377
+ * Coerce a value to the specified type.
378
+ */
379
+ function coerceType(value, type) {
380
+ if (value === null)
381
+ return null;
382
+ if (type === 'number') {
383
+ const cleaned = value.replace(/[^0-9.\-,]/g, '').replace(/,/g, '');
384
+ const n = parseFloat(cleaned);
385
+ return isNaN(n) ? null : n;
386
+ }
387
+ return value;
388
+ }
389
+ /**
390
+ * Extract nested sub-items within a container.
391
+ */
392
+ function extractNested($, container, nested) {
393
+ const results = [];
394
+ const elements = container.find(nested.selector);
395
+ const limit = nested.limit ?? elements.length;
396
+ elements.each((i, el) => {
397
+ if (i >= limit)
398
+ return false;
399
+ results.push(extractItem($, $(el), nested.fields));
400
+ return undefined;
401
+ });
402
+ return results;
403
+ }
404
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/playwright/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Playwright-compatible Frame and FrameLocator classes for Owl Browser.
3
+ *
4
+ * Provides frame isolation support via browser_switch_to_frame /
5
+ * browser_switch_to_main_frame tools, wrapping that mechanism into
6
+ * Playwright's Frame and FrameLocator API surfaces.
7
+ */
8
+ import type { OwlBrowser } from '../client.js';
9
+ import type { GotoOptions, WaitForSelectorOptions, ClickOptions, FillOptions, TypeOptions, CheckOptions, SelectOptionValue, SelectOptionOptions, BoundingBox } from './types.js';
10
+ import type { Locator } from './locator.js';
11
+ /**
12
+ * Frame represents an iframe or the main frame of a page.
13
+ *
14
+ * Operations on a Frame are scoped to that frame's DOM.
15
+ * After switching to a frame, subsequent commands target that frame
16
+ * until switchToMain() is called.
17
+ */
18
+ export declare class Frame {
19
+ private readonly _client;
20
+ private readonly _contextId;
21
+ private readonly _frameSelector;
22
+ private readonly _name;
23
+ private readonly _url;
24
+ private readonly _parentFrame;
25
+ private _detached;
26
+ constructor(client: OwlBrowser, contextId: string, frameSelector: string | null, name?: string, url?: string, parentFrame?: Frame | null);
27
+ /** Frame name attribute or generated identifier. */
28
+ name(): string;
29
+ /** Frame URL. */
30
+ url(): string;
31
+ /** Whether this is the main frame. */
32
+ isMainFrame(): boolean;
33
+ /** Whether the frame has been detached. */
34
+ isDetached(): boolean;
35
+ /** Parent frame, or null for the main frame. */
36
+ parentFrame(): Frame | null;
37
+ /** Child frames. Returns empty array (requires runtime enumeration). */
38
+ childFrames(): Frame[];
39
+ /**
40
+ * Switch browser focus to this frame.
41
+ * Subsequent DOM operations will target this frame's document.
42
+ */
43
+ focus(): Promise<void>;
44
+ /**
45
+ * Navigate this frame to a URL.
46
+ *
47
+ * @param url - Target URL
48
+ * @param options - Navigation options
49
+ */
50
+ goto(url: string, options?: GotoOptions): Promise<void>;
51
+ /** Click an element within this frame. */
52
+ click(selector: string, options?: ClickOptions): Promise<void>;
53
+ /** Fill an input within this frame. */
54
+ fill(selector: string, value: string, options?: FillOptions): Promise<void>;
55
+ /** Type text into an input within this frame. */
56
+ type(selector: string, text: string, options?: TypeOptions): Promise<void>;
57
+ /** Check a checkbox within this frame. */
58
+ check(selector: string, options?: CheckOptions): Promise<void>;
59
+ /** Uncheck a checkbox within this frame. */
60
+ uncheck(selector: string, options?: CheckOptions): Promise<void>;
61
+ /** Select an option from a dropdown within this frame. */
62
+ selectOption(selector: string, values: SelectOptionValue, options?: SelectOptionOptions): Promise<string[]>;
63
+ /** Wait for a selector within this frame. */
64
+ waitForSelector(selector: string, options?: WaitForSelectorOptions): Promise<void>;
65
+ /** Extract text content of an element within this frame. */
66
+ textContent(selector: string): Promise<string | null>;
67
+ /** Get inner HTML of an element within this frame. */
68
+ innerHTML(selector: string): Promise<string>;
69
+ /** Get an attribute value from an element within this frame. */
70
+ getAttribute(selector: string, name: string): Promise<string | null>;
71
+ /** Get bounding box of an element within this frame. */
72
+ boundingBox(selector: string): Promise<BoundingBox | null>;
73
+ /** Evaluate JavaScript within this frame. */
74
+ evaluate<R>(pageFunction: string | ((...args: unknown[]) => R), arg?: unknown): Promise<R>;
75
+ /** Create a Locator scoped to this frame (returns Locator from page). */
76
+ locator(_selector: string): never;
77
+ /** Mark frame as detached. */
78
+ _markDetached(): void;
79
+ }
80
+ /**
81
+ * FrameLocator provides a scoped interface for interacting with iframe content.
82
+ *
83
+ * Usage: page.frameLocator('#iframe').locator('#button').click()
84
+ *
85
+ * The FrameLocator switches to the target frame before each operation,
86
+ * then creates a Locator that operates within that frame context.
87
+ */
88
+ export declare class FrameLocator {
89
+ private readonly _client;
90
+ private readonly _contextId;
91
+ private readonly _frameSelector;
92
+ private readonly _page;
93
+ constructor(client: OwlBrowser, contextId: string, frameSelector: string, page: {
94
+ locator(selector: string): Locator;
95
+ });
96
+ /**
97
+ * Create a Locator for an element inside this frame.
98
+ *
99
+ * The returned Locator will switch to this frame before executing operations.
100
+ *
101
+ * @param selector - CSS selector within the frame
102
+ * @returns A FrameScopedLocator that auto-switches to the iframe
103
+ */
104
+ locator(selector: string): FrameScopedLocator;
105
+ /** Create a nested FrameLocator for iframes inside this frame. */
106
+ frameLocator(selector: string): FrameLocator;
107
+ /** Return the first matching frame locator. */
108
+ first(): FrameLocator;
109
+ /** Return the last matching frame locator. */
110
+ last(): FrameLocator;
111
+ /** Return the nth matching frame locator. */
112
+ nth(_index: number): FrameLocator;
113
+ }
114
+ /**
115
+ * A Locator that automatically switches to a specific frame before operations.
116
+ */
117
+ export declare class FrameScopedLocator {
118
+ private readonly _client;
119
+ private readonly _contextId;
120
+ private readonly _frameSelector;
121
+ private readonly _selector;
122
+ private readonly _page;
123
+ constructor(client: OwlBrowser, contextId: string, frameSelector: string, selector: string, page: {
124
+ locator(selector: string): Locator;
125
+ });
126
+ private _switchToFrame;
127
+ private _switchToMain;
128
+ /** Click the element inside the frame. */
129
+ click(): Promise<void>;
130
+ /** Fill the element inside the frame. */
131
+ fill(value: string): Promise<void>;
132
+ /** Type text into element inside the frame. */
133
+ type(text: string): Promise<void>;
134
+ /** Get text content of element inside the frame. */
135
+ textContent(): Promise<string | null>;
136
+ /** Check if element is visible inside the frame. */
137
+ isVisible(): Promise<boolean>;
138
+ /** Wait for element inside the frame. */
139
+ waitFor(options?: {
140
+ state?: string;
141
+ timeout?: number;
142
+ }): Promise<void>;
143
+ /** Create a child locator within the frame. */
144
+ locator(selector: string): FrameScopedLocator;
145
+ toString(): string;
146
+ }
147
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/playwright/frame.ts"],"names":[],"mappings":"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"}