@playwright/mcp 0.0.13 → 0.0.14

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.
@@ -20,7 +20,7 @@ const zod_to_json_schema_1 = require("zod-to-json-schema");
20
20
  const waitSchema = zod_1.z.object({
21
21
  time: zod_1.z.number().describe('The time to wait in seconds'),
22
22
  });
23
- const wait = {
23
+ const wait = captureSnapshot => ({
24
24
  capability: 'wait',
25
25
  schema: {
26
26
  name: 'browser_wait',
@@ -31,13 +31,12 @@ const wait = {
31
31
  const validatedParams = waitSchema.parse(params);
32
32
  await new Promise(f => setTimeout(f, Math.min(10000, validatedParams.time * 1000)));
33
33
  return {
34
- content: [{
35
- type: 'text',
36
- text: `Waited for ${validatedParams.time} seconds`,
37
- }],
34
+ code: [`// Waited for ${validatedParams.time} seconds`],
35
+ captureSnapshot,
36
+ waitForNetwork: false,
38
37
  };
39
38
  },
40
- };
39
+ });
41
40
  const closeSchema = zod_1.z.object({});
42
41
  const close = {
43
42
  capability: 'core',
@@ -49,10 +48,9 @@ const close = {
49
48
  handle: async (context) => {
50
49
  await context.close();
51
50
  return {
52
- content: [{
53
- type: 'text',
54
- text: `Page closed`,
55
- }],
51
+ code: [`// Internal to close the page`],
52
+ captureSnapshot: false,
53
+ waitForNetwork: false,
56
54
  };
57
55
  },
58
56
  };
@@ -69,21 +67,24 @@ const resize = captureSnapshot => ({
69
67
  },
70
68
  handle: async (context, params) => {
71
69
  const validatedParams = resizeSchema.parse(params);
72
- const tab = context.currentTab();
73
- return await tab.run(async (tab) => {
70
+ const tab = context.currentTabOrDie();
71
+ const code = [
72
+ `// Resize browser window to ${validatedParams.width}x${validatedParams.height}`,
73
+ `await page.setViewportSize({ width: ${validatedParams.width}, height: ${validatedParams.height} });`
74
+ ];
75
+ const action = async () => {
74
76
  await tab.page.setViewportSize({ width: validatedParams.width, height: validatedParams.height });
75
- const code = [
76
- `// Resize browser window to ${validatedParams.width}x${validatedParams.height}`,
77
- `await page.setViewportSize({ width: ${validatedParams.width}, height: ${validatedParams.height} });`
78
- ];
79
- return { code };
80
- }, {
77
+ };
78
+ return {
79
+ code,
80
+ action,
81
81
  captureSnapshot,
82
- });
82
+ waitForNetwork: true
83
+ };
83
84
  },
84
85
  });
85
86
  exports.default = (captureSnapshot) => [
86
87
  close,
87
- wait,
88
+ wait(captureSnapshot),
88
89
  resize(captureSnapshot)
89
90
  ];
@@ -15,20 +15,31 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.console = void 0;
19
- exports.console = {
18
+ const zod_1 = require("zod");
19
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
20
+ const consoleSchema = zod_1.z.object({});
21
+ const console = {
22
+ capability: 'core',
20
23
  schema: {
21
- uri: 'browser://console',
22
- name: 'Page console',
23
- mimeType: 'text/plain',
24
+ name: 'browser_console_messages',
25
+ description: 'Returns all console messages',
26
+ inputSchema: (0, zod_to_json_schema_1.zodToJsonSchema)(consoleSchema),
24
27
  },
25
- read: async (context, uri) => {
26
- const messages = await context.currentTab().console();
28
+ handle: async (context) => {
29
+ const messages = await context.currentTabOrDie().console();
27
30
  const log = messages.map(message => `[${message.type().toUpperCase()}] ${message.text()}`).join('\n');
28
- return [{
29
- uri,
30
- mimeType: 'text/plain',
31
- text: log
32
- }];
31
+ return {
32
+ code: [`// <internal code to get console messages>`],
33
+ action: async () => {
34
+ return {
35
+ content: [{ type: 'text', text: log }]
36
+ };
37
+ },
38
+ captureSnapshot: false,
39
+ waitForNetwork: false,
40
+ };
33
41
  },
34
42
  };
43
+ exports.default = [
44
+ console,
45
+ ];
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const zod_1 = require("zod");
19
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
20
+ const handleDialogSchema = zod_1.z.object({
21
+ accept: zod_1.z.boolean().describe('Whether to accept the dialog.'),
22
+ promptText: zod_1.z.string().optional().describe('The text of the prompt in case of a prompt dialog.'),
23
+ });
24
+ const handleDialog = captureSnapshot => ({
25
+ capability: 'core',
26
+ schema: {
27
+ name: 'browser_handle_dialog',
28
+ description: 'Handle a dialog',
29
+ inputSchema: (0, zod_to_json_schema_1.zodToJsonSchema)(handleDialogSchema),
30
+ },
31
+ handle: async (context, params) => {
32
+ const validatedParams = handleDialogSchema.parse(params);
33
+ const dialogState = context.modalStates().find(state => state.type === 'dialog');
34
+ if (!dialogState)
35
+ throw new Error('No dialog visible');
36
+ if (validatedParams.accept)
37
+ await dialogState.dialog.accept(validatedParams.promptText);
38
+ else
39
+ await dialogState.dialog.dismiss();
40
+ context.clearModalState(dialogState);
41
+ const code = [
42
+ `// <internal code to handle "${dialogState.dialog.type()}" dialog>`,
43
+ ];
44
+ return {
45
+ code,
46
+ captureSnapshot,
47
+ waitForNetwork: false,
48
+ };
49
+ },
50
+ clearsModalState: 'dialog',
51
+ });
52
+ exports.default = (captureSnapshot) => [
53
+ handleDialog(captureSnapshot),
54
+ ];
@@ -29,18 +29,24 @@ const uploadFile = captureSnapshot => ({
29
29
  },
30
30
  handle: async (context, params) => {
31
31
  const validatedParams = uploadFileSchema.parse(params);
32
- const tab = context.currentTab();
33
- return await tab.runAndWait(async () => {
34
- await tab.submitFileChooser(validatedParams.paths);
35
- const code = [
36
- `// <internal code to chose files ${validatedParams.paths.join(', ')}`,
37
- ];
38
- return { code };
39
- }, {
32
+ const modalState = context.modalStates().find(state => state.type === 'fileChooser');
33
+ if (!modalState)
34
+ throw new Error('No file chooser visible');
35
+ const code = [
36
+ `// <internal code to chose files ${validatedParams.paths.join(', ')}`,
37
+ ];
38
+ const action = async () => {
39
+ await modalState.fileChooser.setFiles(validatedParams.paths);
40
+ context.clearModalState(modalState);
41
+ };
42
+ return {
43
+ code,
44
+ action,
40
45
  captureSnapshot,
41
- noClearFileChooser: true,
42
- });
46
+ waitForNetwork: true,
47
+ };
43
48
  },
49
+ clearsModalState: 'fileChooser',
44
50
  });
45
51
  exports.default = (captureSnapshot) => [
46
52
  uploadFile(captureSnapshot),
@@ -47,10 +47,9 @@ const install = {
47
47
  });
48
48
  });
