Skip to content

Commit

Permalink
Support for ios parallel runs (#17)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
saikrishna321 and sudharsan-selvaraj committed Jul 5, 2024
1 parent 444e996 commit 7d310f7
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 17 deletions.
2 changes: 1 addition & 1 deletion server/lib/src/runner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:integration_test/integration_test.dart';
import 'package:package_info_plus/package_info_plus.dart';

const MAX_TEST_DURATION_SECS = 24 * 60 * 60;
const serverVersion = '0.0.14';
const serverVersion = '0.0.15';

void initializeTest({Widget? app, Function? callback}) async {
IntegrationTestWidgetsFlutterBinding binding =
Expand Down
52 changes: 38 additions & 14 deletions server/lib/src/server.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:io';

import 'package:appium_flutter_server/src/handler/click.dart';
import 'package:appium_flutter_server/src/handler/double_click.dart';
import 'package:appium_flutter_server/src/handler/delete_session.dart';
Expand All @@ -22,11 +24,13 @@ import 'package:appium_flutter_server/src/handler/wait/wait_for_absent.dart';
import 'package:appium_flutter_server/src/handler/wait/wait_for_visible.dart';
import 'package:appium_flutter_server/src/logger.dart';
import 'package:shelf_plus/shelf_plus.dart' as shelf_plus;
import 'package:device_info_plus/device_info_plus.dart';

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

import 'handler/gesture/drag_drop.dart';
import 'handler/long_press.dart';
import 'package:a_bridge/a_bridge.dart';

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

Expand Down Expand Up @@ -78,8 +82,8 @@ class FlutterServer {
"/session/<sessionId>/appium/gestures/double_click"));
_registerPost(ScrollTillVisibleHandler(
"/session/<sessionId>/appium/gestures/scroll_till_visible"));
_registerPost(DragAndDrop(
"/session/<sessionId>/appium/gestures/drag_drop"));
_registerPost(
DragAndDrop("/session/<sessionId>/appium/gestures/drag_drop"));

/* Wait handlers */
_registerPost(
Expand All @@ -104,21 +108,41 @@ class FlutterServer {
}

void startServer() async {
if (Platform.isIOS) {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
IosDeviceInfo ios = await deviceInfo.iosInfo;
log("Ios Device info: $ios");
if (!ios.isPhysicalDevice) {
ABridge aBridge = ABridge();
Map<String, dynamic>? arguments = await aBridge.getArgumentPair();
log('Command line arguments: $arguments');
if (arguments != null && arguments.containsKey('port')) {
log('Command line port value for ios: ${arguments['port']}');
await triggerServer(int.parse(arguments['port']));
return;
}
}
}
final [startPort, endPort] = PORT_RANGE;
int bindingPort = startPort;

while (bindingPort <= endPort) {
try {
await shelf_plus.shelfRun(() => _app.call,
defaultBindAddress: "0.0.0.0",
defaultBindPort: bindingPort,
defaultEnableHotReload: false);
log("Appium flutter server is listening on port $bindingPort");
break;
} catch (e) {
log("Unable to start server on port $bindingPort.");
}
bool serverStarted = false;
while (bindingPort <= endPort && !serverStarted) {
serverStarted = await triggerServer(bindingPort);
bindingPort++;
}
}

Future<bool> triggerServer(int bindingPort) async {
try {
await shelf_plus.shelfRun(() => _app.call,
defaultBindAddress: "0.0.0.0",
defaultBindPort: bindingPort,
defaultEnableHotReload: false);
log("Appium flutter server is listening on port $bindingPort");
return true;
} catch (e) {
log("Unable to start server on port $bindingPort.");
}
return false;
}
}
2 changes: 1 addition & 1 deletion server/lib/src/utils/element_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,6 @@ class ElementHelper {
.getChildren()
.first
.getProperties();
data.addAll(nodes);
FlutterDriver.instance.tester
.getSemantics(element.by)
.getSemanticsData()
Expand All @@ -233,6 +232,7 @@ class ElementHelper {
} catch (err) {
log(err);
}
data.addAll(nodes);
log("Available attributes for the element : ${element.by}");
for (DiagnosticsNode node in nodes) {
log("${node.name} -> ${node.value}");
Expand Down
32 changes: 32 additions & 0 deletions server/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "67.0.0"
a_bridge:
dependency: "direct main"
description:
name: a_bridge
sha256: "5f097387bef51ffe176a3c19c5472908c8083087e5e48c825ddd69e92e252a58"
url: "https://pub.dev"
source: hosted
version: "0.0.2"
analyzer:
dependency: transitive
description:
Expand Down Expand Up @@ -169,6 +177,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.3.6"
device_info_plus:
dependency: "direct main"
description:
name: device_info_plus
sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91
url: "https://pub.dev"
source: hosted
version: "10.1.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
url: "https://pub.dev"
source: hosted
version: "7.0.0"
fake_async:
dependency: transitive
description:
Expand Down Expand Up @@ -732,6 +756,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.5.1"
win32_registry:
dependency: transitive
description:
name: win32_registry
sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb"
url: "https://pub.dev"
source: hosted
version: "1.1.3"
xdg_directories:
dependency: transitive
description:
Expand Down
4 changes: 3 additions & 1 deletion server/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: appium_flutter_server
description: "Appium Flutter server using Integration Test package for testing Flutter apps with Appium"
version: 0.0.14
version: 0.0.15
homepage: "https://github.com/AppiumTestDistribution/appium-flutter-server"

environment:
Expand All @@ -21,6 +21,8 @@ dependencies:
path_provider: any
synchronized: any
package_info_plus: any
a_bridge: ^0.0.2
device_info_plus: any

dev_dependencies:
build_runner: ^2.4.10
Expand Down

0 comments on commit 7d310f7

Please sign in to comment.