AltTester-Driver 2.1.2__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/AltTester_Driver.egg-info/PKG-INFO +14 -2
  2. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/AltTester_Driver.egg-info/SOURCES.txt +2 -0
  3. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/PKG-INFO +14 -2
  4. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/__init__.py +1 -1
  5. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/__version__.py +2 -2
  6. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/_websocket.py +1 -1
  7. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/altdriver.py +11 -9
  8. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/altobject.py +32 -1
  9. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/by.py +1 -1
  10. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/AltTesterCommands/__init__.py +1 -1
  11. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/AltTesterCommands/add_notification_listener.py +4 -4
  12. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/AltTesterCommands/remove_notification_listener.py +1 -1
  13. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/AltTesterCommands/reset_input.py +1 -1
  14. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/AltTesterCommands/set_server_logging.py +1 -1
  15. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/__init__.py +1 -1
  16. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/find_object.py +1 -1
  17. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/find_object_at_coordinates.py +1 -1
  18. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/find_object_which_contains.py +1 -1
  19. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/find_objects.py +1 -1
  20. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/find_objects_which_contains.py +1 -1
  21. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/wait_for_component_property.py +1 -1
  22. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/wait_for_object.py +1 -1
  23. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/wait_for_object_to_not_be_present.py +1 -1
  24. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/FindObjects/wait_for_object_which_contains.py +1 -1
  25. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/__init__.py +1 -1
  26. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/begin_touch.py +1 -1
  27. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/click_coordinates.py +1 -1
  28. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/end_touch.py +1 -1
  29. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/keys_down.py +1 -1
  30. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/keys_up.py +1 -1
  31. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/move_mouse.py +1 -1
  32. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/move_touch.py +1 -1
  33. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/multi_point_swipe.py +1 -1
  34. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/press_keys.py +1 -1
  35. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/scroll_mouse.py +1 -1
  36. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/swipe.py +1 -1
  37. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/tap_coordinates.py +1 -1
  38. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/InputActions/tilt.py +1 -1
  39. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/Notifications/__init__.py +1 -1
  40. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/Notifications/base_notification_callbacks.py +1 -1
  41. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/Notifications/load_scene_mode.py +1 -1
  42. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/Notifications/load_scene_notification_result.py +1 -1
  43. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/Notifications/log_notification_result.py +1 -1
  44. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/Notifications/notification_type.py +1 -1
  45. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/__init__.py +2 -1
  46. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/call_method.py +1 -1
  47. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/click_element.py +1 -1
  48. alttester_driver-2.2.2/alttester/commands/ObjectCommands/find_object_from_object.py +63 -0
  49. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/get_all_components.py +1 -1
  50. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/get_component_property.py +1 -1
  51. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/get_text.py +1 -1
  52. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/pointer_down.py +1 -1
  53. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/pointer_enter.py +1 -1
  54. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/pointer_exit.py +1 -1
  55. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/pointer_up.py +1 -1
  56. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/set_component_property.py +1 -1
  57. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/set_text.py +1 -1
  58. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/ObjectCommands/tap_element.py +1 -1
  59. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/__init__.py +2 -1
  60. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/delete_player_pref.py +1 -1
  61. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/delete_player_pref_key.py +1 -1
  62. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/get_all_loaded_scenes.py +1 -1
  63. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/get_current_scene.py +1 -1
  64. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/get_player_pref_key.py +1 -1
  65. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/get_time_scale.py +1 -1
  66. alttester_driver-2.2.2/alttester/commands/UnityCommands/get_visual_element_property.py +40 -0
  67. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/load_scene.py +1 -1
  68. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/set_player_pref_key.py +1 -1
  69. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/set_time_scale.py +1 -1
  70. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/unload_scene.py +1 -1
  71. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/UnityCommands/wait_for_current_scene_to_be.py +1 -1
  72. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/__init__.py +1 -1
  73. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/base_command.py +17 -1
  74. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/get_png_screenshot.py +1 -1
  75. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/get_server_version.py +1 -1
  76. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/get_static_property.py +1 -1
  77. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/commands/set_static_property.py +1 -1
  78. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/exceptions.py +5 -1
  79. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/keycode.py +1 -1
  80. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/logging.py +1 -1
  81. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/playerpref.py +1 -1
  82. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/alttester/reverse_port_forwarding.py +2 -2
  83. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/setup.py +1 -1
  84. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/__init__.py +1 -1
  85. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/conftest.py +1 -1
  86. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_driver.py +1 -1
  87. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_notifications.py +1 -1
  88. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_reverse_port_forwarding.py +1 -1
  89. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene01_part1.py +2 -2
  90. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene01_part2.py +39 -4
  91. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene02.py +1 -1
  92. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene03.py +1 -1
  93. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene05.py +1 -1
  94. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene07.py +1 -1
  95. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene09.py +1 -1
  96. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/test_scene10.py +1 -1
  97. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/integration/utils.py +1 -1
  98. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/unit/__init__.py +1 -1
  99. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/unit/test_altobject.py +1 -1
  100. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/unit/test_commands.py +1 -1
  101. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/tests/unit/test_websocket.py +1 -1
  102. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/AltTester_Driver.egg-info/dependency_links.txt +0 -0
  103. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/AltTester_Driver.egg-info/not-zip-safe +0 -0
  104. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/AltTester_Driver.egg-info/requires.txt +0 -0
  105. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/AltTester_Driver.egg-info/top_level.txt +0 -0
  106. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/MANIFEST.in +0 -0
  107. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/README.md +0 -0
  108. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/requirements-dev.txt +0 -0
  109. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/requirements.txt +0 -0
  110. {alttester_driver-2.1.2 → alttester_driver-2.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: AltTester-Driver
3
- Version: 2.1.2
3
+ Version: 2.2.2
4
4
  Summary: Python bindings for the AltTester® framework. AltTester® is an open-source UI driven test automation tool that helps you find objects in your game and interacts with them.
5
5
  Home-page: https://alttester.com/docs/sdk/latest/
6
6
  Author: Altom Consulting
@@ -38,6 +38,18 @@ Requires-Dist: loguru
38
38
  Requires-Dist: deprecated
39
39
  Requires-Dist: websocket-client
40
40
  Requires-Dist: pure-python-adb
41
+ Dynamic: author
42
+ Dynamic: author-email
43
+ Dynamic: classifier
44
+ Dynamic: description
45
+ Dynamic: description-content-type
46
+ Dynamic: home-page
47
+ Dynamic: keywords
48
+ Dynamic: license
49
+ Dynamic: project-url
50
+ Dynamic: requires-dist
51
+ Dynamic: requires-python
52
+ Dynamic: summary
41
53
 
42
54
  # AltTester® Python Bindings
43
55
 
@@ -64,6 +64,7 @@ alttester/commands/Notifications/notification_type.py
64
64
  alttester/commands/ObjectCommands/__init__.py
65
65
  alttester/commands/ObjectCommands/call_method.py
66
66
  alttester/commands/ObjectCommands/click_element.py
67
+ alttester/commands/ObjectCommands/find_object_from_object.py
67
68
  alttester/commands/ObjectCommands/get_all_components.py
68
69
  alttester/commands/ObjectCommands/get_component_property.py
69
70
  alttester/commands/ObjectCommands/get_text.py
@@ -81,6 +82,7 @@ alttester/commands/UnityCommands/get_all_loaded_scenes.py
81
82
  alttester/commands/UnityCommands/get_current_scene.py
82
83
  alttester/commands/UnityCommands/get_player_pref_key.py
83
84
  alttester/commands/UnityCommands/get_time_scale.py
85
+ alttester/commands/UnityCommands/get_visual_element_property.py
84
86
  alttester/commands/UnityCommands/load_scene.py
85
87
  alttester/commands/UnityCommands/set_player_pref_key.py
86
88
  alttester/commands/UnityCommands/set_time_scale.py
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: AltTester-Driver
3
- Version: 2.1.2
3
+ Version: 2.2.2
4
4
  Summary: Python bindings for the AltTester® framework. AltTester® is an open-source UI driven test automation tool that helps you find objects in your game and interacts with them.
5
5
  Home-page: https://alttester.com/docs/sdk/latest/
6
6
  Author: Altom Consulting
@@ -38,6 +38,18 @@ Requires-Dist: loguru
38
38
  Requires-Dist: deprecated
39
39
  Requires-Dist: websocket-client
40
40
  Requires-Dist: pure-python-adb
41
+ Dynamic: author
42
+ Dynamic: author-email
43
+ Dynamic: classifier
44
+ Dynamic: description
45
+ Dynamic: description-content-type
46
+ Dynamic: home-page
47
+ Dynamic: keywords
48
+ Dynamic: license
49
+ Dynamic: project-url
50
+ Dynamic: requires-dist
51
+ Dynamic: requires-python
52
+ Dynamic: summary
41
53
 
42
54
  # AltTester® Python Bindings
43
55
 
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -15,4 +15,4 @@
15
15
  along with this program. If not, see <https://www.gnu.org/licenses/>.
16
16
  """
17
17
 
18
- VERSION = "2.1.2"
18
+ VERSION = "2.2.2"
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -133,18 +133,20 @@ class AltDriver:
133
133
 
134
134
  def _check_server_version(self):
135
135
  server_version = commands.GetServerVersion.run(self._connection)
136
- logger.info(
137
- "Connection established with instrumented Unity app. AltTester(R) Version: {}", server_version)
136
+ logger.info("Connection established with instrumented Unity app. AltTester(R) Version: {}".format(
137
+ server_version))
138
138
 
139
139
  major_server, minor_server = self._split_version(server_version)
140
- major_driver, minor_driver = self._split_version(VERSION)
141
140
 
142
- if major_server != major_driver or minor_server != minor_driver:
143
- message = "Version mismatch. AltDriver version is {}. AltTester(R) version is {}.".format(
144
- VERSION,
145
- server_version
146
- )
141
+ server_major = int(major_server)
142
+ server_minor = int(minor_server)
147
143
 
144
+ is_supported = (server_major == 2 and server_minor == 2) or (
145
+ server_major == 1 and server_minor == 0)
146
+
147
+ if not is_supported:
148
+ message = "Version mismatch. AltDriver version is {}. AltTester(R) version is {}.".format(
149
+ VERSION, server_version)
148
150
  logger.warning(message)
149
151
 
150
152
  def _get_alt_object(self, data):
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -18,6 +18,7 @@
18
18
  import json
19
19
 
20
20
  import alttester.commands as commands
21
+ import alttester.exceptions as exceptions
21
22
  from alttester.by import By
22
23
 
23
24
 
@@ -157,6 +158,19 @@ class AltObject:
157
158
 
158
159
  return AltObject(self._altdriver, data)
159
160
 
161
+ def find_object_from_object(self, by, value, camera_by=By.NAME, camera_value="", enabled=True):
162
+ """Returns the child of the object that meets the specified conditions."""
163
+
164
+ data = commands.FindObjectFromObject.run(self._connection,
165
+ by, value, camera_by, camera_value, enabled, self)
166
+
167
+ if data is None:
168
+ return None
169
+
170
+ alt_object = AltObject(self, data)
171
+
172
+ return alt_object
173
+
160
174
  def get_all_components(self):
161
175
  """Returns all components."""
162
176
 
@@ -368,3 +382,20 @@ class AltObject:
368
382
  self, count, interval, wait
369
383
  )
370
384
  return AltObject(self._altdriver, data)
385
+
386
+ def get_visual_element_property(self, property_name: str) -> str:
387
+ """Gets a value for a given visual element property.
388
+
389
+ Args:
390
+ property_name: The name of the property of which value you want to get.
391
+
392
+ Returns:
393
+ The property value is serialized to a JSON string.
394
+
395
+ Raises:
396
+ WrongAltObjectTypeException: The method is called on an object that is not a VisualElement.
397
+ """
398
+ if self.type != "UIToolkit":
399
+ raise exceptions.WrongAltObjectTypeException(
400
+ "This method is only available for VisualElement objects")
401
+ return commands.GetVisualElementProperty.run(self._connection, property_name, self,)
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -22,7 +22,7 @@ from alttester.exceptions import InvalidParameterTypeException
22
22
 
23
23
  class AddNotificationListener(BaseCommand):
24
24
 
25
- def __init__(self, connection, notification_type, notification_callback, overwrite):
25
+ def __init__(self, connection, notification_type, notification_callback, overwrite=False):
26
26
  super().__init__(connection, "activateNotification")
27
27
 
28
28
  if notification_type not in NotificationType:
@@ -33,7 +33,7 @@ class AddNotificationListener(BaseCommand):
33
33
  )
34
34
  self.notification_type = notification_type
35
35
 
36
- if type(notification_callback) == "method":
36
+ if not callable(notification_callback):
37
37
  raise InvalidParameterTypeException(
38
38
  parameter_name='notification_callback',
39
39
  expected_types=[callable],
@@ -41,7 +41,7 @@ class AddNotificationListener(BaseCommand):
41
41
  )
42
42
  self.notification_callback = notification_callback
43
43
 
44
- if type(overwrite) == "bool":
44
+ if not isinstance(overwrite, bool):
45
45
  raise InvalidParameterTypeException(
46
46
  parameter_name='overwrite',
47
47
  expected_types=[bool],
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -27,3 +27,4 @@ from alttester.commands.ObjectCommands.pointer_up import *
27
27
  from alttester.commands.ObjectCommands.set_component_property import *
28
28
  from alttester.commands.ObjectCommands.tap_element import *
29
29
  from alttester.commands.ObjectCommands.click_element import *
30
+ from alttester.commands.ObjectCommands.find_object_from_object import *
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -0,0 +1,63 @@
1
+ """
2
+ Copyright(C) 2025 Altom Consulting
3
+
4
+ This program is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU General Public License as published by
6
+ the Free Software Foundation, either version 3 of the License, or
7
+ (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+ """
17
+
18
+ from alttester.commands.base_command import BaseCommand
19
+ from alttester.exceptions import InvalidParameterTypeException
20
+ from alttester.by import By
21
+
22
+
23
+ class FindObjectFromObject(BaseCommand):
24
+
25
+ def __init__(self, connection, by, value, camera_by, camera_value, enabled, alt_object):
26
+ super().__init__(connection, "findObject")
27
+
28
+ if by not in By:
29
+ raise InvalidParameterTypeException(
30
+ parameter_name="by",
31
+ expected_types=[By],
32
+ received_type=type(by)
33
+ )
34
+
35
+ if camera_by not in By:
36
+ raise InvalidParameterTypeException(
37
+ parameter_name="camera_by",
38
+ expected_types=[By],
39
+ received_type=type(camera_by)
40
+ )
41
+
42
+ self.by = by
43
+ self.value = value
44
+ self.camera_by = camera_by
45
+ self.camera_value = camera_value
46
+ self.enabled = enabled
47
+ self.alt_object = alt_object
48
+
49
+ @property
50
+ def _parameters(self):
51
+ parameters = super()._parameters
52
+ parameters.update(**{
53
+ "by": str(self.by),
54
+ "path": self.get_path_from_object(self.alt_object, self.by, self.value),
55
+ "cameraBy": str(self.camera_by),
56
+ "cameraPath": self.get_path(self.camera_by, self.camera_value),
57
+ "enabled": self.enabled,
58
+ })
59
+
60
+ return parameters
61
+
62
+ def execute(self):
63
+ return self.send()
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  """
2
- Copyright(C) 2024 Altom Consulting
2
+ Copyright(C) 2025 Altom Consulting
3
3
 
4
4
  This program is free software: you can redistribute it and/or modify
5
5
  it under the terms of the GNU General Public License as published by