@testdriverai/mcp 7.11.136-test → 7.11.138-test

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 (174) hide show
  1. package/ai/skills/testdriver-assert/SKILL.md +5 -5
  2. package/ai/skills/testdriver-caching/SKILL.md +2 -2
  3. package/ai/skills/testdriver-changelog/SKILL.md +186 -0
  4. package/ai/skills/testdriver-claude-mcp-plugin/SKILL.md +208 -0
  5. package/ai/skills/testdriver-click/SKILL.md +13 -13
  6. package/ai/skills/testdriver-client/SKILL.md +1 -1
  7. package/ai/skills/testdriver-debugging-with-screenshots/SKILL.md +5 -5
  8. package/ai/skills/testdriver-double-click/SKILL.md +7 -7
  9. package/ai/skills/testdriver-enterprise/SKILL.md +1 -1
  10. package/ai/skills/testdriver-events/SKILL.md +1 -1
  11. package/ai/skills/testdriver-exec/SKILL.md +10 -10
  12. package/ai/skills/testdriver-extract/SKILL.md +6 -6
  13. package/ai/skills/testdriver-find/SKILL.md +61 -61
  14. package/ai/skills/testdriver-focus-application/SKILL.md +6 -6
  15. package/ai/skills/testdriver-generating-tests/SKILL.md +3 -3
  16. package/ai/skills/testdriver-hosted/SKILL.md +3 -3
  17. package/ai/skills/testdriver-hover/SKILL.md +6 -6
  18. package/ai/skills/testdriver-making-assertions/SKILL.md +2 -2
  19. package/ai/skills/testdriver-mouse-down/SKILL.md +9 -9
  20. package/ai/skills/testdriver-mouse-up/SKILL.md +9 -9
  21. package/ai/skills/testdriver-parse/SKILL.md +4 -4
  22. package/ai/skills/testdriver-performing-actions/SKILL.md +4 -4
  23. package/ai/skills/testdriver-press-keys/SKILL.md +5 -5
  24. package/ai/skills/testdriver-quickstart/SKILL.md +51 -54
  25. package/ai/skills/testdriver-redraw/SKILL.md +1 -1
  26. package/ai/skills/testdriver-right-click/SKILL.md +7 -7
  27. package/ai/skills/testdriver-screenshot/SKILL.md +9 -9
  28. package/ai/skills/testdriver-scroll/SKILL.md +13 -13
  29. package/ai/skills/testdriver-self-hosted/SKILL.md +1 -1
  30. package/ai/skills/testdriver-type/SKILL.md +7 -7
  31. package/ai/skills/testdriver-wait/SKILL.md +5 -5
  32. package/ai/skills/testdriver-what-is-testdriver/SKILL.md +11 -11
  33. package/docs/{v7/_drafts → _drafts}/agents.mdx +1 -1
  34. package/docs/{v7/_drafts → _drafts}/best-practices.mdx +4 -4
  35. package/docs/{v7/_drafts → _drafts}/caching-selectors.mdx +3 -3
  36. package/docs/{v7/_drafts → _drafts}/configuration.mdx +4 -4
  37. package/docs/{v7/_drafts → _drafts}/debugging.mdx +4 -4
  38. package/docs/{v7/_drafts → _drafts}/error-handling.mdx +4 -4
  39. package/docs/{v7/_drafts → _drafts}/faq.mdx +7 -7
  40. package/docs/{v7/_drafts → _drafts}/installation.mdx +2 -2
  41. package/docs/{v7/_drafts → _drafts}/migration.mdx +4 -4
  42. package/docs/{v7/_drafts → _drafts}/observable.mdx +3 -3
  43. package/docs/{v7/_drafts → _drafts}/powerful.mdx +4 -4
  44. package/docs/{v7/_drafts → _drafts}/readme.mdx +11 -11
  45. package/docs/{v7/_drafts → _drafts}/reports.mdx +4 -4
  46. package/docs/{v7/_drafts → _drafts}/scalable.mdx +10 -10
  47. package/docs/{v7/_drafts → _drafts}/troubleshooting.mdx +4 -4
  48. package/docs/{v7/_drafts → _drafts}/vitest-plugin.mdx +2 -2
  49. package/docs/{v7/_drafts → _drafts}/vitest.mdx +9 -9
  50. package/docs/_scripts/generate-examples.js +9 -10
  51. package/docs/_scripts/generate-skills.js +4 -4
  52. package/docs/{v7/agent.mdx → agent.mdx} +17 -17
  53. package/docs/{v7/assert.mdx → assert.mdx} +5 -5
  54. package/docs/{v7/aws-setup.mdx → aws-setup.mdx} +6 -6
  55. package/docs/{v7/cache.mdx → cache.mdx} +9 -9
  56. package/docs/{v7/caching.mdx → caching.mdx} +13 -12
  57. package/docs/{v7/captcha.mdx → captcha.mdx} +7 -7
  58. package/docs/changelog.mdx +13 -13
  59. package/docs/{v7/ci-cd.mdx → ci-cd.mdx} +10 -10
  60. package/docs/{v7/click.mdx → click.mdx} +13 -13
  61. package/docs/client.mdx +323 -0
  62. package/docs/{v7/copilot → copilot}/auto-healing.mdx +2 -2
  63. package/docs/{v7/copilot → copilot}/running-tests.mdx +8 -8
  64. package/docs/{v7/customizing-devices.mdx → customizing-devices.mdx} +1 -1
  65. package/docs/{v7/dashcam.mdx → dashcam.mdx} +3 -3
  66. package/docs/{v7/debugging-with-screenshots.mdx → debugging-with-screenshots.mdx} +12 -12
  67. package/docs/docs.json +429 -288
  68. package/docs/{v7/double-click.mdx → double-click.mdx} +7 -7
  69. package/docs/{v7/elements.mdx → elements.mdx} +7 -7
  70. package/docs/{v7/enterprise.mdx → enterprise.mdx} +2 -2
  71. package/docs/{v7/errors.mdx → errors.mdx} +3 -3
  72. package/docs/{v7/events.mdx → events.mdx} +4 -4
  73. package/docs/{v7/exec.mdx → exec.mdx} +10 -10
  74. package/docs/{v7/extract.mdx → extract.mdx} +10 -10
  75. package/docs/{v7/find.mdx → find.mdx} +61 -61
  76. package/docs/{v7/focus-application.mdx → focus-application.mdx} +6 -6
  77. package/docs/{v7/generating-tests.mdx → generating-tests.mdx} +10 -10
  78. package/docs/guide/best-practices-polling.mdx +6 -1
  79. package/docs/{v7/hosted.mdx → hosted.mdx} +7 -7
  80. package/docs/{v7/hover.mdx → hover.mdx} +6 -6
  81. package/docs/interacting-with-your-app.mdx +198 -0
  82. package/docs/locating-elements.mdx +423 -0
  83. package/docs/{v7/making-assertions.mdx → making-assertions.mdx} +7 -7
  84. package/docs/{v7/mouse-down.mdx → mouse-down.mdx} +9 -9
  85. package/docs/{v7/mouse-up.mdx → mouse-up.mdx} +9 -9
  86. package/docs/options.mdx +320 -0
  87. package/docs/{v7/parse.mdx → parse.mdx} +12 -12
  88. package/docs/{v7/performing-actions.mdx → performing-actions.mdx} +11 -11
  89. package/docs/{v7/press-keys.mdx → press-keys.mdx} +5 -5
  90. package/docs/{v7/provision.mdx → provision.mdx} +9 -9
  91. package/docs/quickstart-cli.mdx +437 -0
  92. package/docs/quickstart-github.mdx +54 -0
  93. package/docs/quickstart-manual.mdx +135 -0
  94. package/docs/quickstart.mdx +22 -0
  95. package/docs/{v7/redraw.mdx → redraw.mdx} +7 -7
  96. package/docs/{v7/reusable-code.mdx → reusable-code.mdx} +3 -3
  97. package/docs/{v7/right-click.mdx → right-click.mdx} +7 -7
  98. package/docs/{v7/screenshot.mdx → screenshot.mdx} +9 -9
  99. package/docs/{v7/screenshots.mdx → screenshots.mdx} +3 -3
  100. package/docs/{v7/scroll.mdx → scroll.mdx} +13 -13
  101. package/docs/{v7/secrets.mdx → secrets.mdx} +4 -4
  102. package/docs/{v7/self-hosted.mdx → self-hosted.mdx} +7 -7
  103. package/docs/{v7/test-results-json.mdx → test-results-json.mdx} +4 -4
  104. package/docs/{v7/type.mdx → type.mdx} +7 -7
  105. package/docs/{v7/variables.mdx → variables.mdx} +2 -2
  106. package/docs/{v7/wait.mdx → wait.mdx} +5 -5
  107. package/docs/what-is-testdriver.mdx +54 -0
  108. package/lib/environments.json +1 -1
  109. package/lib/github-comment.mjs +2 -3
  110. package/package.json +1 -1
  111. package/scripts/generate-skills.js +1 -1
  112. package/docs/v7/client.mdx +0 -486
  113. package/docs/v7/quickstart.mdx +0 -451
  114. package/docs/v7/what-is-testdriver.mdx +0 -54
  115. /package/docs/{v7/_drafts → _drafts}/architecture.mdx +0 -0
  116. /package/docs/{v7/_drafts → _drafts}/auto-cache-key.mdx +0 -0
  117. /package/docs/{v7/_drafts → _drafts}/awesome-logs-quick-ref.mdx +0 -0
  118. /package/docs/{v7/_drafts → _drafts}/cli-to-sdk-migration.mdx +0 -0
  119. /package/docs/{v7/_drafts → _drafts}/commands/assert.mdx +0 -0
  120. /package/docs/{v7/_drafts → _drafts}/commands/exec.mdx +0 -0
  121. /package/docs/{v7/_drafts → _drafts}/commands/focus-application.mdx +0 -0
  122. /package/docs/{v7/_drafts → _drafts}/commands/hover-image.mdx +0 -0
  123. /package/docs/{v7/_drafts → _drafts}/commands/hover-text.mdx +0 -0
  124. /package/docs/{v7/_drafts → _drafts}/commands/if.mdx +0 -0
  125. /package/docs/{v7/_drafts → _drafts}/commands/match-image.mdx +0 -0
  126. /package/docs/{v7/_drafts → _drafts}/commands/press-keys.mdx +0 -0
  127. /package/docs/{v7/_drafts → _drafts}/commands/remember.mdx +0 -0
  128. /package/docs/{v7/_drafts → _drafts}/commands/run.mdx +0 -0
  129. /package/docs/{v7/_drafts → _drafts}/commands/scroll-until-image.mdx +0 -0
  130. /package/docs/{v7/_drafts → _drafts}/commands/scroll-until-text.mdx +0 -0
  131. /package/docs/{v7/_drafts → _drafts}/commands/scroll.mdx +0 -0
  132. /package/docs/{v7/_drafts → _drafts}/commands/type.mdx +0 -0
  133. /package/docs/{v7/_drafts → _drafts}/commands/wait-for-image.mdx +0 -0
  134. /package/docs/{v7/_drafts → _drafts}/commands/wait-for-text.mdx +0 -0
  135. /package/docs/{v7/_drafts → _drafts}/commands/wait.mdx +0 -0
  136. /package/docs/{v7/_drafts → _drafts}/contributing.mdx +0 -0
  137. /package/docs/{v7/_drafts → _drafts}/dashcam-title-feature.mdx +0 -0
  138. /package/docs/{v7/_drafts → _drafts}/hooks.mdx +0 -0
  139. /package/docs/{v7/_drafts → _drafts}/init-command.mdx +0 -0
  140. /package/docs/{v7/_drafts → _drafts}/playwright.mdx +0 -0
  141. /package/docs/{v7/_drafts → _drafts}/plugin-migration.mdx +0 -0
  142. /package/docs/{v7/_drafts → _drafts}/presets.mdx +0 -0
  143. /package/docs/{v7/_drafts → _drafts}/progressive-disclosure.mdx +0 -0
  144. /package/docs/{v7/_drafts → _drafts}/provision.mdx +0 -0
  145. /package/docs/{v7/_drafts → _drafts}/quick-start-test-recording.mdx +0 -0
  146. /package/docs/{v7/_drafts → _drafts}/screenshot.mdx +0 -0
  147. /package/docs/{v7/_drafts → _drafts}/sdk-awesome-logs.mdx +0 -0
  148. /package/docs/{v7/_drafts → _drafts}/sdk-browser-rendering.mdx +0 -0
  149. /package/docs/{v7/_drafts → _drafts}/sdk-migration.mdx +0 -0
  150. /package/docs/{v7/_drafts → _drafts}/sdk-v7-complete.mdx +0 -0
  151. /package/docs/{v7/_drafts → _drafts}/self-hosting.mdx +0 -0
  152. /package/docs/{v7/_drafts → _drafts}/test-recording.mdx +0 -0
  153. /package/docs/{v7/_drafts → _drafts}/writing-tests.mdx +0 -0
  154. /package/docs/{v7/examples → examples}/ai.mdx +0 -0
  155. /package/docs/{v7/examples → examples}/assert.mdx +0 -0
  156. /package/docs/{v7/examples → examples}/captcha-api.mdx +0 -0
  157. /package/docs/{v7/examples → examples}/chrome-extension.mdx +0 -0
  158. /package/docs/{v7/examples → examples}/drag-and-drop.mdx +0 -0
  159. /package/docs/{v7/examples → examples}/element-not-found.mdx +0 -0
  160. /package/docs/{v7/examples → examples}/findall-coffee-icons.mdx +0 -0
  161. /package/docs/{v7/examples → examples}/formatted-logging.mdx +0 -0
  162. /package/docs/{v7/examples → examples}/hover-image.mdx +0 -0
  163. /package/docs/{v7/examples → examples}/hover-text-with-description.mdx +0 -0
  164. /package/docs/{v7/examples → examples}/hover-text.mdx +0 -0
  165. /package/docs/{v7/examples → examples}/installer.mdx +0 -0
  166. /package/docs/{v7/examples → examples}/launch-vscode-linux.mdx +0 -0
  167. /package/docs/{v7/examples → examples}/match-image.mdx +0 -0
  168. /package/docs/{v7/examples → examples}/parse.mdx +0 -0
  169. /package/docs/{v7/examples → examples}/press-keys.mdx +0 -0
  170. /package/docs/{v7/examples → examples}/scroll-keyboard.mdx +0 -0
  171. /package/docs/{v7/examples → examples}/scroll-until-text.mdx +0 -0
  172. /package/docs/{v7/examples → examples}/scroll.mdx +0 -0
  173. /package/docs/{v7/examples → examples}/type.mdx +0 -0
  174. /package/docs/{v7/mcp.mdx → mcp.mdx} +0 -0
