Skip to content

Support for ios parallel runs #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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