Skip to content

Commit f895674

Browse files
Merge pull request #564 from AutomationSolutionz/appium-driver-remote-launch
Appium/mobile automation remote driver integration with device farms
2 parents bd859fe + dd415e9 commit f895674

File tree

3 files changed

+99
-4
lines changed

3 files changed

+99
-4
lines changed

Framework/Built_In_Automation/Mobile/CrossPlatform/Appium/BuiltInFunctions.py

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111
# #
1212
#########################
1313

14+
1415
from appium import webdriver
15-
from appium.options.android import UiAutomator2Options
16-
from appium.options.ios import XCUITestOptions
17-
from appium.options.mac import Mac2Options
16+
# from appium.options.android import UiAutomator2Options
17+
# from appium.options.ios import XCUITestOptions
18+
# from appium.options.mac import Mac2Options
19+
from appium.options.android.uiautomator2.base import UiAutomator2Options
20+
from appium.options.ios.xcuitest.base import XCUITestOptions
21+
from appium.options.mac.mac2.base import Mac2Options
1822
import traceback
1923
import socket
2024
import os, sys, datetime, time, inspect, subprocess, re, signal, _thread, requests, copy
@@ -448,6 +452,96 @@ def unlock_android_app(data_set):
448452
)
449453

450454

455+
def remote_launch(data_set):
456+
"""
457+
Launch the application on a Kobiton remote device using direct user input.
458+
Handles commented desired capabilities.
459+
"""
460+
461+
sModuleInfo = inspect.currentframe().f_code.co_name + " : " + MODULE_NAME
462+
463+
remote_url = ""
464+
desired_caps = {}
465+
466+
try:
467+
for entry in data_set:
468+
key = entry[0].strip()
469+
value = entry[2].strip()
470+
if key == "remote_url":
471+
remote_url = value
472+
elif key == "desired_caps":
473+
desired_caps = CommonUtil.parse_value_into_object(value)
474+
475+
if not remote_url:
476+
CommonUtil.ExecLog(sModuleInfo, "Remote URL not provided", 3)
477+
return "zeuz_failed"
478+
if not desired_caps:
479+
CommonUtil.ExecLog(sModuleInfo, "Desired capabilities not provided", 3)
480+
return "zeuz_failed"
481+
482+
CommonUtil.ExecLog(
483+
sModuleInfo,
484+
f"Launching Kobiton session with capabilities: {desired_caps}",
485+
1,
486+
)
487+
488+
global appium_driver, appium_details, device_id, device_serial
489+
490+
platform = desired_caps["platformName"].lower()
491+
492+
if platform == "android":
493+
from appium.options.android import UiAutomator2Options
494+
options = UiAutomator2Options().load_capabilities(desired_caps)
495+
elif platform == "ios":
496+
from appium.options.ios import XCUITestOptions
497+
options = XCUITestOptions().load_capabilities(desired_caps)
498+
else:
499+
CommonUtil.ExecLog(sModuleInfo, "Platform must be either 'Android' or 'iOS'", 3)
500+
return "zeuz_failed"
501+
502+
appium_driver = webdriver.Remote(
503+
command_executor=remote_url,
504+
options=options
505+
)
506+
507+
time.sleep(5)
508+
509+
session_id = appium_driver.session_id
510+
device_name = desired_caps.get('appium:deviceName', 'Unknown Device')
511+
512+
device_id = f"Kobiton_{device_name}_{session_id[:8]}"
513+
device_serial = f"kobiton_{session_id}"
514+
515+
appium_details[device_id] = {
516+
"driver": appium_driver,
517+
"serial": device_serial,
518+
"type": platform,
519+
"kobiton_session": session_id
520+
}
521+
522+
Shared_Resources.Set_Shared_Variables("appium_details", appium_details)
523+
Shared_Resources.Set_Shared_Variables("device_id", device_id, protected=True)
524+
Shared_Resources.Set_Shared_Variables("device_serial", device_serial, protected=True)
525+
526+
portal_url = f"https://portal.kobiton.com/sessions/{session_id}"
527+
CommonUtil.ExecLog(
528+
sModuleInfo,
529+
f"Kobiton session created successfully. View session at: {portal_url}",
530+
1
531+
)
532+
533+
return "passed"
534+
535+
except Exception:
536+
error_msg = CommonUtil.Exception_Handler(sys.exc_info())
537+
CommonUtil.ExecLog(
538+
sModuleInfo,
539+
f"Failed to create Kobiton Appium driver: {error_msg}",
540+
3
541+
)
542+
return "zeuz_failed"
543+
544+
451545
@logger
452546
def launch_application(data_set):
453547
""" Launch the application the appium instance was created with, and create the instance if necessary """

Framework/Built_In_Automation/Sequential_Actions/action_declarations/appium.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
{ "name": "seek progress bar", "function": "Seek_Progress_Bar", "screenshot": "mobile"},
5353
{ "name": "zoom", "function": "zoom_action", "screenshot": "mobile"},
5454
{ "name": "pan", "function": "pan_action", "screenshot": "mobile"},
55+
{ "name": "remote launch", "function": "remote_launch", "screenshot": "none"},
5556
) # yapf: disable
5657

5758
module_name = "appium"

Framework/settings.conf renamed to Framework/setting.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ electron_chrome_path = ""
2626
Window = ""
2727
No_of_level_to_skip = 0
2828
ai_plugin = True
29-
sibling = False
29+
sibling = False

0 commit comments

Comments
 (0)