@@ -8,7 +8,7 @@ description: Read information from the screen using AI and return it as a string
8
8
 
9
9
  Extract information from the current screen using AI and return it as a string. Describe what you want in natural language, and the AI reads the screen and returns the matching value — text, numbers, labels, status messages, or any other on-screen content.
10
10
 
11
- Unlike [`assert()`](/v7/assert), which returns a boolean verdict, `extract()` returns the actual value so you can store it, compare it, or feed it into later steps and framework assertions.
11
+ Unlike [`assert()`](/assert), which returns a boolean verdict, `extract()` returns the actual value so you can store it, compare it, or feed it into later steps and framework assertions.
12
12
 
13
13
  ## Syntax
14
14
 
@@ -100,7 +100,7 @@ expect(Number(totalText)).toBeGreaterThan(0);
100
100
  <Check>
101
101
  **Extract for detailed assertions**
102
102
 
103
- Use `extract()` when a boolean [`assert()`](/v7/assert) isn't enough and you need the actual value to inspect:
103
+ Use `extract()` when a boolean [`assert()`](/assert) isn't enough and you need the actual value to inspect:
104
104
 
105
105
  ```javascript
106
106
  const confirmation = await testdriver.extract('the confirmation number');
@@ -214,11 +214,11 @@ describe('Extraction', () => {
214
214
  4. The extracted value is returned as a string
215
215
 
216
216
  <Note>
217
- Like [assertions](/v7/making-assertions), `extract()` reads the screen fresh on every call — it is not cached — so it always reflects the current state of the app.
217
+ Like [assertions](/making-assertions), `extract()` reads the screen fresh on every call — it is not cached — so it always reflects the current state of the app.
218
218
  </Note>
219
219
 
220
220
  ## Related Methods
221
221
 
222
- - [`assert()`](/v7/assert) - Verify screen state with a boolean AI judgment
223
- - [`find()`](/v7/find) - Locate elements to interact with
224
- - [`parse()`](/v7/parse) - Detect all UI elements on screen
222
+ - [`assert()`](/assert) - Verify screen state with a boolean AI judgment
223
+ - [`find()`](/find) - Locate elements to interact with
224
+ - [`parse()`](/parse) - Detect all UI elements on screen
@@ -6,7 +6,7 @@ description: Locate UI elements using natural language
6
6
 
7
7
  ## Overview
8
8
 
9
- Locate UI elements on screen using AI-powered natural language descriptions. Returns an `Element` object that can be interacted with.
9
+ Find UI elements on the screen with natural language descriptions and AI. This returns an `Element` object. You can interact with the object.
10
10
 
11
11
  ## Syntax
12
12
 
@@ -26,19 +26,19 @@ const element = await testdriver.find(description, options)
26
26
 
27
27
  <Expandable title="properties">
28
28
  <ParamField path="cacheKey" type="string">
29
- Custom cache key for storing element location. Use this to prevent cache pollution when using dynamic variables in prompts, or to share cache across tests.
29
+ A custom cache key to store the element location. Use this to keep the cache clean when you use dynamic variables in prompts. You can also use it to share the cache between tests.
30
30
  </ParamField>
31
31
 
32
32
  <ParamField path="cacheThreshold" type="number" default={0.05}>
33
- Similarity threshold (0-1) for cache matching. Lower values require more similarity. Set to -1 to disable cache.
33
+ The similarity threshold (0-1) for a cache match. A lower value needs more similarity. Set it to -1 to disable the cache.
34
34
  </ParamField>
35
35
 
36
36
  <ParamField path="timeout" type="number" default={10000}>
37
- Maximum time in milliseconds to poll for the element. Retries every 5 seconds until found or timeout expires. Defaults to `10000` (10 seconds). Set to `0` to disable polling and make a single attempt.
37
+ The maximum time in milliseconds to poll for the element. TestDriver tries again each 5 seconds until it finds the element or the timeout ends. The default is `10000` (10 seconds). Set it to `0` to disable the poll and try one time.
38
38
  </ParamField>
39
39
 
40
40
  <ParamField path="confidence" type="number">
41
- Minimum confidence threshold (0-1). If the AI's confidence score for the found element is below this value, the find will be treated as a failure (`element.found()` returns `false`). Useful for ensuring high-quality matches in critical test steps.
41
+ The minimum confidence threshold (0-1). If the confidence score of the found element is less than this value, the find is a failure (`element.found()` returns `false`). Use this to make sure of good matches in critical test steps.
42
42
  </ParamField>
43
43
 
44
44
  <ParamField path="type" type="string">
@@ -50,11 +50,11 @@ const element = await testdriver.find(description, options)
50
50
  </ParamField>
51
51
 
52
52
  <ParamField path="zoom" type="boolean" default={false}>
53
- Two-phase zoom mode for better precision in crowded UIs with many similar elements. Disabled by default.
53
+ A two-phase zoom mode for more precision in full UIs that have many similar elements. It is disabled by default.
54
54
  </ParamField>
55
55
 
56
56
  <ParamField path="verify" type="boolean" default={false}>
57
- Enable AI verification of the located element. When `true`, a second AI call checks that the coordinates returned actually correspond to the requested element, catching hallucinated or incorrect positions. Disabled by default for lower latency. Defaults to the global `verify` option set on the [SDK constructor](/v7/client) when not specified per call.
57
+ This enables AI verification of the found element. When `true`, a second AI call makes sure that the coordinates agree with the correct element. This catches incorrect positions. It is disabled by default for less latency. When you do not set it for each call, it uses the global `verify` option from the [SDK constructor](/client).
58
58
  </ParamField>
59
59
 
60
60
  <ParamField path="ai" type="object">
@@ -85,7 +85,7 @@ const element = await testdriver.find(description, options)
85
85
 
86
86
  ## Returns
87
87
 
88
- `Promise<Element>` - Element instance that has been automatically located
88
+ `Promise<Element>` - The Element instance that TestDriver found automatically.
89
89
 
90
90
  ## Examples
91
91
 
@@ -141,16 +141,16 @@ console.log('Price text:', price.text);
141
141
 
142
142
  ## Element Object
143
143
 
144
- The returned `Element` object provides:
144
+ The `Element` object that TestDriver returns gives these:
145
145
 
146
146
  ### Methods
147
147
 
148
- - `found()` - Check if element was located
148
+ - `found()` - Make a check if TestDriver found the element
149
149
  - `click(action)` - Click the element
150
- - `hover()` - Hover over the element
150
+ - `hover()` - Put the cursor on the element
151
151
  - `doubleClick()` - Double-click the element
152
152
  - `rightClick()` - Right-click the element
153
- - `find(newDescription)` - Re-locate with optional new description
153
+ - `find(newDescription)` - Find the element again with an optional new description
154
154
 
155
155
  ### Properties
156
156
 
@@ -163,11 +163,11 @@ The returned `Element` object provides:
163
163
  - `width`, `height` - Element dimensions
164
164
  - `boundingBox` - Complete bounding box
165
165
 
166
- See [Elements Reference](/v7/elements) for complete details.
166
+ See [Elements Reference](/elements) for complete details.
167
167
 
168
168
  ### JSON Serialization
169
169
 
170
- Elements can be safely serialized using `JSON.stringify()` for logging and debugging. Circular references are automatically removed:
170
+ You can serialize elements safely with `JSON.stringify()` for logs and for debug. TestDriver removes circular references automatically:
171
171
 
172
172
  ```javascript
