automation_model 1.0.67 → 1.0.69

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 (47) hide show
  1. package/.github/workflows/npm-publish.yml +38 -0
  2. package/.vscode/launch.json +30 -0
  3. package/README.md +3 -0
  4. package/ai_config.json +53 -0
  5. package/env.json +3 -0
  6. package/package.json +3 -2
  7. package/src/auto_page.ts +58 -0
  8. package/src/browser_manager.ts +87 -0
  9. package/src/environment.ts +24 -0
  10. package/{lib/index.d.ts → src/index.ts} +6 -6
  11. package/src/init_browser.ts +65 -0
  12. package/src/locator.ts +173 -0
  13. package/src/stable_browser.ts +523 -0
  14. package/src/table_analyze.ts +69 -0
  15. package/src/test_context.ts +16 -0
  16. package/tests/create_new_repository.test.js +62 -0
  17. package/tests/debug.test.js +41 -0
  18. package/tests/gmail_login.test.js +39 -0
  19. package/tests/launch_page.test.js +32 -0
  20. package/tests/navigate_to_new_repository_page.test.js +45 -0
  21. package/tsconfig.json +110 -0
  22. package/lib/auto_page.d.ts +0 -5
  23. package/lib/auto_page.js +0 -56
  24. package/lib/auto_page.js.map +0 -1
  25. package/lib/browser_manager.d.ts +0 -28
  26. package/lib/browser_manager.js +0 -72
  27. package/lib/browser_manager.js.map +0 -1
  28. package/lib/environment.d.ts +0 -23
  29. package/lib/environment.js +0 -12
  30. package/lib/environment.js.map +0 -1
  31. package/lib/index.js +0 -7
  32. package/lib/index.js.map +0 -1
  33. package/lib/init_browser.d.ts +0 -7
  34. package/lib/init_browser.js +0 -59
  35. package/lib/init_browser.js.map +0 -1
  36. package/lib/locator.d.ts +0 -15
  37. package/lib/locator.js +0 -172
  38. package/lib/locator.js.map +0 -1
  39. package/lib/stable_browser.d.ts +0 -26
  40. package/lib/stable_browser.js +0 -526
  41. package/lib/stable_browser.js.map +0 -1
  42. package/lib/table_analyze.d.ts +0 -3
  43. package/lib/table_analyze.js +0 -71
  44. package/lib/table_analyze.js.map +0 -1
  45. package/lib/test_context.d.ts +0 -13
  46. package/lib/test_context.js +0 -12
  47. package/lib/test_context.js.map +0 -1
