11import _ from 'lodash' ;
2- import { getProxyDriver } from '../utils' ;
2+ import { getProxyDriver , FLUTTER_LOCATORS } from '../utils' ;
33import { JWProxy } from 'appium/driver' ;
44import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver' ;
5+ // @ts -ignore
6+ import { XCUITestDriver } from 'appium-xcuitest-driver' ;
7+ // @ts -ignore
8+ import { Mac2Driver } from 'appium-mac2-driver' ;
59import { W3C_ELEMENT_KEY } from 'appium/driver' ;
610import type { AppiumFlutterDriver } from '../driver' ;
711
@@ -15,28 +19,37 @@ export async function findElOrEls(
1519) : Promise < any > {
1620 const driver = await getProxyDriver . bind ( this ) ( strategy ) ;
1721 let elementBody ;
18- if (
19- ! ( driver instanceof JWProxy ) &&
20- ! ( this . proxydriver instanceof AndroidUiautomator2Driver )
22+ function constructFindElementPayload (
23+ strategy : string ,
24+ selector : string ,
25+ proxyDriver : XCUITestDriver | AndroidUiautomator2Driver | Mac2Driver ,
2126 ) {
22- elementBody = {
23- using : strategy ,
24- value : selector ,
25- context, //this needs be validated
26- } ;
27- } else {
28- elementBody = {
29- strategy,
30- selector : [ '-flutter descendant' , '-flutter ancestor' ] . includes (
31- strategy ,
32- )
33- ? _ . isString ( selector )
34- ? JSON . parse ( selector )
35- : selector
36- : selector ,
37- context,
38- } ;
27+ const isFlutterLocator =
28+ strategy . startsWith ( '-flutter' ) || FLUTTER_LOCATORS . includes ( strategy ) ;
29+
30+ const parsedSelector =
31+ [ '-flutter descendant' , '-flutter ancestor' ] . includes ( strategy ) &&
32+ _ . isString ( selector )
33+ ? JSON . parse ( selector )
34+ : selector ; // Special case
35+
36+ if (
37+ proxyDriver instanceof AndroidUiautomator2Driver ||
38+ proxyDriver instanceof XCUITestDriver
39+ ) {
40+ return { strategy, selector, context } ;
41+ } else if ( isFlutterLocator ) {
42+ return { using : strategy , selector : parsedSelector , context } ;
43+ } else {
44+ return { using : strategy , value : parsedSelector , context } ;
45+ }
3946 }
47+
48+ elementBody = constructFindElementPayload (
49+ strategy ,
50+ selector ,
51+ this . proxydriver ,
52+ ) ;
4053 if ( mult ) {
4154 const response = await driver . command ( '/elements' , 'POST' , elementBody ) ;
4255 response . forEach ( ( element : any ) => {
0 commit comments