From 40d0468a7dd58a4ee665e02350c691820dc593c0 Mon Sep 17 00:00:00 2001 From: alpaca00 Date: Tue, 29 Apr 2025 14:06:44 +0200 Subject: [PATCH 1/4] feat: add command to fetch render tree by widget type --- README.md | 2 +- src/driver.ts | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7759eea..7a9b519 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Get the latest version from `https://pub.dev/packages/appium_flutter_server/inst ```yaml dev_dependencies: - appium_flutter_server: 0.0.27 + appium_flutter_server: 0.0.28 ``` 2. Create a directory called `integration_test` in the root of your Flutter project. diff --git a/src/driver.ts b/src/driver.ts index 543f26c..c0869e7 100644 --- a/src/driver.ts +++ b/src/driver.ts @@ -1,5 +1,5 @@ import { desiredCapConstraints } from './desiredCaps'; -import { JWProxy, BaseDriver } from '@appium/base-driver'; +import { JWProxy, BaseDriver } from 'appium/driver'; import type { DefaultCreateSessionResult, DriverData, @@ -137,6 +137,13 @@ export class AppiumFlutterDriver extends BaseDriver { required: ['imageId'], }, }, + 'flutter: getRenderTreeByType': { + command: 'getRenderTreeByType', + params: { + required: ['widgetType'], + optional: ['text', 'key'], + }, + }, }; async doubleClick(origin: any, offset: any, locator: any) { @@ -325,13 +332,14 @@ export class AppiumFlutterDriver extends BaseDriver { ); } - async dragAndDrop(source: any, target: any) { + async dragAndDrop(source: any, target: any, elementOptions: any) { return this.proxy?.command( `/session/:sessionId/appium/gestures/drag_drop`, 'POST', { source, target, + elementOptions, }, ); } @@ -430,4 +438,15 @@ export class AppiumFlutterDriver extends BaseDriver { }); return activateAppResponse; } -} + + async getRenderTreeByType(widgetType: string, text?: string, key?: string) { + const query = new URLSearchParams({ widgetType }); + if (text) query.append('text', text); + if (key) query.append('key', key); + + return this.proxy?.command( + `/session/${this.sessionId}/element/render_tree?${query.toString()}`, + 'GET' + ); + } +} \ No newline at end of file From 17e4d2f687b02c53b53f1f63acbec87db7b8b924 Mon Sep 17 00:00:00 2001 From: alpaca00 Date: Tue, 29 Apr 2025 14:09:21 +0200 Subject: [PATCH 2/4] Remove params --- src/driver.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/driver.ts b/src/driver.ts index c0869e7..ff4910b 100644 --- a/src/driver.ts +++ b/src/driver.ts @@ -1,5 +1,5 @@ import { desiredCapConstraints } from './desiredCaps'; -import { JWProxy, BaseDriver } from 'appium/driver'; +import { JWProxy, BaseDriver } from '@appium/base-driver'; import type { DefaultCreateSessionResult, DriverData, @@ -332,14 +332,13 @@ export class AppiumFlutterDriver extends BaseDriver { ); } - async dragAndDrop(source: any, target: any, elementOptions: any) { + async dragAndDrop(source: any, target: any) { return this.proxy?.command( `/session/:sessionId/appium/gestures/drag_drop`, 'POST', { source, target, - elementOptions, }, ); } @@ -449,4 +448,4 @@ export class AppiumFlutterDriver extends BaseDriver { 'GET' ); } -} \ No newline at end of file +} From 6fbb9996ca55a3e97b6c8b59dc4028bca8b2ecfe Mon Sep 17 00:00:00 2001 From: alpaca00 Date: Tue, 29 Apr 2025 19:42:23 +0200 Subject: [PATCH 3/4] Changed widgetType to an optional argument --- package.json | 2 +- src/driver.ts | 33 +++++++++++++++++++++------------ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 1f1b307..73bf238 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "appium", "flutter" ], - "version": "1.1.4", + "version": "1.1.5", "author": "", "license": "MIT License", "repository": { diff --git a/src/driver.ts b/src/driver.ts index ff4910b..b2f31df 100644 --- a/src/driver.ts +++ b/src/driver.ts @@ -137,11 +137,11 @@ export class AppiumFlutterDriver extends BaseDriver { required: ['imageId'], }, }, - 'flutter: getRenderTreeByType': { - command: 'getRenderTreeByType', + 'flutter: getRenderTree': { + command: 'getRenderTree', params: { - required: ['widgetType'], - optional: ['text', 'key'], + required: [], + optional: ['widgetType', 'text', 'key'], }, }, }; @@ -438,14 +438,23 @@ export class AppiumFlutterDriver extends BaseDriver { return activateAppResponse; } - async getRenderTreeByType(widgetType: string, text?: string, key?: string) { - const query = new URLSearchParams({ widgetType }); - if (text) query.append('text', text); - if (key) query.append('key', key); + async getRenderTree(widgetType?: string, text?: string, key?: string) { + const query = new URLSearchParams(); - return this.proxy?.command( - `/session/${this.sessionId}/element/render_tree?${query.toString()}`, - 'GET' - ); + if (widgetType) { + query.append('widgetType', widgetType); + } + if (text) { + query.append('text', text); + } + if (key) { + query.append('key', key); + } + + const queryString = query.toString(); + const url = queryString + ? `/session/${this.sessionId}/element/render_tree?${queryString}` + : `/session/${this.sessionId}/element/render_tree`; + return this.proxy?.command(url, 'GET'); } } From ac5cdd58d14641f55d0cf6788803cd8baa692986 Mon Sep 17 00:00:00 2001 From: alpaca00 Date: Wed, 30 Apr 2025 09:08:54 +0200 Subject: [PATCH 4/4] Refactored according to the review comment --- src/driver.ts | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/driver.ts b/src/driver.ts index b2f31df..388faed 100644 --- a/src/driver.ts +++ b/src/driver.ts @@ -137,13 +137,13 @@ export class AppiumFlutterDriver extends BaseDriver { required: ['imageId'], }, }, - 'flutter: getRenderTree': { - command: 'getRenderTree', - params: { + 'flutter: renderTree': { + command: 'renderTree', + params: { required: [], optional: ['widgetType', 'text', 'key'], - }, - }, + }, + }, }; async doubleClick(origin: any, offset: any, locator: any) { @@ -438,23 +438,20 @@ export class AppiumFlutterDriver extends BaseDriver { return activateAppResponse; } - async getRenderTree(widgetType?: string, text?: string, key?: string) { - const query = new URLSearchParams(); + async renderTree(widgetType?: string, text?: string, key?: string) { + const body: Record = {}; - if (widgetType) { - query.append('widgetType', widgetType); + if (widgetType !== undefined) { + body['widgetType'] = widgetType; } - if (text) { - query.append('text', text); + if (text !== undefined) { + body['text'] = text; } - if (key) { - query.append('key', key); + if (key !== undefined) { + body['key'] = key; } - const queryString = query.toString(); - const url = queryString - ? `/session/${this.sessionId}/element/render_tree?${queryString}` - : `/session/${this.sessionId}/element/render_tree`; - return this.proxy?.command(url, 'GET'); - } + const url = `/session/${this.sessionId}/element/render_tree`; + return this.proxy?.command(url, 'POST', body); + } }