@glubean/browser 0.1.2
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.
- package/dist/chrome.d.ts +44 -0
- package/dist/chrome.d.ts.map +1 -0
- package/dist/chrome.js +134 -0
- package/dist/chrome.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/locator.d.ts +39 -0
- package/dist/locator.d.ts.map +1 -0
- package/dist/locator.js +116 -0
- package/dist/locator.js.map +1 -0
- package/dist/metrics.d.ts +23 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +54 -0
- package/dist/metrics.js.map +1 -0
- package/dist/network.d.ts +55 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +176 -0
- package/dist/network.js.map +1 -0
- package/dist/page.d.ts +543 -0
- package/dist/page.d.ts.map +1 -0
- package/dist/page.js +1259 -0
- package/dist/page.js.map +1 -0
- package/dist/plugin.d.ts +21 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +120 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +33 -0
package/dist/page.d.ts
ADDED
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GlubeanBrowser and GlubeanPage — browser automation wrappers that integrate
|
|
3
|
+
* with the Glubean test context.
|
|
4
|
+
*
|
|
5
|
+
* `GlubeanBrowser` manages the Chrome connection (returned by the plugin factory).
|
|
6
|
+
* `GlubeanPage` wraps a single Puppeteer Page with auto-instrumentation:
|
|
7
|
+
* - `ctx.trace()` for every `goto()` navigation
|
|
8
|
+
* - `ctx.metric()` for page load and DOMContentLoaded timing
|
|
9
|
+
* - `ctx.log()` / `ctx.warn()` for browser console output and uncaught errors
|
|
10
|
+
* - `ctx.trace()` for in-page network requests (XHR, fetch) via CDP
|
|
11
|
+
*
|
|
12
|
+
* @module page
|
|
13
|
+
*/
|
|
14
|
+
import type { Browser, ElementHandle, HTTPRequest, HTTPResponse, Page } from "puppeteer-core";
|
|
15
|
+
import { type WrappedLocator } from "./locator.js";
|
|
16
|
+
/**
|
|
17
|
+
* A GlubeanPage that also exposes every Puppeteer `Page` method/property
|
|
18
|
+
* via Proxy fallthrough. GlubeanPage's own methods take priority; anything
|
|
19
|
+
* else is forwarded to the underlying `raw` Page.
|
|
20
|
+
*/
|
|
21
|
+
export type InstrumentedPage = GlubeanPage & Page;
|
|
22
|
+
/** Per-action options for interaction methods. */
|
|
23
|
+
export interface ActionOptions {
|
|
24
|
+
/** Timeout in ms (overrides the global `actionTimeout`). */
|
|
25
|
+
timeout?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Structural type for a puppeteer-compatible module.
|
|
29
|
+
*
|
|
30
|
+
* Accepts `puppeteer-core` (default), `puppeteer`, or `puppeteer-extra` with
|
|
31
|
+
* plugins pre-registered. Pass via the `puppeteer` option in `BrowserOptions`
|
|
32
|
+
* to use puppeteer-extra plugins (Stealth, Recaptcha, Adblocker, etc.).
|
|
33
|
+
*/
|
|
34
|
+
export interface PuppeteerLike {
|
|
35
|
+
launch(options?: any): Promise<Browser>;
|
|
36
|
+
connect(options?: any): Promise<Browser>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Plugin configuration options.
|
|
40
|
+
*
|
|
41
|
+
* Use **one** of these connection modes:
|
|
42
|
+
* - `launch: true` — auto-detect and launch local Chrome in headless mode
|
|
43
|
+
* - `endpoint: "CHROME_ENDPOINT"` — var key resolving to a `ws://`, `http://`, or `https://` URL
|
|
44
|
+
*
|
|
45
|
+
* When `endpoint` resolves to `http://` / `https://`, the plugin auto-discovers
|
|
46
|
+
* the WebSocket debugger URL via Chrome's `/json/version` endpoint.
|
|
47
|
+
*/
|
|
48
|
+
export type BrowserOptions = BrowserOptionsBase & ({
|
|
49
|
+
launch: true;
|
|
50
|
+
executablePath?: string;
|
|
51
|
+
endpoint?: never;
|
|
52
|
+
} | {
|
|
53
|
+
endpoint: string;
|
|
54
|
+
launch?: never;
|
|
55
|
+
executablePath?: never;
|
|
56
|
+
});
|
|
57
|
+
/** Auto-screenshot behavior. */
|
|
58
|
+
export type ScreenshotMode = "off" | "on-failure" | "every-step";
|
|
59
|
+
/** Network trace filter configuration. */
|
|
60
|
+
export interface NetworkTraceOptions {
|
|
61
|
+
/**
|
|
62
|
+
* Content-type prefixes to include. Requests whose `content-type` response
|
|
63
|
+
* header starts with any of these prefixes are traced; the rest are skipped.
|
|
64
|
+
*
|
|
65
|
+
* Ignored when `filter` is provided.
|
|
66
|
+
*
|
|
67
|
+
* @default ["application/json", "text/html"]
|
|
68
|
+
*/
|
|
69
|
+
include?: string[];
|
|
70
|
+
/**
|
|
71
|
+
* URL paths to exclude. Pass `[]` to keep everything.
|
|
72
|
+
* Ignored when `filter` is provided.
|
|
73
|
+
*
|
|
74
|
+
* @default ["/favicon.ico", "/favicon.png", "/apple-touch-icon.png", "/apple-touch-icon-precomposed.png"]
|
|
75
|
+
*/
|
|
76
|
+
excludePaths?: string[];
|
|
77
|
+
/**
|
|
78
|
+
* Custom predicate. When provided, overrides `include` and `excludePaths`.
|
|
79
|
+
* Return `true` to trace the request, `false` to skip.
|
|
80
|
+
*/
|
|
81
|
+
filter?: (req: {
|
|
82
|
+
url: string;
|
|
83
|
+
contentType: string;
|
|
84
|
+
status: number;
|
|
85
|
+
}) => boolean;
|
|
86
|
+
}
|
|
87
|
+
/** Checks to apply in `expectResponse()`. */
|
|
88
|
+
export interface ResponseChecks {
|
|
89
|
+
/** Expected status code, or a predicate. */
|
|
90
|
+
status?: number | ((s: number) => boolean);
|
|
91
|
+
/** Assert that response headers contain the given substrings. */
|
|
92
|
+
headerContains?: Record<string, string>;
|
|
93
|
+
}
|
|
94
|
+
interface BrowserOptionsBase {
|
|
95
|
+
/**
|
|
96
|
+
* Custom puppeteer-compatible instance (e.g. `puppeteer-extra` with plugins).
|
|
97
|
+
*
|
|
98
|
+
* When provided, Glubean uses this instance for `launch()` / `connect()`
|
|
99
|
+
* instead of the default `puppeteer-core` import. All puppeteer-extra plugins
|
|
100
|
+
* registered on the instance will be active on every page.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* import puppeteerExtra from "puppeteer-extra";
|
|
105
|
+
* import StealthPlugin from "puppeteer-extra-plugin-stealth";
|
|
106
|
+
* puppeteerExtra.use(StealthPlugin());
|
|
107
|
+
*
|
|
108
|
+
* browser({ launch: true, puppeteer: puppeteerExtra })
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
puppeteer?: PuppeteerLike;
|
|
112
|
+
/**
|
|
113
|
+
* Optional var key whose runtime value is prepended to relative URLs in `goto()`.
|
|
114
|
+
* @example "APP_URL"
|
|
115
|
+
*/
|
|
116
|
+
baseUrl?: string;
|
|
117
|
+
/**
|
|
118
|
+
* Network request tracing.
|
|
119
|
+
*
|
|
120
|
+
* - `true` — trace with default filter (document + JSON only)
|
|
121
|
+
* - `false` — disable network tracing
|
|
122
|
+
* - `object` — custom filter configuration
|
|
123
|
+
*
|
|
124
|
+
* Default: `true`.
|
|
125
|
+
*/
|
|
126
|
+
networkTrace?: boolean | NetworkTraceOptions;
|
|
127
|
+
/** Emit `ctx.metric()` for navigation timing. Default: true. */
|
|
128
|
+
metrics?: boolean;
|
|
129
|
+
/** Forward browser console output to `ctx.log()`/`ctx.warn()`. Default: true. */
|
|
130
|
+
consoleForward?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Auto-screenshot behavior.
|
|
133
|
+
* - `"off"` — no automatic screenshots
|
|
134
|
+
* - `"on-failure"` — capture a screenshot when a step or test fails (default)
|
|
135
|
+
* - `"every-step"` — capture after every goto/click/type AND on failure
|
|
136
|
+
*/
|
|
137
|
+
screenshot?: ScreenshotMode;
|
|
138
|
+
/** Directory for auto-screenshots. Default: `".glubean/screenshots"`. */
|
|
139
|
+
screenshotDir?: string;
|
|
140
|
+
/** Default timeout (ms) for Locator auto-waiting on `click()`/`type()` etc. Default: 30 000. */
|
|
141
|
+
actionTimeout?: number;
|
|
142
|
+
/**
|
|
143
|
+
* Extra options forwarded to `puppeteer.launch()`.
|
|
144
|
+
*
|
|
145
|
+
* Merged with Glubean defaults (`headless: true`, `--no-sandbox`, etc.).
|
|
146
|
+
* Your values take priority over defaults.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* browser({
|
|
151
|
+
* launch: true,
|
|
152
|
+
* launchOptions: { headless: false, slowMo: 100, devtools: true },
|
|
153
|
+
* })
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
launchOptions?: Record<string, unknown>;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Structured interaction record emitted by browser methods.
|
|
160
|
+
*
|
|
161
|
+
* Matches the `GlubeanAction` shape from `@glubean/sdk` via structural typing.
|
|
162
|
+
*/
|
|
163
|
+
export interface BrowserAction {
|
|
164
|
+
category: string;
|
|
165
|
+
target: string;
|
|
166
|
+
duration: number;
|
|
167
|
+
status: "ok" | "error" | "timeout";
|
|
168
|
+
detail?: Record<string, unknown>;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Structured event emitted for observations/artifacts (screenshots, console errors).
|
|
172
|
+
*
|
|
173
|
+
* Matches the `GlubeanEvent` shape from `@glubean/sdk` via structural typing.
|
|
174
|
+
*/
|
|
175
|
+
export interface BrowserEvent {
|
|
176
|
+
type: string;
|
|
177
|
+
data: Record<string, unknown>;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Minimal subset of TestContext needed by the browser plugin.
|
|
181
|
+
*
|
|
182
|
+
* Defined here to avoid a hard import dependency on the SDK's internal types,
|
|
183
|
+
* keeping the plugin compatible across SDK versions via structural typing.
|
|
184
|
+
*/
|
|
185
|
+
export interface BrowserTestContext {
|
|
186
|
+
/** Test identifier used for namespacing screenshots. */
|
|
187
|
+
testId?: string;
|
|
188
|
+
action(a: BrowserAction): void;
|
|
189
|
+
event(ev: BrowserEvent): void;
|
|
190
|
+
trace(request: {
|
|
191
|
+
name?: string;
|
|
192
|
+
method: string;
|
|
193
|
+
url: string;
|
|
194
|
+
status: number;
|
|
195
|
+
duration: number;
|
|
196
|
+
}): void;
|
|
197
|
+
metric(name: string, value: number, options?: {
|
|
198
|
+
unit?: string;
|
|
199
|
+
tags?: Record<string, string>;
|
|
200
|
+
}): void;
|
|
201
|
+
log(message: string, data?: unknown): void;
|
|
202
|
+
warn(condition: boolean, message: string): void;
|
|
203
|
+
/** Save an artifact file. Optional — present when SDK >= 0.13.0. */
|
|
204
|
+
saveArtifact?(name: string, content: string | Uint8Array, options?: {
|
|
205
|
+
type?: string;
|
|
206
|
+
mimeType?: string;
|
|
207
|
+
}): Promise<string>;
|
|
208
|
+
/** Directory where artifacts are stored. Optional — present when SDK >= 0.13.0. */
|
|
209
|
+
readonly artifactDir?: string;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Connected browser instance returned by the plugin.
|
|
213
|
+
*
|
|
214
|
+
* Call `newPage(ctx)` to create an instrumented page wired to the test context.
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```ts
|
|
218
|
+
* const pg = await chrome.newPage(ctx);
|
|
219
|
+
* await pg.goto("/dashboard");
|
|
220
|
+
* await pg.close();
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export declare class GlubeanBrowser {
|
|
224
|
+
private readonly _getBrowser;
|
|
225
|
+
private readonly _baseUrl;
|
|
226
|
+
private readonly _options;
|
|
227
|
+
private _openPages;
|
|
228
|
+
private _closeTimer;
|
|
229
|
+
/** @internal — created by the plugin factory. */
|
|
230
|
+
constructor(getBrowser: () => Promise<Browser>, baseUrl: string | undefined, options: BrowserOptions);
|
|
231
|
+
/**
|
|
232
|
+
* Create a new instrumented page wired to the given test context.
|
|
233
|
+
*
|
|
234
|
+
* Each call creates a fresh browser page. Remember to call `page.close()`
|
|
235
|
+
* in your teardown (or use `test.extend()` with a lifecycle factory).
|
|
236
|
+
*/
|
|
237
|
+
newPage(ctx: BrowserTestContext): Promise<InstrumentedPage>;
|
|
238
|
+
private _scheduleClose;
|
|
239
|
+
/** Disconnect from the browser without closing it. Useful for remote Chrome. */
|
|
240
|
+
disconnect(): Promise<void>;
|
|
241
|
+
/** Close the browser and terminate the Chrome process. */
|
|
242
|
+
close(): Promise<void>;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Instrumented browser page with auto-tracing, metrics, and console forwarding.
|
|
246
|
+
*
|
|
247
|
+
* Wraps a subset of Puppeteer's Page API. For advanced operations, use `.raw`.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```ts
|
|
251
|
+
* await page.goto("/login");
|
|
252
|
+
* await page.type("#email", "user@test.com");
|
|
253
|
+
* await page.click('button[type="submit"]');
|
|
254
|
+
* const title = await page.title();
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
export declare class GlubeanPage {
|
|
258
|
+
/** The underlying Puppeteer Page for advanced use cases. */
|
|
259
|
+
readonly raw: Page;
|
|
260
|
+
private readonly _baseUrl;
|
|
261
|
+
private readonly _ctx;
|
|
262
|
+
private readonly _metricsEnabled;
|
|
263
|
+
private readonly _screenshotMode;
|
|
264
|
+
private readonly _screenshotDir;
|
|
265
|
+
private readonly _testId;
|
|
266
|
+
private readonly _actionTimeout;
|
|
267
|
+
private _stepCounter;
|
|
268
|
+
private _networkCleanup;
|
|
269
|
+
private constructor();
|
|
270
|
+
/** @internal */
|
|
271
|
+
static _create(page: Page, baseUrl: string | undefined, ctx: BrowserTestContext, options: BrowserOptions, runtimeTestId?: string): Promise<InstrumentedPage>;
|
|
272
|
+
private _formatTimestamp;
|
|
273
|
+
private _sanitizeLabel;
|
|
274
|
+
private _ensureDir;
|
|
275
|
+
private _saveScreenshot;
|
|
276
|
+
private _captureStep;
|
|
277
|
+
private _captureFailure;
|
|
278
|
+
/**
|
|
279
|
+
* Capture a screenshot for a test-level failure (e.g. assertion error).
|
|
280
|
+
*
|
|
281
|
+
* Call this in the fixture's catch block to get a final-state screenshot
|
|
282
|
+
* when the test body throws.
|
|
283
|
+
*/
|
|
284
|
+
screenshotOnFailure(): Promise<void>;
|
|
285
|
+
/**
|
|
286
|
+
* Navigate to a URL. Relative paths are resolved against the configured `baseUrl`.
|
|
287
|
+
*
|
|
288
|
+
* Emits a `browser:goto` action and (if enabled) Navigation Timing metrics.
|
|
289
|
+
* Captures a screenshot on failure or after every step (depending on config).
|
|
290
|
+
*/
|
|
291
|
+
goto(url: string, options?: {
|
|
292
|
+
waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
|
|
293
|
+
}): Promise<void>;
|
|
294
|
+
/**
|
|
295
|
+
* Create a WrappedLocator for the given selector.
|
|
296
|
+
*
|
|
297
|
+
* The returned locator supports Puppeteer's chain methods (setTimeout,
|
|
298
|
+
* setVisibility, etc.) and auto-injects trace events and screenshots
|
|
299
|
+
* for action methods (click, fill, hover, scroll, type).
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* ```ts
|
|
303
|
+
* // Chain Locator options before acting
|
|
304
|
+
* await page.locator("#submit").setTimeout(5000).click();
|
|
305
|
+
*
|
|
306
|
+
* // type() extension — Locator has no native type()
|
|
307
|
+
* await page.locator("#email").type("user@test.com");
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
locator(selector: string): WrappedLocator;
|
|
311
|
+
/**
|
|
312
|
+
* Click an element matching the selector.
|
|
313
|
+
*
|
|
314
|
+
* Delegates to Puppeteer's Locator API for auto-waiting (attached, visible,
|
|
315
|
+
* enabled, stable bounding box). Emits a `browser:click` action for tracing.
|
|
316
|
+
*/
|
|
317
|
+
click(selector: string, options?: ActionOptions): Promise<void>;
|
|
318
|
+
/**
|
|
319
|
+
* Click an element and wait for a full-page navigation to complete.
|
|
320
|
+
*
|
|
321
|
+
* Convenience wrapper for `Promise.all([waitForNavigation, click])`.
|
|
322
|
+
* Emits a `browser:click-and-navigate` action with trace + metrics + screenshot.
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```ts
|
|
326
|
+
* await page.clickAndNavigate("a.external-link");
|
|
327
|
+
* await page.clickAndNavigate("a.external-link", { waitUntil: "networkidle0" });
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
330
|
+
clickAndNavigate(selector: string, options?: {
|
|
331
|
+
waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
|
|
332
|
+
timeout?: number;
|
|
333
|
+
}): Promise<void>;
|
|
334
|
+
/**
|
|
335
|
+
* Type text into an element matching the selector (appends — does not clear).
|
|
336
|
+
*
|
|
337
|
+
* Waits for the element to be actionable via Locator, then types using
|
|
338
|
+
* the ElementHandle. Use `fill()` to clear existing text before typing.
|
|
339
|
+
*/
|
|
340
|
+
type(selector: string, text: string, options?: ActionOptions): Promise<void>;
|
|
341
|
+
/**
|
|
342
|
+
* Clear an input and type a new value.
|
|
343
|
+
*
|
|
344
|
+
* Unlike `type()` which appends, `fill()` clears existing text first.
|
|
345
|
+
* Delegates to Puppeteer's Locator `fill()` for auto-waiting.
|
|
346
|
+
*/
|
|
347
|
+
fill(selector: string, value: string, options?: ActionOptions): Promise<void>;
|
|
348
|
+
/**
|
|
349
|
+
* Hover over an element matching the selector.
|
|
350
|
+
*
|
|
351
|
+
* Delegates to Puppeteer's Locator `hover()` for auto-waiting.
|
|
352
|
+
*/
|
|
353
|
+
hover(selector: string, options?: ActionOptions): Promise<void>;
|
|
354
|
+
/**
|
|
355
|
+
* Select option(s) from a `<select>` element by value.
|
|
356
|
+
*
|
|
357
|
+
* Waits for the element to be actionable via Locator, then selects values.
|
|
358
|
+
* Returns the array of selected values.
|
|
359
|
+
*/
|
|
360
|
+
select(selector: string, ...values: string[]): Promise<string[]>;
|
|
361
|
+
/**
|
|
362
|
+
* Press a keyboard key (e.g. `"Enter"`, `"Tab"`, `"Escape"`).
|
|
363
|
+
*
|
|
364
|
+
* Operates at the keyboard level — no selector or auto-wait needed.
|
|
365
|
+
*/
|
|
366
|
+
press(key: string, options?: {
|
|
367
|
+
text?: string;
|
|
368
|
+
}): Promise<void>;
|
|
369
|
+
/**
|
|
370
|
+
* Upload files to a `<input type="file">` element.
|
|
371
|
+
*
|
|
372
|
+
* Waits for the element to be actionable via Locator, then attaches files
|
|
373
|
+
* via `ElementHandle.uploadFile()` and dispatches a `change` event so
|
|
374
|
+
* frameworks like React/Vue pick up the file selection.
|
|
375
|
+
*/
|
|
376
|
+
upload(selector: string, ...filePaths: string[]): Promise<void>;
|
|
377
|
+
/**
|
|
378
|
+
* Click a button/element that triggers a file chooser dialog, then accept
|
|
379
|
+
* the given files. Use this when the file input is hidden and opened via
|
|
380
|
+
* a custom button — the common pattern in modern SPAs.
|
|
381
|
+
*
|
|
382
|
+
* For a visible `<input type="file">`, prefer `upload()` instead.
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```ts
|
|
386
|
+
* await page.chooseFile("#import-csv-btn", "./fixtures/users.csv");
|
|
387
|
+
* ```
|
|
388
|
+
*/
|
|
389
|
+
chooseFile(triggerSelector: string, ...filePaths: string[]): Promise<void>;
|
|
390
|
+
/** Query a single element by selector. */
|
|
391
|
+
$(selector: string): Promise<ElementHandle | null>;
|
|
392
|
+
/** Query all elements by selector. */
|
|
393
|
+
$$(selector: string): Promise<ElementHandle[]>;
|
|
394
|
+
/** Evaluate a function in the browser page context. */
|
|
395
|
+
evaluate<T>(fn: (...args: unknown[]) => T, ...args: unknown[]): Promise<T>;
|
|
396
|
+
/** Take a screenshot. Returns the image as a Buffer or base64 string. */
|
|
397
|
+
screenshot(options?: {
|
|
398
|
+
encoding?: "binary" | "base64";
|
|
399
|
+
fullPage?: boolean;
|
|
400
|
+
}): Promise<string | Uint8Array>;
|
|
401
|
+
/** Current page URL. */
|
|
402
|
+
url(): string;
|
|
403
|
+
/** Current page title. */
|
|
404
|
+
title(): Promise<string>;
|
|
405
|
+
private static readonly _POLL_MS;
|
|
406
|
+
/**
|
|
407
|
+
* Poll `fn` until `check(result)` returns true, or throw after `timeout` ms.
|
|
408
|
+
* Used by all `waitFor*`, `textContent`, and `expect*` methods.
|
|
409
|
+
*/
|
|
410
|
+
private _retryUntil;
|
|
411
|
+
/**
|
|
412
|
+
* Wait until the page URL matches `pattern` (string contains or RegExp test).
|
|
413
|
+
*
|
|
414
|
+
* @example
|
|
415
|
+
* ```ts
|
|
416
|
+
* await page.click('a[href="/dashboard"]');
|
|
417
|
+
* await page.waitForURL('/dashboard');
|
|
418
|
+
* ```
|
|
419
|
+
*/
|
|
420
|
+
waitForURL(pattern: string | RegExp, options?: {
|
|
421
|
+
timeout?: number;
|
|
422
|
+
}): Promise<void>;
|
|
423
|
+
/**
|
|
424
|
+
* Wait for an element to appear, then return its `textContent`.
|
|
425
|
+
*/
|
|
426
|
+
textContent(selector: string, options?: {
|
|
427
|
+
timeout?: number;
|
|
428
|
+
}): Promise<string | null>;
|
|
429
|
+
/**
|
|
430
|
+
* Wait for an element to appear, then return its `innerText`.
|
|
431
|
+
*/
|
|
432
|
+
innerText(selector: string, options?: {
|
|
433
|
+
timeout?: number;
|
|
434
|
+
}): Promise<string>;
|
|
435
|
+
/**
|
|
436
|
+
* Wait for an element to appear, then return the value of `attr`.
|
|
437
|
+
*/
|
|
438
|
+
getAttribute(selector: string, attr: string, options?: {
|
|
439
|
+
timeout?: number;
|
|
440
|
+
}): Promise<string | null>;
|
|
441
|
+
/**
|
|
442
|
+
* Wait for an input element to appear, then return its `.value`.
|
|
443
|
+
*/
|
|
444
|
+
inputValue(selector: string, options?: {
|
|
445
|
+
timeout?: number;
|
|
446
|
+
}): Promise<string>;
|
|
447
|
+
/**
|
|
448
|
+
* Check whether an element is currently visible (non-zero box, not hidden).
|
|
449
|
+
* Returns immediately — does not wait.
|
|
450
|
+
*/
|
|
451
|
+
isVisible(selector: string): Promise<boolean>;
|
|
452
|
+
/**
|
|
453
|
+
* Check whether an element is currently enabled (not disabled).
|
|
454
|
+
* Returns immediately — does not wait.
|
|
455
|
+
*/
|
|
456
|
+
isEnabled(selector: string): Promise<boolean>;
|
|
457
|
+
/**
|
|
458
|
+
* Assert that the page URL matches `pattern`. Retries until match or timeout.
|
|
459
|
+
*
|
|
460
|
+
* @example
|
|
461
|
+
* ```ts
|
|
462
|
+
* await page.click('button[type="submit"]');
|
|
463
|
+
* await page.expectURL('/dashboard');
|
|
464
|
+
* ```
|
|
465
|
+
*/
|
|
466
|
+
expectURL(pattern: string | RegExp, options?: {
|
|
467
|
+
timeout?: number;
|
|
468
|
+
}): Promise<void>;
|
|
469
|
+
/**
|
|
470
|
+
* Assert that an element's text content matches `expected`. Retries until match or timeout.
|
|
471
|
+
*
|
|
472
|
+
* By default, text is normalized (trimmed + collapsed whitespace) and matched
|
|
473
|
+
* with `includes`. Use `exact: true` for strict equality or pass a `RegExp`
|
|
474
|
+
* for pattern matching.
|
|
475
|
+
*/
|
|
476
|
+
expectText(selector: string, expected: string | RegExp, options?: {
|
|
477
|
+
timeout?: number;
|
|
478
|
+
exact?: boolean;
|
|
479
|
+
ignoreCase?: boolean;
|
|
480
|
+
}): Promise<void>;
|
|
481
|
+
/**
|
|
482
|
+
* Assert that an element is visible. Retries until visible or timeout.
|
|
483
|
+
*/
|
|
484
|
+
expectVisible(selector: string, options?: {
|
|
485
|
+
timeout?: number;
|
|
486
|
+
}): Promise<void>;
|
|
487
|
+
/**
|
|
488
|
+
* Assert that an element is hidden or absent. Retries until hidden or timeout.
|
|
489
|
+
*/
|
|
490
|
+
expectHidden(selector: string, options?: {
|
|
491
|
+
timeout?: number;
|
|
492
|
+
}): Promise<void>;
|
|
493
|
+
/**
|
|
494
|
+
* Assert that an element has an attribute matching `expected`. Retries until match or timeout.
|
|
495
|
+
*/
|
|
496
|
+
expectAttribute(selector: string, attr: string, expected: string | RegExp, options?: {
|
|
497
|
+
timeout?: number;
|
|
498
|
+
}): Promise<void>;
|
|
499
|
+
/**
|
|
500
|
+
* Assert that the number of elements matching `selector` equals `expected`. Retries until match or timeout.
|
|
501
|
+
*/
|
|
502
|
+
expectCount(selector: string, expected: number, options?: {
|
|
503
|
+
timeout?: number;
|
|
504
|
+
}): Promise<void>;
|
|
505
|
+
/**
|
|
506
|
+
* Wait for a network request matching `pattern`.
|
|
507
|
+
*
|
|
508
|
+
* @param pattern URL string, RegExp, or predicate function.
|
|
509
|
+
* @returns The matched `HTTPRequest`.
|
|
510
|
+
*/
|
|
511
|
+
waitForRequest(pattern: string | RegExp | ((req: HTTPRequest) => boolean), options?: {
|
|
512
|
+
timeout?: number;
|
|
513
|
+
}): Promise<HTTPRequest>;
|
|
514
|
+
/**
|
|
515
|
+
* Wait for a network response matching `pattern`.
|
|
516
|
+
*
|
|
517
|
+
* @param pattern URL string, RegExp, or predicate function.
|
|
518
|
+
* @returns The matched `HTTPResponse`.
|
|
519
|
+
*/
|
|
520
|
+
waitForResponse(pattern: string | RegExp | ((res: HTTPResponse) => boolean), options?: {
|
|
521
|
+
timeout?: number;
|
|
522
|
+
}): Promise<HTTPResponse>;
|
|
523
|
+
/**
|
|
524
|
+
* Assert that a network response matching `pattern` satisfies `checks`.
|
|
525
|
+
*
|
|
526
|
+
* Waits for the response, then validates status and/or headers.
|
|
527
|
+
* Emits a `browser:assert` action.
|
|
528
|
+
*
|
|
529
|
+
* @example
|
|
530
|
+
* ```ts
|
|
531
|
+
* await page.click("#submit");
|
|
532
|
+
* await page.expectResponse("/api/login", { status: 200 });
|
|
533
|
+
* ```
|
|
534
|
+
*/
|
|
535
|
+
expectResponse(pattern: string | RegExp | ((res: HTTPResponse) => boolean), checks?: ResponseChecks, options?: {
|
|
536
|
+
timeout?: number;
|
|
537
|
+
}): Promise<HTTPResponse>;
|
|
538
|
+
/** Clean up: remove CDP listeners and close the page. */
|
|
539
|
+
close(): Promise<void>;
|
|
540
|
+
private _resolveUrl;
|
|
541
|
+
}
|
|
542
|
+
export {};
|
|
543
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"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"}
|