@@ -1,526 +0,0 @@
1
- // @ts-nocheck
2
- import reg_parser from "regex-parser";
3
- import { expect } from "@playwright/test";
4
- import fs from "fs";
5
- import path from "path";
6
- import { getTableCells } from "./table_analyze.js";
7
- let configuration = null;
8
- class StableBrowser {
9
- constructor(browser, page, logger = null) {
10
- this.browser = browser;
11
- this.page = page;
12
- this.logger = logger;
13
- // this.browser = browser;
14
- // this.page = page;
15
- // this.logger = logger;
16
- if (!this.logger) {
17
- this.logger = console;
18
- }
19
- }
20
- async goto(url) {
21
- await this.page.goto(url, {
22
- timeout: 60000,
23
- });
24
- }
25
- _fixUsingParams(text, _params) {
26
- if (!_params || typeof text !== "string") {
27
- return text;
28
- }
29
- for (let key in _params) {
30
- text = text.replaceAll(new RegExp("{" + key + "}", "g"), _params[key]);
31
- }
32
- return text;
33
- }
34
- _getLocator(locator, scope, _params) {
35
- if (locator.role) {
36
- if (locator.role[1].nameReg) {
37
- locator.role[1].name = reg_parser(locator.role[1].nameReg);
38
- delete locator.role[1].nameReg;
39
- }
40
- if (locator.role[1].name) {
41
- locator.role[1].name = this._fixUsingParams(locator.role[1].name, _params);
42
- }
43
- return scope.getByRole(locator.role[0], locator.role[1]);
44
- }
45
- if (locator.css) {
46
- return scope.locator(this._fixUsingParams(locator.css, _params));
47
- }
48
- throw new Error("unknown locator type");
49
- }
50
- async _locateElementByText(scope, text1, tag1, regex = false, _params) {
51
- //const stringifyText = JSON.stringify(text);
52
- return await scope.evaluate(([text, tag]) => {
53
- function isParent(parent, child) {
54
- let currentNode = child.parentNode;
55
- while (currentNode !== null) {
56
- if (currentNode === parent) {
57
- return true;
58
- }
59
- currentNode = currentNode.parentNode;
60
- }
61
- return false;
62
- }
63
- if (!tag) {
64
- tag = "*";
65
- }
66
- let elements = Array.from(document.querySelectorAll(tag));
67
- let randomToken = null;
68
- text = text.trim();
69
- const foundElements = [];
70
- for (let i = 0; i < elements.length; i++) {
71
- const element = elements[i];
72
- if (element.innerText && element.innerText.trim() === text) {
73
- foundElements.push(element);
74
- }
75
- }
76
- let noChildElements = [];
77
- for (let i = 0; i < foundElements.length; i++) {
78
- let element = foundElements[i];
79
- let hasChild = false;
80
- for (let j = 0; j < foundElements.length; j++) {
81
- if (i === j) {
82
- continue;
83
- }
84
- if (isParent(element, foundElements[j])) {
85
- hasChild = true;
86
- break;
87
- }
88
- }
89
- if (!hasChild) {
90
- noChildElements.push(element);
91
- }
92
- }
93
- let elementCount = 0;
94
- if (noChildElements.length > 0) {
95
- for (let i = 0; i < noChildElements.length; i++) {
96
- if (randomToken === null) {
97
- randomToken = Math.random().toString(36).substring(7);
98
- }
99
- let element = noChildElements[i];
100
- element.setAttribute("data-blinq-id", "blinq-id-" + randomToken);
101
- elementCount++;
102
- }
103
- }
104
- return { elementCount: elementCount, randomToken: randomToken };
105
- }, [text1, tag1]);
106
- }
107
- async _collectLocatorInformation(selectorHierarchy, index = 0, scope, foundLocators, _params) {
108
- if (index === selectorHierarchy.length) {
109
- return;
110
- }
111
- if (selectorHierarchy.length !== 1) {
112
- this.logger.info("only single selector hierarchy supported, will use first selector");
113
- }
114
- let locatorSearch = selectorHierarchy[index];
115
- let locator = null;
116
- if (locatorSearch.text) {
117
- let result = await this._locateElementByText(scope, locatorSearch.text, locatorSearch.tag, false, _params);
118
- if (result.elementCount === 0) {
119
- return;
120
- }
121
- locatorSearch.css = "[data-blinq-id='blinq-id-" + result.randomToken + "']";
122
- locator = this._getLocator(locatorSearch, scope, _params);
123
- }
124
- else {
125
- locator = this._getLocator(locatorSearch, scope, _params);
126
- }
127
- let count = await locator.count();
128
- //let visibleCount = 0;
129
- let visibleLocator = null;
130
- for (let j = 0; j < count; j++) {
131
- if ((await locator.nth(j).isVisible()) && (await locator.nth(j).isEnabled())) {
132
- //visibleCount++;
133
- // if (index === selectorHierarchy.length - 1) {
134
- foundLocators.push(locator.nth(j));
135
- // } else {
136
- // this._collectLocatorInformation(selectorHierarchy, index + 1, locator.nth(j), foundLocators);
137
- // }
138
- }
139
- }
140
- }
141
- async _locate(selectors, info, _params, timeout = 30000) {
142
- let locatorsByPriority = [];
143
- let startTime = performance.now();
144
- let locatorsCount = 0;
145
- while (true) {
146
- locatorsCount = 0;
147
- for (let i = 0; i < selectors.length; i++) {
148
- let selectorList = selectors[i];
149
- let foundLocators = [];
150
- try {
151
- await this._collectLocatorInformation(selectorList, 0, this.page, foundLocators, _params);
152
- }
153
- catch (e) {
154
- foundLocators = [];
155
- await this._collectLocatorInformation(selectorList, 0, this.page, foundLocators, _params);
156
- }
157
- info.log.push("total elements found " + foundLocators.length);
158
- if (foundLocators.length === 1) {
159
- info.log.push("found unique element");
160
- info.box = await foundLocators[0].boundingBox();
161
- return foundLocators[0];
162
- }
163
- locatorsByPriority.push(foundLocators);
164
- locatorsCount += foundLocators.length;
165
- }
166
- if (locatorsCount > 0) {
167
- break;
168
- }
169
- if (performance.now() - startTime > timeout) {
170
- break;
171
- }
172
- await new Promise((resolve) => setTimeout(resolve, 1000));
173
- }
174
- this.logger.debug("unable to locate unique element, total elements found " + locatorsCount);
175
- info.log.push("failed to locate unique element, total elements found " + locatorsCount);
176
- for (let i = 0; i < locatorsByPriority.length; i++) {
177
- let locators = locatorsByPriority[i];
178
- if (locators.length > 0) {
179
- info.box = await locators[0].boundingBox();
180
- return locators[0];
181
- }
182
- }
183
- throw new Error("failed to locate first element no elements found, " + JSON.stringify(info));
184
- }
185
- async click(selector, _params, options = {}, world = null) {
186
- const info = {};
187
- info.log = [];
188
- info.operation = "click";
189
- info.selector = selector;
190
- this._reportToWorld(world, { command: "click", params: _params, selector: selector });
191
- try {
192
- let element = await this._locate(selector, info, _params);
193
- await this._screenShot(options, world);
194
- try {
195
- await element.click({ timeout: 5000 });
196
- }
197
- catch (e) {
198
- info.log.push("click failed, will try force click");
199
- this._reportToWorld(world, { message: "click failed, will try force click" });
200
- await element.click({ timeout: 10000, force: true });
201
- }
202
- this._reportToWorld(world, { result: "success", info: info });
203
- await this.waitForPageLoad();
204
- return info;
205
- }
206
- catch (e) {
207
- this.logger.error("click failed " + JSON.stringify(info));
208
- this._reportToWorld(world, { result: "failed", info: info, error: e });
209
- Object.assign(e, { info: info });
210
- await this._screenShot(options, world);
211
- throw e;
212
- }
213
- }
214
- async selectOption(selector, values, _params = null, options = {}, world = null) {
215
- const info = {};
216
- info.log = [];
217
- info.operation = "selectOptions";
218
- info.selector = selector;
219
- this._reportToWorld(world, { command: "select", values, params: _params, selector: selector });
220
- try {
221
- let element = await this._locate(selector, info, _params);
222
- await this._screenShot(options, world);
223
- try {
224
- await element.selectOption(values, { timeout: 5000 });
225
- }
226
- catch (e) {
227
- info.log.push("selectOption failed, will try force");
228
- this._reportToWorld(world, { message: "select failed, will try force select" });
229
- await element.selectOption(values, { timeout: 10000, force: true });
230
- }
231
- await this.waitForPageLoad();
232
- return info;
233
- }
234
- catch (e) {
235
- this.logger.error("selectOption failed " + JSON.stringify(info));
236
- this._reportToWorld(world, { result: "failed", info: info, error: e });
237
- Object.assign(e, { info: info });
238
- await this._screenShot(options, world);
239
- throw e;
240
- this.logger.info("click failed, will try next selector");
241
- }
242
- }
243
- async fill(selector, value, enter = false, _params = null, options = {}, world = null) {
244
- const info = {};
245
- info.log = [];
246
- info.operation = "fill";
247
- info.selector = selector;
248
- info.value = value;
249
- this._reportToWorld(world, { command: "fill", value, enter, params: _params, selector: selector });
250
- try {
251
- let element = await this._locate(selector, info, _params);
252
- await this._screenShot(options, world);
253
- await element.fill(value, { timeout: 10000 });
254
- await element.dispatchEvent("change");
255
- if (enter) {
256
- await this.page.keyboard.press("Enter");
257
- }
258
- await this.waitForPageLoad();
259
- return info;
260
- }
261
- catch (e) {
262
- this.logger.error("fill failed " + JSON.stringify(info));
263
- this._reportToWorld(world, { result: "failed", info: info, error: e });
264
- Object.assign(e, { info: info });
265
- await this._screenShot(options, world);
266
- throw e;
267
- }
268
- }
269
- async getText(selector, _params = null, options = {}, info = {}, world = null) {
270
- if (!info.log) {
271
- info.log = [];
272
- }
273
- let element = await this._locate(selector, info, _params);
274
- await this._screenShot(options, world);
275
- try {
276
- return await element.innerText();
277
- }
278
- catch (e) {
279
- this.logger.info("no innerText will use textContent");
280
- return await element.textContent();
281
- }
282
- }
283
- async containsPattern(selector, pattern, text, _params = null, options = {}, world = null) {
284
- const info = {};
285
- info.log = [];
286
- info.operation = "containsPattern";
287
- info.selector = selector;
288
- info.value = text;
289
- info.pattern = pattern;
290
- let foundText = null;
291
- this._reportToWorld(world, { command: "contains", pattern, text, params: _params, selector: selector });
292
- try {
293
- foundText = await this.getText(selector, _params, options, info, world);
294
- let escapedText = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
295
- pattern = pattern.replace("{text}", escapedText);
296
- let regex = new RegExp(pattern, "m");
297
- if (!regex.test(foundText)) {
298
- info.foundText = foundText;
299
- throw new Error("element doesn't contain text " + text);
300
- }
301
- return info;
302
- }
303
- catch (e) {
304
- this.logger.error("verify element contains text failed " + JSON.stringify(info));
305
- this.logger.error("found text " + foundText + " pattern " + pattern);
306
- this._reportToWorld(world, { result: "failed", info: info, error: e });
307
- Object.assign(e, { info: info });
308
- await this._screenShot(options, world);
309
- throw e;
310
- }
311
- }
312
- async containsText(selector, text, _params = null, options = {}, world = null) {
313
- const info = {};
314
- info.log = [];
315
- info.operation = "containsText";
316
- info.selector = selector;
317
- info.value = text;
318
- try {
319
- let foundText = await this.getText(selector, _params, options, info, world);
320
- if (!foundText.includes(text)) {
321
- info.foundText = foundText;
322
- throw new Error("element doesn't contain text " + text);
323
- }
324
- return info;
325
- }
326
- catch (e) {
327
- this.logger.error("verify element contains text failed " + JSON.stringify(info));
328
- this._reportToWorld(world, { result: "failed", info: info, error: e });
329
- Object.assign(e, { info: info });
330
- await this._screenShot(options, world);
331
- throw e;
332
- }
333
- }
334
- async _screenShot(options = {}, world = null) {
335
- if (world && world.attach && world.screenshot && world.screenshotPath) {
336
- if (!fs.existsSync(world.screenshotPath)) {
337
- fs.mkdirSync(world.screenshotPath, { recursive: true });
338
- }
339
- let nextIndex = 1;
340
- while (fs.existsSync(path.join(world.screenshotPath, nextIndex + ".png"))) {
341
- nextIndex++;
342
- }
343
- const screenshotPath = path.join(world.screenshotPath, nextIndex + ".png");
344
- await this.page.screenshot({ path: screenshotPath });
345
- await world.attach(JSON.stringify({ path: screenshotPath }), {
346
- mediaType: "application/json",
347
- });
348
- }
349
- else if (options.screenshot) {
350
- await this.page.screenshot({ path: options.screenshotPath });
351
- }
352
- }
353
- async verifyElementExistInPage(selector, _params = null, options = {}, world = null) {
354
- await new Promise((resolve) => setTimeout(resolve, 2000));
355
- const info = {};
356
- info.log = [];
357
- info.operation = "verify";
358
- info.selector = selector;
359
- this._reportToWorld(world, { command: "verify", params: _params, selector: selector });
360
- try {
361
- const element = await this._locate(selector, info, _params);
362
- await this._screenShot(options, world);
363
- await expect(element).toHaveCount(1, { timeout: 10000 });
364
- return info;
365
- }
366
- catch (e) {
367
- this.logger.error("verify failed " + JSON.stringify(info));
368
- this._reportToWorld(world, { result: "failed", info: info, error: e });
369
- Object.assign(e, { info: info });
370
- await this._screenShot(options, world);
371
- throw e;
372
- }
373
- }
374
- async analyzeTable(selector, query, operator, value, _params = null, options = {}, world = null) {
375
- const info = {};
376
- info.log = [];
377
- info.operation = "analyzeTable";
378
- info.selector = selector;
379
- info.query = query;
380
- query = this._fixUsingParams(query, _params);
381
- info.query_fixed = query;
382
- info.operator = operator;
383
- info.value = value;
384
- this._reportToWorld(world, {
385
- command: "analyzeTable",
386
- query,
387
- operator,
388
- value,
389
- params: _params,
390
- selector: selector,
391
- });
392
- try {
393
- let table = await this._locate(selector, info, _params);
394
- await this._screenShot(options, world);
395
- const cells = await getTableCells(this.page, table, query, info);
396
- if (cells.error) {
397
- throw new Error(cells.error);
398
- }
399
- if (operator === "===" || operator === "==" || operator === "=" || operator === "equals") {
400
- if (cells.length === 0) {
401
- throw new Error("no cells found");
402
- }
403
- for (let i = 0; i < cells.length; i++) {
404
- if (cells[i] !== value) {
405
- throw new Error("table data doesn't match");
406
- }
407
- }
408
- }
409
- else if (operator === "!==" || operator === "!=" || operator === "not_equals") {
410
- if (cells.length === 0) {
411
- throw new Error("no cells found");
412
- }
413
- for (let i = 0; i < cells.length; i++) {
414
- if (cells[i] === value) {
415
- throw new Error("table data doesn't match");
416
- }
417
- }
418
- }
419
- else if (operator === ">=" || operator === "greater_than_or_equal") {
420
- if (cells.length === 0) {
421
- throw new Error("no cells found");
422
- }
423
- value = Number(value);
424
- for (let i = 0; i < cells.length; i++) {
425
- let foundValue = Number(cells[i]);
426
- if (foundValue < value) {
427
- throw new Error(`found table cell value ${cells[i]} < ${value}`);
428
- }
429
- }
430
- }
431
- else if (operator === ">" || operator === "greater_than") {
432
- if (cells.length === 0) {
433
- throw new Error("no cells found");
434
- }
435
- value = Number(value);
436
- for (let i = 0; i < cells.length; i++) {
437
- let foundValue = Number(cells[i]);
438
- if (foundValue <= value) {
439
- throw new Error(`found table cell value ${cells[i]} <= ${value}`);
440
- }
441
- }
442
- }
443
- else if (operator === "<=" || operator === "less_than_or_equal") {
444
- if (cells.length === 0) {
445
- throw new Error("no cells found");
446
- }
447
- value = Number(value);
448
- for (let i = 0; i < cells.length; i++) {
449
- let foundValue = Number(cells[i]);
450
- if (foundValue > value) {
451
- throw new Error(`found table cell value ${cells[i]} > ${value}`);
452
- }
453
- }
454
- }
455
- else if (operator === "<" || operator === "less_than") {
456
- if (cells.length === 0) {
457
- throw new Error("no cells found");
458
- }
459
- value = Number(value);
460
- for (let i = 0; i < cells.length; i++) {
461
- let foundValue = Number(cells[i]);
462
- if (foundValue >= value) {
463
- throw new Error(`found table cell value ${cells[i]} >= ${value}`);
464
- }
465
- }
466
- }
467
- else {
468
- throw new Error("unknown operator " + operator);
469
- }
470
- return info;
471
- }
472
- catch (e) {
473
- this.logger.error("analyzeTable failed " + JSON.stringify(info));
474
- this._reportToWorld(world, { result: "failed", info: info, error: e });
475
- Object.assign(e, { info: info });
476
- await this._screenShot(options, world);
477
- throw e;
478
- }
479
- }
480
- async waitForPageLoad(options = {}, world = null) {
481
- let timeout = 10000;
482
- this._reportToWorld(world, { command: "waitForPageLoade" });
483
- if (!configuration) {
484
- try {
485
- if (fs.existsSync("ai_config.json")) {
486
- configuration = JSON.parse(fs.readFileSync("ai_config.json"));
487
- }
488
- else {
489
- configuration = {};
490
- }
491
- }
492
- catch (e) {
493
- this.logger.error("unable to read ai_config.json");
494
- }
495
- }
496
- if (configuration.page_timeout) {
497
- timeout = configuration.page_timeout;
498
- }
499
- if (options.page_timeout) {
500
- timeout = options.page_timeout;
501
- }
502
- const waitOptions = {
503
- timeout: timeout,
504
- };
505
- try {
506
- await Promise.all([
507
- this.page.waitForLoadState("networkidle", waitOptions),
508
- this.page.waitForLoadState("load", waitOptions),
509
- this.page.waitForLoadState("domcontentloaded", waitOptions),
510
- ]);
511
- }
512
- catch (e) {
513
- console.log("waitForPageLoad error, ignored");
514
- }
515
- await new Promise((resolve) => setTimeout(resolve, 2000));
516
- await this._screenShot(options, world);
517
- }
518
- _reportToWorld(world, properties = {}) {
519
- if (!world || !world.attach) {
520
- return;
521
- }
522
- world.attach(JSON.stringify(properties), { mediaType: "application/json" });
523
- }
524
- }
525
- export { StableBrowser };
526
- //# sourceMappingURL=stable_browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stable_browser.js","sourceRoot":"","sources":["../../src/stable_browser.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Page, ElementHandle } from "playwright";
2
- declare const getTableCells: (page: Page, element: ElementHandle, tableSelector: any, info?: any) => Promise<any>;
3
- export { getTableCells };
@@ -1,71 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- // import type {TprocessTableQuery} from "./locator.js"
4
- // type Change = {css:string, changes:{role:string}};
5
- // declare const document: Document & { selectors: Change[] ; tableSelector: string; processTableQuery: TprocessTableQuery };
6
- function stringifyObject(obj, indentation = 0) {
7
- let result = "";
8
- const indent = " ".repeat(indentation);
9
- if (Array.isArray(obj)) {
10
- result += "[";
11
- for (let i = 0; i < obj.length; i++) {
12
- result += (i > 0 ? ", " : "") + stringifyObject(obj[i], indentation + 2);
13
- }
14
- result += "]";
15
- }
16
- else if (typeof obj === "object" && obj !== null) {
17
- result += "{";
18
- let first = true;
19
- for (let key in obj) {
20
- // eslint-disable-next-line no-prototype-builtins
21
- if (obj.hasOwnProperty(key)) {
22
- result +=
23
- (first ? "\n" : ",\n") +
24
- indent +
25
- " " +
26
- JSON.stringify(key) +
27
- ": " +
28
- // @ts-ignore
29
- stringifyObject(obj[key], indentation + 2);
30
- first = false;
31
- }
32
- }
33
- result += "\n" + indent + "}";
34
- }
35
- else {
36
- result += JSON.stringify(obj);
37
- }
38
- return result;
39
- }
40
- const __filename = new URL(import.meta.url).pathname;
41
- const currentDir = path.dirname(__filename);
42
- const getTableCells = async (page, element, tableSelector, info = {}) => {
43
- let script = fs.readFileSync(path.join(currentDir, "locator.js"), "utf8");
44
- let aiConfigPath = path.join(process.cwd(), "ai_config.json");
45
- if (fs.existsSync(aiConfigPath)) {
46
- let aiConfig = JSON.parse(fs.readFileSync(aiConfigPath, "utf8"));
47
- if (aiConfig.changes) {
48
- script = script.replace("const selectors = null", "const selectors = " + stringifyObject(aiConfig.changes));
49
- }
50
- }
51
- script = script.replace("const tableSelector = null", "const tableSelector = " + stringifyObject(tableSelector));
52
- await page.evaluate(script);
53
- try {
54
- // @ts-ignore
55
- let result = await element.evaluate((_node) => {
56
- // @ts-ignore
57
- console.log("tableSelector", document.tableSelector);
58
- // @ts-ignore
59
- return document.processTableQuery(_node, document.tableSelector);
60
- });
61
- // @ts-ignore
62
- info.box = result.rect;
63
- return result.cells;
64
- }
65
- catch (error) {
66
- console.log("error", error);
67
- throw error;
68
- }
69
- };
70
- export { getTableCells };
71
- //# sourceMappingURL=table_analyze.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table_analyze.js","sourceRoot":"","sources":["../../src/table_analyze.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { BrowserContext, Page, Browser as PlaywrightBrowser } from "playwright";
2
- import { Environment } from "./environment.js";
3
- import { StableBrowser } from "./stable_browser.js";
4
- declare class TestContext {
5
- stable: StableBrowser | null;
6
- browser: PlaywrightBrowser | null;
7
- playContext: BrowserContext | null;
8
- page: Page | null;
9
- environment: Environment | null;
10
- reportFolder: string | null;
11
- constructor();
12
- }
13
- export { TestContext };