173
173
  const element = await testdriver.find('login button');
@@ -197,18 +197,18 @@ console.log(JSON.stringify(element, null, 2));
197
197
  // }
198
198
  ```
199
199
 
200
- This is useful for:
201
- - Debugging element detection issues
202
- - Logging test execution details
203
- - Sharing element information across processes
204
- - Analyzing cache performance
200
+ Use this for these:
201
+ - To debug problems with element detection
202
+ - To log the details of the test
203
+ - To share element data between processes
204
+ - To examine the cache performance
205
205
 
206
206
  ## Best Practices
207
207
 
208
208
  <Check>
209
209
  **Be specific in descriptions**
210
210
 
211
- More specific descriptions improve accuracy:
211
+ More specific descriptions make the accuracy better:
212
212
 
213
213
  ```javascript
214
214
  // ✅ Good
@@ -222,7 +222,7 @@ This is useful for:
222
222
  <Check>
223
223
  **Always check if found**
224
224
 
225
- Verify elements were located before interacting:
225
+ Make sure that TestDriver found the elements before you interact with them:
226
226
 
227
227
  ```javascript
228
228
  const element = await testdriver.find('login button');
@@ -250,7 +250,7 @@ This is useful for:
250
250
 
251
251
  ## Confidence Threshold
252
252
 
253
- Require a minimum AI confidence score for element matches. If the confidence is below the threshold, `find()` treats the result as not found:
253
+ Set a minimum confidence score for element matches. If the confidence is less than the threshold, `find()` makes the result "not found":
254
254
 
255
255
  ```javascript
