From d6e25dd54f193882bc0762c518b5443bb6ea096a Mon Sep 17 00:00:00 2001 From: mondaychen Date: Wed, 13 Mar 2024 14:42:11 -0400 Subject: [PATCH] feat: allow scrolling directly to top or bottom --- src/helpers/availableActions.ts | 6 ++++-- src/helpers/rpc/domActions.ts | 14 ++++++++++++++ src/helpers/rpc/performAction.ts | 19 +++++++++++++++---- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/helpers/availableActions.ts b/src/helpers/availableActions.ts index ea44b94..cffb5bf 100644 --- a/src/helpers/availableActions.ts +++ b/src/helpers/availableActions.ts @@ -28,7 +28,8 @@ export const availableActionsVision = [ }, { name: "scroll", - description: 'Scroll the page up or down. Value can be "up" or "down"', + description: + 'Scroll the page to see the other parts. Use "up" or "down" to scroll half the height of the window. Use "top" or "bottom" to quickly scroll to the top or bottom of the page.', args: [ { name: "value", @@ -75,7 +76,8 @@ export const availableActions = [ }, { name: "scroll", - description: 'Scroll the page up or down. Value can be "up" or "down"', + description: + 'Scroll the page to see the other parts. Use "up" or "down" to scroll half the height of the window. Use "top" or "bottom" to scroll to the top or bottom of the page.', args: [ { name: "value", diff --git a/src/helpers/rpc/domActions.ts b/src/helpers/rpc/domActions.ts index 02089c2..b47cc4e 100644 --- a/src/helpers/rpc/domActions.ts +++ b/src/helpers/rpc/domActions.ts @@ -243,6 +243,20 @@ export class DomActions { await sleep(300); } + public async scrollToTop() { + await this.sendCommand("Runtime.evaluate", { + expression: "window.scroll({left: 0, top: 0})", + }); + await sleep(300); + } + + public async scrollToBottom() { + await this.sendCommand("Runtime.evaluate", { + expression: "window.scroll({left: 0, top: document.body.offsetHeight})", + }); + await sleep(300); + } + public async setValueWithElementId(payload: { elementId: number; value: string; diff --git a/src/helpers/rpc/performAction.ts b/src/helpers/rpc/performAction.ts index 07c4e0f..6e216f8 100644 --- a/src/helpers/rpc/performAction.ts +++ b/src/helpers/rpc/performAction.ts @@ -148,10 +148,21 @@ async function setValueWithLabel( } async function scroll(domActions: DomActions, action: Action) { - if (action.args.value === "up") { - await domActions.scrollUp(); - } else { - await domActions.scrollDown(); + switch (action.args.value) { + case "up": + await domActions.scrollUp(); + break; + case "down": + await domActions.scrollDown(); + break; + case "top": + await domActions.scrollToTop(); + break; + case "bottom": + await domActions.scrollToBottom(); + break; + default: + console.error("Invalid scroll value", action.args.value); } }