Skip to content

Commit 7d310f7

Browse files
Support for ios parallel runs (#17)
* added support to fetch port for parallel ios session * update aBridge dependency * add logic to check only for simulator * fix getAttributes * bump version --------- Co-authored-by: Sudharsan Selvaraj <sudharsanselvaraj.c@gmail.com>
1 parent 444e996 commit 7d310f7

File tree

5 files changed

+75
-17
lines changed

5 files changed

+75
-17
lines changed

server/lib/src/runner.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'package:integration_test/integration_test.dart';
99
import 'package:package_info_plus/package_info_plus.dart';
1010

1111
const MAX_TEST_DURATION_SECS = 24 * 60 * 60;
12-
const serverVersion = '0.0.14';
12+
const serverVersion = '0.0.15';
1313

1414
void initializeTest({Widget? app, Function? callback}) async {
1515
IntegrationTestWidgetsFlutterBinding binding =

server/lib/src/server.dart

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:io';
2+
13
import 'package:appium_flutter_server/src/handler/click.dart';
24
import 'package:appium_flutter_server/src/handler/double_click.dart';
35
import 'package:appium_flutter_server/src/handler/delete_session.dart';
@@ -22,11 +24,13 @@ import 'package:appium_flutter_server/src/handler/wait/wait_for_absent.dart';
2224
import 'package:appium_flutter_server/src/handler/wait/wait_for_visible.dart';
2325
import 'package:appium_flutter_server/src/logger.dart';
2426
import 'package:shelf_plus/shelf_plus.dart' as shelf_plus;
27+
import 'package:device_info_plus/device_info_plus.dart';
2528

2629
import 'package:appium_flutter_server/src/handler/clear.dart';
2730

2831
import 'handler/gesture/drag_drop.dart';
2932
import 'handler/long_press.dart';
33+
import 'package:a_bridge/a_bridge.dart';
3034

3135
enum HttpMethod { GET, POST, DELETE, PUT, PATCH }
3236

@@ -78,8 +82,8 @@ class FlutterServer {
7882
"/session/<sessionId>/appium/gestures/double_click"));
7983
_registerPost(ScrollTillVisibleHandler(
8084
"/session/<sessionId>/appium/gestures/scroll_till_visible"));
81-
_registerPost(DragAndDrop(
82-
"/session/<sessionId>/appium/gestures/drag_drop"));
85+
_registerPost(
86+
DragAndDrop("/session/<sessionId>/appium/gestures/drag_drop"));
8387

8488
/* Wait handlers */
8589
_registerPost(
@@ -104,21 +108,41 @@ class FlutterServer {
104108
}
105109

106110
void startServer() async {
111+
if (Platform.isIOS) {
112+
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
113+
IosDeviceInfo ios = await deviceInfo.iosInfo;
114+
log("Ios Device info: $ios");
115+
if (!ios.isPhysicalDevice) {
116+
ABridge aBridge = ABridge();
117+
Map<String, dynamic>? arguments = await aBridge.getArgumentPair();
118+
log('Command line arguments: $arguments');
119+
if (arguments != null && arguments.containsKey('port')) {
120+
log('Command line port value for ios: ${arguments['port']}');
121+
await triggerServer(int.parse(arguments['port']));
122+
return;
123+
}
124+
}
125+
}
107126
final [startPort, endPort] = PORT_RANGE;
108127
int bindingPort = startPort;
109-
110-
while (bindingPort <= endPort) {
111-
try {
112-
await shelf_plus.shelfRun(() => _app.call,
113-
defaultBindAddress: "0.0.0.0",
114-
defaultBindPort: bindingPort,
115-
defaultEnableHotReload: false);
116-
log("Appium flutter server is listening on port $bindingPort");
117-
break;
118-
} catch (e) {
119-
log("Unable to start server on port $bindingPort.");
120-
}
128+
bool serverStarted = false;
129+
while (bindingPort <= endPort && !serverStarted) {
130+
serverStarted = await triggerServer(bindingPort);
121131
bindingPort++;
122132
}
123133
}
134+
135+
Future<bool> triggerServer(int bindingPort) async {
136+
try {
137+
await shelf_plus.shelfRun(() => _app.call,
138+
defaultBindAddress: "0.0.0.0",
139+
defaultBindPort: bindingPort,
140+
defaultEnableHotReload: false);
141+
log("Appium flutter server is listening on port $bindingPort");
142+
return true;
143+
} catch (e) {
144+
log("Unable to start server on port $bindingPort.");
145+
}
146+
return false;
147+
}
124148
}

server/lib/src/utils/element_helper.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,6 @@ class ElementHelper {
221221
.getChildren()
222222
.first
223223
.getProperties();
224-
data.addAll(nodes);
225224
FlutterDriver.instance.tester
226225
.getSemantics(element.by)
227226
.getSemanticsData()
@@ -233,6 +232,7 @@ class ElementHelper {
233232
} catch (err) {
234233
log(err);
235234
}
235+
data.addAll(nodes);
236236
log("Available attributes for the element : ${element.by}");
237237
for (DiagnosticsNode node in nodes) {
238238
log("${node.name} -> ${node.value}");

server/pubspec.lock

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ packages:
99
url: "https://pub.dev"
1010
source: hosted
1111
version: "67.0.0"
12+
a_bridge:
13+
dependency: "direct main"
14+
description:
15+
name: a_bridge
16+
sha256: "5f097387bef51ffe176a3c19c5472908c8083087e5e48c825ddd69e92e252a58"
17+
url: "https://pub.dev"
18+
source: hosted
19+
version: "0.0.2"
1220
analyzer:
1321
dependency: transitive
1422
description:
@@ -169,6 +177,22 @@ packages:
169177
url: "https://pub.dev"
170178
source: hosted
171179
version: "2.3.6"
180+
device_info_plus:
181+
dependency: "direct main"
182+
description:
183+
name: device_info_plus
184+
sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91
185+
url: "https://pub.dev"
186+
source: hosted
187+
version: "10.1.0"
188+
device_info_plus_platform_interface:
189+
dependency: transitive
190+
description:
191+
name: device_info_plus_platform_interface
192+
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
193+
url: "https://pub.dev"
194+
source: hosted
195+
version: "7.0.0"
172196
fake_async:
173197
dependency: transitive
174198
description:
@@ -732,6 +756,14 @@ packages:
732756
url: "https://pub.dev"
733757
source: hosted
734758
version: "5.5.1"
759+
win32_registry:
760+
dependency: transitive
761+
description:
762+
name: win32_registry
763+
sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb"
764+
url: "https://pub.dev"
765+
source: hosted
766+
version: "1.1.3"
735767
xdg_directories:
736768
dependency: transitive
737769
description:

server/pubspec.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: appium_flutter_server
22
description: "Appium Flutter server using Integration Test package for testing Flutter apps with Appium"
3-
version: 0.0.14
3+
version: 0.0.15
44
homepage: "https://github.com/AppiumTestDistribution/appium-flutter-server"
55

66
environment:
@@ -21,6 +21,8 @@ dependencies:
2121
path_provider: any
2222
synchronized: any
2323
package_info_plus: any
24+
a_bridge: ^0.0.2
25+
device_info_plus: any
2426

2527
dev_dependencies:
2628
build_runner: ^2.4.10

0 commit comments

Comments
 (0)