Skip to content

Commit fbae4c3

Browse files
fix: Added support for descendant within scroll (AppiumTestDistribution#141)
* Added support for descendant within scroll Co-authored-by: SrinivasanTarget <[email protected]> * Updated flutter-finder version Co-authored-by: SrinivasanTarget <[email protected]> --------- Co-authored-by: SrinivasanTarget <[email protected]>
1 parent 96142ec commit fbae4c3

File tree

7 files changed

+36
-12
lines changed

7 files changed

+36
-12
lines changed

flutter-finder/wdio-flutter-by-service/build/tsconfig.tsbuildinfo

Lines changed: 0 additions & 1 deletion
This file was deleted.

flutter-finder/wdio-flutter-by-service/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flutter-finder/wdio-flutter-by-service/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "wdio-flutter-by-service",
3-
"version": "1.2.0",
3+
"version": "1.3.0",
44
"description": "",
55
"scripts": {
66
"build": "rimraf build && tsc -b"

flutter-finder/wdio-flutter-by-service/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ declare global {
141141
// @ts-ignore
142142
type Locator = {
143143
using: string;
144-
value: string;
144+
value?: string;
145+
selector?: any;
145146
};
146147

147148
// @ts-ignore

flutter-finder/wdio-flutter-by-service/src/methods.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export async function flutterLongPress(
5252
export async function flutterScrollTillVisible(
5353
this: WebdriverIO.Browser,
5454
options: {
55-
finder: WebdriverIO.Element;
55+
finder: WebdriverIO.Element | Flutter.Locator;
5656
scrollView?: WebdriverIO.Element;
5757
scrollDirection?: 'up' | 'right' | 'down' | 'left';
5858
delta?: number;
@@ -61,8 +61,23 @@ export async function flutterScrollTillVisible(
6161
dragDuration?: number;
6262
},
6363
): Promise<WebdriverIO.Element | null> {
64+
// Convert the finder to the proper format for the server
65+
let finderForServer;
66+
if (options.finder && typeof options.finder === 'object' && 'using' in options.finder) {
67+
// It's a locator object (like from flutterByDescendant)
68+
finderForServer = options.finder;
69+
} else {
70+
// It's an element, extract the locator
71+
finderForServer = options.finder;
72+
}
73+
74+
const serverOptions = {
75+
...options,
76+
finder: finderForServer,
77+
};
78+
6479
const response = await browser.executeScript('flutter: scrollTillVisible', [
65-
options,
80+
serverOptions,
6681
]);
6782
return await w3cElementToWdioElement(this, response);
6883
}

flutter-finder/wdio-flutter-by-service/src/utils.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,19 @@ export function registerLocators(locatorConfig: Array<LocatorConfig>) {
121121
registerCustomMethod(
122122
`${methodName}`,
123123
(value: any) => {
124-
return {
125-
using: config.stategy,
126-
value: typeof value !== 'string' ? JSON.stringify(value) : value,
127-
};
124+
// For complex finders (descendant, ancestor), use 'selector' property
125+
// For simple finders, use 'value' property
126+
if (config.name === 'flutterByDescendant' || config.name === 'flutterByAncestor') {
127+
return {
128+
using: config.stategy,
129+
selector: typeof value !== 'string' ? value : JSON.parse(value),
130+
};
131+
} else {
132+
return {
133+
using: config.stategy,
134+
value: typeof value !== 'string' ? JSON.stringify(value) : value,
135+
};
136+
}
128137
},
129138
{
130139
attachToBrowser: true,

test/specs/test.e2e.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ describe('My Login application', () => {
127127
expect(await childElement.getText()).toEqual('Child 2');
128128
});
129129

130-
it.skip('Scroll until visible with Descendant', async () => {
130+
it('Scroll until visible with Descendant', async () => {
131131
await performLogin();
132132
await openScreen('Nested Scroll');
133133
const childElement = await browser.flutterScrollTillVisible({

0 commit comments

Comments
 (0)