49
49
  return {
50
- content: [{
51
- type: 'text',
52
- text: `Browser ${channel} installed`,
53
- }],
50
+ code: [`// Browser ${channel} installed`],
51
+ captureSnapshot: false,
52
+ waitForNetwork: false,
54
53
  };
55
54
  },
56
55
  };
@@ -32,16 +32,18 @@ const pressKey = captureSnapshot => ({
32
32
  },
33
33
  handle: async (context, params) => {
34
34
  const validatedParams = pressKeySchema.parse(params);
35
- return await context.currentTab().runAndWait(async (tab) => {
36
- await tab.page.keyboard.press(validatedParams.key);
37
- const code = [
38
- `// Press ${validatedParams.key}`,
39
- `await page.keyboard.press('${validatedParams.key}');`,
40
- ];
41
- return { code };
42
- }, {
35
+ const tab = context.currentTabOrDie();
36
+ const code = [
37
+ `// Press ${validatedParams.key}`,
38
+ `await page.keyboard.press('${validatedParams.key}');`,
39
+ ];
40
+ const action = () => tab.page.keyboard.press(validatedParams.key);
41
+ return {
42
+ code,
43
+ action,
43
44
  captureSnapshot,
44
- });
45
+ waitForNetwork: true
46
+ };
45
47
  },
46
48
  });