256
256
  // Require at least 90% confidence
@@ -264,10 +264,10 @@ if (!element.found()) {
264
264
  await element.click();
265
265
  ```
266
266
 
267
- This is useful for:
268
- - Critical test steps where an incorrect click could cause cascading failures
269
- - Distinguishing between similar elements (e.g., multiple buttons)
270
- - Failing fast when the UI has changed unexpectedly
267
+ Use this for these:
268
+ - Critical test steps. An incorrect click can cause more failures.
269
+ - To tell the difference between similar elements (for example, many buttons)
270
+ - To fail quickly when the UI changed
271
271
 
272
272
  ```javascript
273
273
  // Combine with timeout for robust polling with confidence gate
@@ -278,11 +278,11 @@ const element = await testdriver.find('success notification', {
278
278
  ```
279
279
 
280
280
  <Tip>
281
- The `confidence` value is a float between 0 and 1 (e.g., `0.9` = 90%). The AI returns its confidence with each find result, which you can also read from `element.confidence` after a successful find.
281
+ The `confidence` value is a float between 0 and 1 (for example, `0.9` = 90%). The AI returns its confidence with each find result. You can also read this from `element.confidence` after a good find.
282
282
  </Tip>
283
283
  ## Element Type
284
284
 
285
- Use the `type` option to hint what kind of element you're looking for. This wraps your description into a more specific prompt for the AI, improving match accuracy especially when users provide short or ambiguous descriptions.
285
+ Use the `type` option to show which kind of element you look for. This puts your description into a more specific prompt for the AI. It makes the match accuracy better, primarily when a description is short or not clear.
286
286
 
287
287
  ```javascript
288
288
  // Find text on the page
@@ -309,11 +309,11 @@ const el = await testdriver.find('the blue submit button', { type: 'any' });
309
309
  | `"any"` | Original description (no wrapping) |
310
310
 
311
311
  <Tip>
312
- This is particularly useful for short descriptions like `"Submit"` or `"Login"` where the AI may not know whether to look for a button, a link, or visible text. Specifying `type` removes the ambiguity.
312
+ Use this primarily for short descriptions such as `"Submit"` or `"Login"`. In these, the AI can be not sure to look for a button, a link, or visible text. When you give the `type`, the description becomes clear.
313
313
  </Tip>
314
314
  ## Polling for Dynamic Elements
315
315
 
316
- By default, `find()` polls for up to 10 seconds (retrying every 5 seconds) until the element is found. You can customize this with the `timeout` option:
316
+ By default, `find()` polls for a maximum of 10 seconds (it tries again each 5 seconds) until it finds the element. You can change this with the `timeout` option:
317
317
 
318
318
  ```javascript
319
319
  // Uses default 10s timeout - polls every 5 seconds
@@ -329,18 +329,18 @@ const element = await testdriver.find('login button', { timeout: 0 });
329
329
  ```
330
330
 
331
331
  The `timeout` option:
332
- - Defaults to `10000` (10 seconds)
333
- - Retries finding the element every 5 seconds
334
- - Stops when the element is found or the timeout expires
335
- - Logs progress during polling
336
- - Returns the element (check `element.found()` if not throwing on failure)
337
- - Set to `0` to disable polling and make a single attempt
332
+ - Has a default of `10000` (10 seconds)
333
+ - Tries to find the element again each 5 seconds
334
+ - Stops when it finds the element or the timeout ends
335
+ - Logs the progress during the poll
336
+ - Returns the element (make a check with `element.found()` if it does not throw an error on a failure)
337
+ - Set it to `0` to disable the poll and try one time
338
338
 
339
339
  ## Zoom Mode
340
340
 
341
- Zoom mode is **disabled by default**. It uses a two-phase approach for better precision when locating elements, especially in crowded UIs with many similar elements.
341
+ Zoom mode is **disabled by default**. It uses a two-phase method for more precision when it finds elements, primarily in full UIs that have many similar elements.
342
342
 
343
- To enable zoom for a specific find call, pass `zoom: true`:
343
+ To enable zoom for a specific find call, give `zoom: true`:
344
344
 
345
345
  ```javascript
346
346
  // Enable zoom for better precision in crowded UIs
@@ -353,22 +353,22 @@ const largeButton = await testdriver.find('big hero button');
353
353
 
354
354
  ### How Zoom Mode Works
355
355
 
356
- 1. **Phase 1**: AI identifies the approximate location of the element
357
- 2. **Phase 2**: A 30% crop of the screen is created around that location
358
- 3. **Phase 3**: AI performs precise location on the zoomed/cropped image
359
- 4. **Result**: Coordinates are converted back to absolute screen position
356
+ 1. **Phase 1**: The AI finds the approximate location of the element.
357
+ 2. **Phase 2**: TestDriver makes a 30% crop of the screen around that location.
358
+ 3. **Phase 3**: The AI does the precise location on the cropped image.
359
+ 4. **Result**: TestDriver changes the coordinates back to the absolute screen position.
360
360
 
361
- This two-phase approach gives the AI a higher-resolution view of the target area, improving accuracy when multiple similar elements are close together.
361
+ This two-phase method gives the AI a higher-resolution view of the target area. It makes the accuracy better when many similar elements are near together.
362
362
 
363
363
  <Tip>
364
- You may want to enable zoom with `zoom: true` when:
365
- - Targeting small elements in crowded UIs with many similar elements
366
- - You need extra precision for closely spaced UI elements
364
+ Enable zoom with `zoom: true` when:
365
+ - You target small elements in full UIs that have many similar elements
366
+ - You need more precision for UI elements that are near together
367
367
  </Tip>
368
368
 
369
369
  ## Verify Mode
370
370
 
371
- Verify mode is **disabled by default**. When enabled, a second AI call checks that the coordinates returned by `find()` actually correspond to the requested element, catching hallucinated or incorrect positions.
371
+ Verify mode is **disabled by default**. When it is enabled, a second AI call makes sure that the coordinates from `find()` agree with the correct element. This catches incorrect positions.
372
372
 
373
373
  ```javascript
374
374
  // Enable verification for critical interactions
@@ -378,13 +378,13 @@ await deleteBtn.click();
378
378
 
379
379
  ### How Verify Mode Works
380
380
 
381
- 1. **Phase 1**: AI locates the element and returns coordinates
382
- 2. **Phase 2**: A second AI call examines the screenshot at those coordinates to confirm the element matches the description
383
- 3. **Result**: If verification fails, the find is retried or marked as not found
381
+ 1. **Phase 1**: The AI finds the element and returns coordinates.
382
+ 2. **Phase 2**: A second AI call looks at the screenshot at those coordinates. It makes sure that the element agrees with the description.
383
+ 3. **Result**: If the verification fails, TestDriver tries the find again or marks it "not found".
384
384
 
385
385
  ### Combining Zoom and Verify
386
386
 
387
- For maximum accuracy, enable both `zoom` and `verify` together. This is useful for critical interactions where clicking the wrong element could cause cascading failures:
387
+ For the maximum accuracy, enable `zoom` and `verify` together. Use this for critical interactions. A click on the wrong element can cause more failures:
388
388
 
389
389
  ```javascript
390
390
  // Maximum accuracy: zoom for precision + verify to catch hallucinations
@@ -397,13 +397,13 @@ await element.click();
397
397
 
398
398
  ## Cache Options
399
399
 
400
- When a test completes successfully, the result of each `find()` is cached. On later runs, TestDriver reuses the cached match instead of making a fresh AI call, which significantly speeds up locating the same element. The cache lives in your [dashboard](https://console.testdriver.ai/cache) and is shared across runs see the [Cache](/v7/cache) page for how matching, thresholds, and invalidation work.
400
+ When a test completes correctly, TestDriver caches the result of each `find()`. On later runs, TestDriver uses the cached match again. It does not make a new AI call. This finds the same element much more quickly. The cache is in your [dashboard](https://console.testdriver.ai/cache). TestDriver shares it between runs. Read the [Cache](/cache) page to see how the match, the thresholds, and the invalidation work.
401
401
 
402
- Control caching behavior to optimize performance, especially when using dynamic variables in prompts.
402
+ Control the cache to make the performance better, primarily when you use dynamic variables in prompts.
403
403
 
404
404
  ### Custom Cache Key
405
405
 
406
- Use `cacheKey` to prevent cache pollution when prompts contain variables:
406
+ Use `cacheKey` to keep the cache clean when prompts have variables:
407
407
 
408
408
  ```javascript
409
409
  // ❌ Without cacheKey - creates new cache entry for each email value
@@ -425,7 +425,7 @@ await testdriver.find(`order ${orderId} status`, {
425
425
 
426
426
  ### Cache Threshold
427
427
 
428
- Control how similar a cached result must be to reuse it:
428
+ Control how similar a cached result must be before TestDriver uses it again:
429
429
 
430
430
  ```javascript
431
431
  // Default: 95% similarity required
@@ -449,12 +449,12 @@ await testdriver.find('submit button', {
449
449
  ```
450
450
 
451
451
  <Tip>
452
- By default, TestDriver auto-generates a cache key from the SHA-256 hash of your test file. When you modify your test file, the hash changes automatically, invalidating stale cache entries.
452
+ By default, TestDriver makes a cache key automatically from the SHA-256 hash of your test file. When you change your test file, the hash changes automatically. This makes the old cache entries not valid.
453
453
  </Tip>
454
454
 
455
455
  ### Manual Polling (Alternative)
456
456
 
457
- If you need custom polling logic:
457
+ If you need custom poll logic:
458
458
 
459
459
  ```javascript
460
460
  async function waitForElement(testdriver, description, timeout = 30000) {
@@ -594,10 +594,10 @@ describe('Element Finding', () => {
594
594
 
595
595
  ## Related Methods
596
596
 
597
- - [`click()`](/v7/click) - Click on found elements
598
- - [`hover()`](/v7/hover) - Hover over elements
599
- - [`assert()`](/v7/assert) - Verify element states
600
- - [Elements Reference](/v7/elements) - Complete Element API
597
+ - [`click()`](/click) - Click on found elements
598
+ - [`hover()`](/hover) - Hover over elements
599
+ - [`assert()`](/assert) - Verify element states
600
+ - [Elements Reference](/elements) - Complete Element API
601
601
 
602
602
  ---
603
603
 
@@ -6,7 +6,7 @@ description: Bring an application window to the foreground
6
6
 
7
7
  ## Overview
8
8
 
9
- Bring a specific application window to the foreground and make it the active window for interactions.
9
+ Move a specific application window to the front. Make it the active window for interactions.
10
10
 
11
11
  ## Syntax
12
12
 
@@ -17,12 +17,12 @@ await testdriver.focusApplication(name)
17
17
  ## Parameters
18
18
 
19
19
  <ParamField path="name" type="string" required>
20
- Application name (e.g., `'Google Chrome'`, `'Microsoft Edge'`, `'Notepad'`)
20
+ The application name (for example, `'Google Chrome'`, `'Microsoft Edge'`, `'Notepad'`)
21
21
  </ParamField>
22
22
 
23
23
  ## Returns
24
24
 
25
- `Promise<string>` - Result message
25
+ `Promise<string>` - The result message
26
26
 
27
27
  ## Examples
28
28
 
@@ -288,6 +288,6 @@ describe('Multi-Application Workflow', () => {
288
288
 
289
289
  ## Related Methods
290
290
 
291
- - [`exec()`](/v7/exec) - Launch applications with PowerShell
292
- - [`pressKeys()`](/v7/press-keys) - Use Alt+Tab to switch windows
293
- - [`find()`](/v7/find) - Locate elements in the focused window
291
+ - [`exec()`](/exec) - Launch applications with PowerShell
292
+ - [`pressKeys()`](/press-keys) - Use Alt+Tab to switch windows
293
+ - [`find()`](/find) - Locate elements in the focused window
@@ -9,7 +9,7 @@ Start by exploring your app. This is where tests begin: you describe a flow in p
9
9
  There are two ways to explore: chatting interactively with your AI assistant through the TestDriver MCP server, or handing a coding agent our instructions file and prompting it to generate a test.
10
10
 
11
11
  <Info>
12
- Both paths need an MCP-capable AI coding assistant. If you don't have one yet, start with **GitHub Copilot** — there's a [free tier](https://github.com/features/copilot/plans), no credit card required. See [Run → Setup](/v7/copilot/running-tests#setup) for the full install and sign-in walkthrough.
12
+ Both paths need an MCP-capable AI coding assistant. If you don't have one yet, start with **GitHub Copilot** — there's a [free tier](https://github.com/features/copilot/plans), no credit card required. See [Run → Setup](/copilot/running-tests#setup) for the full install and sign-in walkthrough.
13
13
  </Info>
14
14
 
15
15
  ## Instructions for Coding Agents
@@ -65,7 +65,7 @@ When the agent starts a session, a **live preview panel** opens in your editor.
65
65
  - **Debug issues** — see exactly what the AI sees
66
66
 
67
67
  <Note>
68
- The live preview panel requires the TestDriver VS Code extension. Set `TD_PREVIEW=ide` in your MCP configuration to enable it. See the [Run page](/v7/copilot/running-tests) for all device and preview options.
68
+ The live preview panel requires the TestDriver VS Code extension. Set `TD_PREVIEW=ide` in your MCP configuration to enable it. See the [Run page](/copilot/running-tests) for all device and preview options.
69
69
  </Note>
70
70
 
71
71
  ## Interactive Workflow
@@ -186,6 +186,6 @@ describe("Login Flow", () => {
186
186
 
187
187
  ## Next
188
188
 
189
- <Card title="Learn" icon="brain" arrow="true" horizontal href="/v7/caching">
189
+ <Card title="Learn" icon="brain" arrow="true" horizontal href="/caching">
190
190
  Once the agent has explored your app, TestDriver caches what it discovers so your tests replay instantly without re-reasoning over the screen every time.
191
191
  </Card>
@@ -51,7 +51,7 @@ Hosted is the default when you follow the Quickstart guide.
51
51
  <Card
52
52
  title="Try the Quickstart"
53
53
  icon="play"
54
- href="/v7/quickstart"
54
+ href="/quickstart"
55
55
  >
56
56
  Set your API key and start testing in minutes.
57
57
  </Card>
@@ -137,7 +137,7 @@ To prevent tests from failing due to exceeding your license slot limit, we recom
137
137
 
138
138
  ## When to Consider Self-Hosted
139
139
 
140
- Hosted is perfect for getting started and for teams that want zero infrastructure management. However, you might consider [Self-Hosted](/v7/self-hosted) if you:
140
+ Hosted is perfect for getting started and for teams that want zero infrastructure management. However, you might consider [Self-Hosted](/self-hosted) if you:
141
141
 
142
142
  - Want to escape per-second billing with a flat license fee
143
143
  - Require greater concurrency than offered in Cloud plans
@@ -149,7 +149,7 @@ Hosted is perfect for getting started and for teams that want zero infrastructur
149
149
  <Card
150
150
  title="Explore Self-Hosted"
151
151
  icon="server"
152
- href="/v7/self-hosted"
152
+ href="/self-hosted"
153
153
  >
154
154
  Learn about self-hosting for unlimited test execution at a flat rate.
155
155
  </Card>
@@ -6,11 +6,11 @@ description: Hover over elements or coordinates
6
6
 
7
7
  ## Overview
8
8
 
9
- Move the mouse cursor over elements or specific coordinates without clicking, useful for revealing tooltips, dropdowns, and hover effects.
9
+ Move the mouse cursor onto elements or coordinates without a click. Use this to show tooltips, dropdowns, and hover effects.
10
10
 
11
11
  ## Element Hover
12
12
 
13
- Hover over a located element.
13
+ Put the cursor on a found element.
14
14
 
15
15
  ### Syntax
16
16
 
@@ -42,7 +42,7 @@ await submenu.click();
42
42
 
43
43
  ## Coordinate Hover
44
44
 
45
- Hover at specific screen coordinates.
45
+ Put the cursor at screen coordinates.
46
46
 
47
47
  ### Syntax
48
48
 
@@ -273,6 +273,6 @@ describe('Hover Interactions', () => {
273
273
 
274
274
  ## Related Methods
275
275
 
276
- - [`find()`](/v7/find) - Locate elements to hover
277
- - [`click()`](/v7/click) - Click after hovering
278
- - [`mouseDown()`](/v7/click) - Start drag operations
276
+ - [`find()`](/find) - Locate elements to hover
277
+ - [`click()`](/click) - Click after hovering
278
+ - [`mouseDown()`](/click) - Start drag operations
@@ -18,7 +18,7 @@ await testdriver.find('first product card in the grid');
18
18
  await testdriver.find('dropdown menu labeled "Country"');
19
19
  ```
20
20
 
21
- <Info>TestDriver will cache found elements for improved performance on subsequent calls. Learn more about [element caching here](/v7/caching).</Info>
21
+ <Info>TestDriver will cache found elements for improved performance on subsequent calls. Learn more about [element caching here](/caching).</Info>
22
22
 
23
23
  ### Debugging Found Elements
24
24
 
@@ -103,6 +103,6 @@ await testdriver.assert('form has red border');
103
103
 
104
104
  ## Next
105
105
 
106
- <Card title="Adapt" icon="arrows-rotate" href="/v7/performing-actions">
106
+ <Card title="Adapt" icon="arrows-rotate" href="/performing-actions">
107
107
  Drive your app forward by performing actions on the elements you've located and validated.
108
108
  </Card>
@@ -6,7 +6,7 @@ description: Press the mouse button without releasing it
6
6
 
7
7
  ## Overview
8
8
 
9
- The `mouseDown()` method presses the mouse button at an element's location without releasing it. This is useful for drag operations, custom gestures, or when you need precise control over mouse events. You can either call it on an [`Element`](/v7/core-concepts/elements) instance or use it directly with a selector.
9
+ The `mouseDown()` method pushes the mouse button at the location of an element. It does not release the button. Use this for drag operations, custom gestures, or when you need precise control of the mouse events. You can call it on an [`Element`](/core-concepts/elements) instance. Or you can use it with a selector.
10
10
 
11
11
  ## Syntax
12
12
 
@@ -30,7 +30,7 @@ When called directly on the AI client:
30
30
 
31
31
  ## Returns
32
32
 
33
- Returns a `Promise<void>` that resolves when the mouse button is pressed.
33
+ It returns a `Promise<void>`. The promise resolves when TestDriver pushes the mouse button.
34
34
 
35
35
  ## Examples
36
36
 
@@ -147,15 +147,15 @@ test('resizes panel', async () => {
147
147
 
148
148
  ## Important Notes
149
149
 
150
- - Always pair `mouseDown()` with [`mouseUp()`](/v7/mouse-up) to complete the gesture
150
+ - Always pair `mouseDown()` with [`mouseUp()`](/mouse-up) to complete the gesture
151
151
  - The mouse button remains pressed until `mouseUp()` is called
152
- - Use [`hover()`](/v7/hover) to move the mouse while the button is pressed
152
+ - Use [`hover()`](/hover) to move the mouse while the button is pressed
153
153
  - For simple drag operations, consider using `ai()` with a natural language description like `"drag file to folder"`
154
154
 
155
155
  ## Related Methods
156
156
 
157
- - [`mouseUp()`](/v7/mouse-up) - Release the mouse button
158
- - [`hover()`](/v7/hover) - Move mouse to element
159
- - [`click()`](/v7/click) - Full click (mouseDown + mouseUp)
160
- - [`doubleClick()`](/v7/double-click) - Double-click on element
161
- - [`rightClick()`](/v7/right-click) - Right-click for context menu
157
+ - [`mouseUp()`](/mouse-up) - Release the mouse button
158
+ - [`hover()`](/hover) - Move mouse to element
159
+ - [`click()`](/click) - Full click (mouseDown + mouseUp)
160
+ - [`doubleClick()`](/double-click) - Double-click on element
161
+ - [`rightClick()`](/right-click) - Right-click for context menu
@@ -6,7 +6,7 @@ description: Release the mouse button
6
6
 
7
7
  ## Overview
8
8
 
9
- The `mouseUp()` method releases the mouse button, completing a drag operation or custom mouse gesture that was started with [`mouseDown()`](/v7/mouse-down). You can call it without parameters to release at the current mouse position.
9
+ The `mouseUp()` method releases the mouse button. It completes a drag operation or a custom mouse gesture that you started with [`mouseDown()`](/mouse-down). Call it without parameters to release the button at the present mouse position.
10
10
 
11
11
  ## Syntax
12
12
 
@@ -21,7 +21,7 @@ None. The mouse button is released at the current cursor position.
21
21
 
22
22
  ## Returns
23
23
 
24
- Returns a `Promise<void>` that resolves when the mouse button is released.
24
+ It returns a `Promise<void>`. The promise resolves when TestDriver releases the mouse button.
25
25
 
26
26
  ## Examples
27
27
 
@@ -150,15 +150,15 @@ test('selects text with mouse drag', async () => {
150
150
 
151
151
  ## Important Notes
152
152
 
153
- - `mouseUp()` must be preceded by [`mouseDown()`](/v7/mouse-down) to have an effect
153
+ - `mouseUp()` must be preceded by [`mouseDown()`](/mouse-down) to have an effect
154
154
  - Releases the button at the current cursor position
155
155
  - Completes any drag or selection operation that was in progress
156
- - For simple clicks, use [`click()`](/v7/click) instead of mouseDown/mouseUp pair
156
+ - For simple clicks, use [`click()`](/click) instead of mouseDown/mouseUp pair
157
157
 
158
158
  ## Related Methods
159
159
 
160
- - [`mouseDown()`](/v7/mouse-down) - Press mouse button without releasing
161
- - [`hover()`](/v7/hover) - Move mouse to element
162
- - [`click()`](/v7/click) - Complete click (mouseDown + mouseUp)
163
- - [`doubleClick()`](/v7/double-click) - Double-click on element
164
- - [`rightClick()`](/v7/right-click) - Right-click for context menu
160
+ - [`mouseDown()`](/mouse-down) - Press mouse button without releasing
161
+ - [`hover()`](/hover) - Move mouse to element
162
+ - [`click()`](/click) - Complete click (mouseDown + mouseUp)
163
+ - [`doubleClick()`](/double-click) - Double-click on element
164
+ - [`rightClick()`](/right-click) - Right-click for context menu
@@ -230,7 +230,7 @@ console.log(`Image dimensions: ${result.imageWidth}x${result.imageHeight}`);
230
230
 
231
231
  ## Related
232
232
 
233
- - [find()](/v7/find) - AI-powered element location
234
- - [assert()](/v7/assert) - Make AI-powered assertions about screen state
235
- - [screenshot()](/v7/screenshot) - Capture screenshots
236
- - [Elements Reference](/v7/elements) - Complete Element API
233
+ - [find()](/find) - AI-powered element location
234
+ - [assert()](/assert) - Make AI-powered assertions about screen state
235
+ - [screenshot()](/screenshot) - Capture screenshots
236
+ - [Elements Reference](/elements) - Complete Element API
@@ -6,11 +6,11 @@ description: Perform actions and handle dynamic, async UI so tests adapt to chan
6
6
 
7
7
  Real apps move, load, and change. Adapt your tests to handle it.
8
8
 
9
- Once you've [generated](/v7/generating-tests) and [learned](/v7/caching) your tests and gotten them [running](/v7/copilot/running-tests), the next challenge is the real world: buttons appear after a spinner, pages navigate, animations play, and content streams in over the network. To keep tests reliable, you need to perform the right actions and handle timing so your tests adapt to how the UI actually behaves instead of breaking.
9
+ Once you've [generated](/generating-tests) and [learned](/caching) your tests and gotten them [running](/copilot/running-tests), the next challenge is the real world: buttons appear after a spinner, pages navigate, animations play, and content streams in over the network. To keep tests reliable, you need to perform the right actions and handle timing so your tests adapt to how the UI actually behaves instead of breaking.
10
10
 
11
11
  ## Performing Actions
12
12
 
13
- TestDriver provides a variety of actions you can perform, like [clicking](/v7/click), [typing](/v7/type), [hovering](/v7/hover), and [scrolling](/v7/scroll). For a full list, see the [API Reference](/v7/click).
13
+ TestDriver provides a variety of actions you can perform, like [clicking](/click), [typing](/type), [hovering](/hover), and [scrolling](/scroll). For a full list, see the [API Reference](/click).
14
14
 
15
15
  ```javascript
16
16
  // Clicking
@@ -141,8 +141,8 @@ await testdriver.wait(1000);
141
141
  For waiting for specific **elements** to appear, prefer `find()` with a `timeout` option. Use `wait()` only for simple time-based pauses.
142
142
  </Note>
143
143
 
144
- Once your tests can reliably act on a changing UI and [assert](/v7/making-assertions) the results, the next step is figuring out what happened when something does go wrong.
144
+ Once your tests can reliably act on a changing UI and [assert](/making-assertions) the results, the next step is figuring out what happened when something does go wrong.
145
145
 
146
- <Card title="Next: Debug" icon="bug" href="/v7/debugging-with-screenshots">
146
+ <Card title="Next: Debug" icon="bug" href="/debugging-with-screenshots">
147
147
  Use screenshots and run output to see exactly what your test saw and pinpoint failures.
148
148
  </Card>
@@ -6,7 +6,7 @@ description: Press keyboard keys and shortcuts
6
6
 
7
7
  ## Overview
8
8
 
9
- Press one or more keyboard keys simultaneously, useful for keyboard shortcuts, navigation, and special keys.
9
+ Push one or more keyboard keys at the same time. Use this for keyboard shortcuts, navigation, and special keys.
10
10
 
11
11
  ## Syntax
12
12
 
@@ -17,7 +17,7 @@ await testdriver.pressKeys(keys)
17
17
  ## Parameters
18
18
 
19
19
  <ParamField path="keys" type="Array&lt;string&gt;" required>
20
- Array of keys to press simultaneously
20
+ An array of the keys to push at the same time
21
21
  </ParamField>
22
22
 
23
23
  ## Returns
@@ -343,6 +343,6 @@ describe('Keyboard Navigation', () => {
343
343
 
344
344
  ## Related Methods
345
345
 
346
- - [`type()`](/v7/type) - Type text
347
- - [`click()`](/v7/click) - Click elements
348
- - [`scroll()`](/v7/scroll) - Scroll pages
346
+ - [`type()`](/type) - Type text
347
+ - [`click()`](/click) - Click elements
348
+ - [`scroll()`](/scroll) - Scroll pages