47
49
  exports.default = (captureSnapshot) => [
@@ -29,21 +29,21 @@ const navigate = captureSnapshot => ({
29
29
  },
30
30
  handle: async (context, params) => {
31
31
  const validatedParams = navigateSchema.parse(params);
32
- const currentTab = await context.ensureTab();
33
- return await currentTab.run(async (tab) => {
34
- await tab.navigate(validatedParams.url);
35
- const code = [
36
- `// Navigate to ${validatedParams.url}`,
37
- `await page.goto('${validatedParams.url}');`,
38
- ];
39
- return { code };
40
- }, {
32
+ const tab = await context.ensureTab();
33
+ await tab.navigate(validatedParams.url);
34
+ const code = [
35
+ `// Navigate to ${validatedParams.url}`,
36
+ `await page.goto('${validatedParams.url}');`,
37
+ ];
38
+ return {
39
+ code,
41
40
  captureSnapshot,
42
- });
41
+ waitForNetwork: false,
42
+ };
43
43
  },
44
44
  });
45
45
  const goBackSchema = zod_1.z.object({});
46
- const goBack = snapshot => ({
46
+ const goBack = captureSnapshot => ({
47
47
  capability: 'history',
48
48
  schema: {
49
49
  name: 'browser_navigate_back',
@@ -51,20 +51,21 @@ const goBack = snapshot => ({
51
51
  inputSchema: (0, zod_to_json_schema_1.zodToJsonSchema)(goBackSchema),
52
52
  },
53
53
  handle: async (context) => {
54
- return await context.currentTab().runAndWait(async (tab) => {
55
- await tab.page.goBack();
56
- const code = [
57
- `// Navigate back`,
58
- `await page.goBack();`,
59
- ];
60
- return { code };
61
- }, {
62
- captureSnapshot: snapshot,
63
- });
54
+ const tab = await context.ensureTab();
55
+ await tab.page.goBack();
56
+ const code = [
57
+ `// Navigate back`,
58
+ `await page.goBack();`,
59
+ ];
60
+ return {
61
+ code,
62
+ captureSnapshot,
63
+ waitForNetwork: false,
64
+ };
64
65
  },
65
66
  });
66
67
  const goForwardSchema = zod_1.z.object({});
67
- const goForward = snapshot => ({
68
+ const goForward = captureSnapshot => ({
68
69
  capability: 'history',
69
70
  schema: {
70
71
  name: 'browser_navigate_forward',
@@ -72,16 +73,17 @@ const goForward = snapshot => ({
72
73
  inputSchema: (0, zod_to_json_schema_1.zodToJsonSchema)(goForwardSchema),
73
74
  },
74
75
  handle: async (context) => {
75
- return await context.currentTab().runAndWait(async (tab) => {
76
- await tab.page.goForward();
77
- const code = [
78
- `// Navigate forward`,
79
- `await page.goForward();`,
80
- ];
81
- return { code };
82
- }, {
83
- captureSnapshot: snapshot,
84
- });
76
+ const tab = context.currentTabOrDie();
77
+ await tab.page.goForward();
78
+ const code = [
79
+ `// Navigate forward`,
80
+ `await page.goForward();`,
81
+ ];
82
+ return {
83
+ code,
84
+ captureSnapshot,
85
+ waitForNetwork: false,
86
+ };
85
87
  },
86
88
  });
87
89
  exports.default = (captureSnapshot) => [
package/lib/tools/pdf.js CHANGED
@@ -14,6 +14,39 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
17
50
  var __importDefault = (this && this.__importDefault) || function (mod) {
18
51
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
52
  };
@@ -23,6 +56,7 @@ const path_1 = __importDefault(require("path"));
23
56
  const zod_1 = require("zod");
24
57
  const zod_to_json_schema_1 = require("zod-to-json-schema");
25
58
  const utils_1 = require("./utils");
59
+ const javascript = __importStar(require("../javascript"));
26
60
  const pdfSchema = zod_1.z.object({});
27
61
  const pdf = {
28
62
  capability: 'pdf',
@@ -32,14 +66,17 @@ const pdf = {
32
66
  inputSchema: (0, zod_to_json_schema_1.zodToJsonSchema)(pdfSchema),
33
67
  },
34
68
  handle: async (context) => {
35
- const tab = context.currentTab();
69
+ const tab = context.currentTabOrDie();
36
70
  const fileName = path_1.default.join(os_1.default.tmpdir(), (0, utils_1.sanitizeForFilePath)(`page-${new Date().toISOString()}`)) + '.pdf';
37
- await tab.page.pdf({ path: fileName });
71
+ const code = [
72
+ `// Save page as ${fileName}`,
73
+ `await page.pdf(${javascript.formatObject({ path: fileName })});`,
74
+ ];
38
75
  return {
39
- content: [{
40
- type: 'text',
41
- text: `Saved as ${fileName}`,
42
- }],
76
+ code,
77
+ action: async () => tab.page.pdf({ path: fileName }).then(() => { }),
78
+ captureSnapshot: false,
79
+ waitForNetwork: false,
43
80
  };
44
81
  },
45
82
  };
@@ -14,9 +14,43 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
17
50
  Object.defineProperty(exports, "__esModule", { value: true });
18
51
  const zod_1 = require("zod");
19
52
  const zod_to_json_schema_1 = require("zod-to-json-schema");
53
+ const javascript = __importStar(require("../javascript"));
20
54
  const screenshot = {
21
55
  capability: 'core',
22
56
  schema: {
@@ -26,9 +60,21 @@ const screenshot = {
26
60
  },
27
61
  handle: async (context) => {
28
62
  const tab = await context.ensureTab();
29
- const screenshot = await tab.page.screenshot({ type: 'jpeg', quality: 50, scale: 'css' });
63
+ const options = { type: 'jpeg', quality: 50, scale: 'css' };
64
+ const code = [
65
+ `// Take a screenshot of the current page`,
66
+ `await page.screenshot(${javascript.formatObject(options)});`,
67
+ ];
68
+ const action = () => tab.page.screenshot(options).then(buffer => {
69
+ return {
70
+ content: [{ type: 'image', data: buffer.toString('base64'), mimeType: 'image/jpeg' }],
71
+ };
72
+ });
30
73
  return {
31
- content: [{ type: 'image', data: screenshot.toString('base64'), mimeType: 'image/jpeg' }],
74
+ code,
75
+ action,
76
+ captureSnapshot: false,
77
+ waitForNetwork: false
32
78
  };
33
79
  },
34
80
  };
@@ -48,10 +94,17 @@ const moveMouse = {
48
94
  },
49
95
  handle: async (context, params) => {
50
96
  const validatedParams = moveMouseSchema.parse(params);
51
- const tab = context.currentTab();
52
- await tab.page.mouse.move(validatedParams.x, validatedParams.y);
97
+ const tab = context.currentTabOrDie();
98
+ const code = [
99
+ `// Move mouse to (${validatedParams.x}, ${validatedParams.y})`,
100
+ `await page.mouse.move(${validatedParams.x}, ${validatedParams.y});`,
101
+ ];
102
+ const action = () => tab.page.mouse.move(validatedParams.x, validatedParams.y);
53
103
  return {
54
- content: [{ type: 'text', text: `Moved mouse to (${validatedParams.x}, ${validatedParams.y})` }],
104
+ code,
105
+ action,
106
+ captureSnapshot: false,
107
+ waitForNetwork: false
55
108
  };
56
109
  },
57
110
  };
@@ -67,19 +120,25 @@ const click = {
67
120
  inputSchema: (0, zod_to_json_schema_1.zodToJsonSchema)(clickSchema),
68
121
  },
69
122
  handle: async (context, params) => {
70
- return await context.currentTab().runAndWait(async (tab) => {
71
- const validatedParams = clickSchema.parse(params);
72
- const code = [
73
- `// Click mouse at coordinates (${validatedParams.x}, ${validatedParams.y})`,
74
- `await page.mouse.move(${validatedParams.x}, ${validatedParams.y});`,
75
- `await page.mouse.down();`,
76
- `await page.mouse.up();`,
77
- ];
123
+ const validatedParams = clickSchema.parse(params);
124
+ const tab = context.currentTabOrDie();
125
+ const code = [
126
+ `// Click mouse at coordinates (${validatedParams.x}, ${validatedParams.y})`,
127
+ `await page.mouse.move(${validatedParams.x}, ${validatedParams.y});`,
128
+ `await page.mouse.down();`,
129
+ `await page.mouse.up();`,
130
+ ];
131
+ const action = async () => {
78
132
  await tab.page.mouse.move(validatedParams.x, validatedParams.y);
79
133
  await tab.page.mouse.down();
80
134
  await tab.page.mouse.up();
81
- return { code };
82
- });
135
+ };
136
+ return {
137
+ code,
138
+ action,
139
+ captureSnapshot: false,
140
+ waitForNetwork: true,
141
+ };
83
142
  },
84
143
  };
85
144
  const dragSchema = elementSchema.extend({
@@ -97,20 +156,26 @@ const drag = {
97
156
  },
98
157
  handle: async (context, params) => {
99
158
  const validatedParams = dragSchema.parse(params);
100
- return await context.currentTab().runAndWait(async (tab) => {
159
+ const tab = context.currentTabOrDie();
160
+ const code = [
161
+ `// Drag mouse from (${validatedParams.startX}, ${validatedParams.startY}) to (${validatedParams.endX}, ${validatedParams.endY})`,
162
+ `await page.mouse.move(${validatedParams.startX}, ${validatedParams.startY});`,
163
+ `await page.mouse.down();`,
164
+ `await page.mouse.move(${validatedParams.endX}, ${validatedParams.endY});`,
165
+ `await page.mouse.up();`,
166
+ ];
167
+ const action = async () => {
101
168
  await tab.page.mouse.move(validatedParams.startX, validatedParams.startY);
102
169
  await tab.page.mouse.down();
103
170
  await tab.page.mouse.move(validatedParams.endX, validatedParams.endY);
104
171
  await tab.page.mouse.up();
105
- const code = [
106
- `// Drag mouse from (${validatedParams.startX}, ${validatedParams.startY}) to (${validatedParams.endX}, ${validatedParams.endY})`,
107
- `await page.mouse.move(${validatedParams.startX}, ${validatedParams.startY});`,
108
- `await page.mouse.down();`,
109
- `await page.mouse.move(${validatedParams.endX}, ${validatedParams.endY});`,
110
- `await page.mouse.up();`,
111
- ];
112
- return { code };
113
- });
172
+ };
173
+ return {
174
+ code,
175
+ action,
176
+ captureSnapshot: false,
177
+ waitForNetwork: true,
178
+ };
114
179
  },
115
180
  };
116
181
  const typeSchema = zod_1.z.object({
@@ -126,19 +191,26 @@ const type = {
126
191
  },
127
192
  handle: async (context, params) => {
128
193
  const validatedParams = typeSchema.parse(params);
129
- return await context.currentTab().runAndWait(async (tab) => {
130
- const code = [
131
- `// Type ${validatedParams.text}`,
132
- `await page.keyboard.type('${validatedParams.text}');`,
133
- ];
194
+ const tab = context.currentTabOrDie();
195
+ const code = [
196
+ `// Type ${validatedParams.text}`,
197
+ `await page.keyboard.type('${validatedParams.text}');`,
198
+ ];
199
+ const action = async () => {
134
200
  await tab.page.keyboard.type(validatedParams.text);
135
- if (validatedParams.submit) {
136
- code.push(`// Submit text`);
137
- code.push(`await page.keyboard.press('Enter');`);
201
+ if (validatedParams.submit)
138
202
  await tab.page.keyboard.press('Enter');
139
- }
140
- return { code };
141
- });
203
+ };
204
+ if (validatedParams.submit) {
205
+ code.push(`// Submit text`);
206
+ code.push(`await page.keyboard.press('Enter');`);
207
+ }
208
+ return {
209
+ code,
210
+ action,
211
+ captureSnapshot: false,
212
+ waitForNetwork: true,
213
+ };
142
214
  },
143
215
  };
144
216
  exports.default = [