Android Uiautomator2 Python Wrapper
This report summarizes scanner evidence for openatx/uiautomator2, a Python project with 8,417 GitHub stars. SynthScan examined 18,444 lines of code across 112 source files, recording 263 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 23.3 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 102 finding(s).
Are imports declared and package/API names verified? 65 finding(s).
Are wrappers, guards, and repeated structures necessary? 153 finding(s).
Which changes need focused human review? 263 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 263 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | uiautomator2/agent_cli/options.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | uiautomator2/agent_cli/options.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 86 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 174 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/options.py | 200 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | uiautomator2/agent_cli/commands.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | uiautomator2/agent_cli/commands.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 57 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 59 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 76 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 144 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 146 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 295 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 297 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 430 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 432 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 475 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 477 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 730 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | uiautomator2/agent_cli/commands.py | 732 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | uiautomator2/image.py | 304 | CODE | |
| MEDIUM | uiautomator2/image.py | 305 | CODE | |
| MEDIUM | uiautomator2/image.py | 306 | CODE | |
| MEDIUM | uiautomator2/image.py | 308 | CODE | |
| MEDIUM | uiautomator2/image.py | 309 | CODE | |
| MEDIUM | uiautomator2/image.py | 310 | CODE | |
| MEDIUM | uiautomator2/image.py | 312 | CODE | |
| MEDIUM | uiautomator2/image.py | 313 | CODE | |
| MEDIUM | uiautomator2/image.py | 315 | CODE | |
| MEDIUM | uiautomator2/image.py | 317 | CODE | |
| MEDIUM | uiautomator2/image.py | 320 | CODE | |
| MEDIUM | _archived/widget.py | 411 | CODE | |
| MEDIUM | _archived/widget.py | 413 | CODE | |
| MEDIUM | _archived/widget.py | 414 | CODE | |
| MEDIUM | _archived/widget.py | 415 | CODE | |
| MEDIUM | _archived/widget.py | 417 | CODE | |
| MEDIUM | _archived/widget.py | 418 | CODE | |
| MEDIUM | _archived/widget.py | 419 | CODE | |
| MEDIUM | _archived/widget.py | 420 | CODE | |
| MEDIUM | _archived/widget.py | 421 | CODE | |
| MEDIUM | _archived/widget.py | 428 | CODE | |
| MEDIUM | _archived/widget.py | 429 | CODE | |
| MEDIUM | _archived/widget.py | 431 | CODE | |
| MEDIUM | _archived/widget.py | 432 | CODE | |
| MEDIUM | _archived/widget.py | 433 | CODE | |
| MEDIUM | _archived/widget.py | 434 | CODE | |
| MEDIUM | _archived/widget.py | 436 | CODE | |
| MEDIUM | _archived/widget.py | 437 | CODE | |
| MEDIUM | _archived/widget.py | 439 | CODE | |
| MEDIUM | _archived/widget.py | 441 | CODE | |
| MEDIUM | _archived/widget.py | 442 | CODE | |
| MEDIUM | _archived/widget.py | 443 | CODE | |
| MEDIUM | _archived/widget.py | 444 | CODE | |
| MEDIUM | _archived/widget.py | 445 | CODE | |
| MEDIUM | _archived/widget.py | 446 | CODE | |
| MEDIUM | _archived/widget.py | 447 | CODE | |
| MEDIUM | _archived/widget.py | 449 | CODE | |
| MEDIUM | _archived/widget.py | 450 | CODE | |
| MEDIUM | _archived/widget.py | 452 | CODE | |
| MEDIUM | _archived/widget.py | 453 | CODE | |
| MEDIUM | _archived/widget.py | 454 | CODE | |
| MEDIUM | _archived/widget.py | 456 | CODE | |
| MEDIUM | _archived/widget.py | 458 | CODE | |
| MEDIUM | _archived/widget.py | 459 | CODE | |
| MEDIUM | _archived/widget.py | 462 | CODE | |
| MEDIUM | _archived/widget.py | 463 | CODE | |
| MEDIUM | _archived/widget.py | 464 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_input.py | 8 | CODE | |
| LOW | uiautomator2/_selector.py | 1 | CODE | |
| LOW | uiautomator2/_selector.py | 7 | CODE | |
| LOW | uiautomator2/__init__.py | 4 | CODE | |
| LOW | uiautomator2/__init__.py | 4 | CODE | |
| LOW | uiautomator2/__init__.py | 25 | CODE | |
| LOW | uiautomator2/__init__.py | 25 | CODE | |
| LOW | uiautomator2/__init__.py | 27 | CODE | |
| LOW | uiautomator2/__init__.py | 27 | CODE | |
| LOW | uiautomator2/__init__.py | 30 | CODE | |
| LOW | uiautomator2/__init__.py | 31 | CODE | |
| LOW | uiautomator2/__init__.py | 33 | CODE | |
| LOW | uiautomator2/core.py | 23 | CODE | |
| LOW | uiautomator2/core.py | 27 | CODE | |
| LOW | uiautomator2/utils.py | 13 | CODE | |
| LOW | uiautomator2/utils.py | 13 | CODE | |
| LOW | uiautomator2/xpath.py | 4 | CODE | |
| LOW | uiautomator2/_input.py | 13 | CODE | |
| LOW | uiautomator2/_input.py | 20 | CODE | |
| LOW | uiautomator2/watcher.py | 12 | CODE | |
| LOW | uiautomator2/image.py | 23 | CODE | |
| LOW | uiautomator2/__main__.py | 4 | CODE | |
| LOW | uiautomator2/__main__.py | 4 | CODE | |
| LOW | uiautomator2/base.py | 1 | CODE | |
| LOW | uiautomator2/base.py | 1 | CODE | |
| LOW | uiautomator2/base.py | 7 | CODE | |
| LOW | uiautomator2/base.py | 11 | CODE | |
| LOW | uiautomator2/base.py | 11 | CODE | |
| LOW | uiautomator2/base.py | 14 | CODE | |
| LOW | uiautomator2/base.py | 16 | CODE | |
| LOW | uiautomator2/base.py | 16 | CODE | |
| LOW | uiautomator2/ext/info/__init__.py | 6 | CODE | |
| LOW | uiautomator2/ext/htmlreport/__init__.py | 4 | CODE | |
| LOW | uiautomator2/ext/htmlreport/__init__.py | 11 | CODE | |
| LOW | uiautomator2/ext/perf/__init__.py | 4 | CODE | |
| LOW | uiautomator2/ext/perf/__init__.py | 4 | CODE | |
| LOW | uiautomator2/agent_cli/options.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/options.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/server.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/protocol.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/client.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/click_ext.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/click_ext.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/commands.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/commands.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/__main__.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/__main__.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/output.py | 3 | CODE | |
| LOW | uiautomator2/agent_cli/output.py | 3 | CODE | |
| LOW | docs/conf.py | 17 | CODE | |
| LOW | _archived/widget.py | 18 | CODE | |
| LOW | _archived/widget.py | 18 | CODE | |
| LOW | examples/runyaml/run.py | 8 | CODE | |
| LOW | demo_tests/test_input.py | 4 | CODE | |
| LOW | mobile_tests/conftest.py | 3 | CODE | |
| LOW | mobile_tests/test_xpath.py | 7 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_agent_cli.py | 887 | def test_start_server_process_uses_agent_cli_module(): | CODE |
| LOW⚡ | tests/test_agent_cli.py | 896 | def test_client_request_treats_incomplete_read_as_server_not_running(): | CODE |
| LOW⚡ | tests/test_agent_cli.py | 904 | def test_server_status_outputs_text(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 46 | def test_device_registry_reuses_device(): | CODE |
| LOW | tests/test_agent_cli.py | 56 | def test_device_registry_rebinds_default_when_bound_device_goes_offline(): | CODE |
| LOW | tests/test_agent_cli.py | 76 | def test_screenshot_command_outputs_resolution(tmp_path, capsys): | CODE |
| LOW | tests/test_agent_cli.py | 98 | def test_server_screenshot_returns_resolution(): | CODE |
| LOW | tests/test_agent_cli.py | 114 | def test_dump_hierarchy_command_outputs_result(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 141 | def test_dump_hierarchy_command_outputs_saved_path(tmp_path, capsys): | CODE |
| LOW | tests/test_agent_cli.py | 155 | def test_hierarchy_to_text_simplifies_xml(): | CODE |
| LOW | tests/test_agent_cli.py | 193 | def test_server_stop_sends_response_before_shutdown(): | CODE |
| LOW | tests/test_agent_cli.py | 221 | def test_app_current_command_outputs_text(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 247 | def test_server_app_current_returns_device_serial(): | CODE |
| LOW | tests/test_agent_cli.py | 266 | def test_device_info_command_outputs_text(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 283 | def test_window_size_command_outputs_text(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 300 | def test_app_start_command_requests_server(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 322 | def test_app_list_command_outputs_packages(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 343 | def test_app_stop_command_supports_package_and_all(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 368 | def test_app_install_uninstall_clear_commands(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 404 | def test_shell_command_outputs_response(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 426 | def test_system_ui_commands_request_server(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 454 | def test_press_command_parses_key_and_keycode(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 477 | def test_send_keys_command_defaults_to_clear_and_supports_no_clear(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 502 | def test_clear_text_command_requests_server(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 521 | def test_server_app_and_device_methods_return_device_serial(): | CODE |
| LOW | tests/test_agent_cli.py | 590 | def test_coordinate_gesture_commands_request_server(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 648 | def test_direction_swipe_command_requests_server(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 677 | def test_selector_commands_request_server(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 739 | def test_child_selector_command_supports_mixed_parent_and_child_conditions(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 772 | def test_repeated_child_selector_builds_chain(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 807 | def test_child_selector_requires_parent_selector(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 815 | def test_server_gesture_and_selector_methods_return_device_serial(): | CODE |
| LOW | tests/test_agent_cli.py | 869 | def test_ensure_server_restarts_incompatible_server(): | CODE |
| LOW | tests/test_agent_cli.py | 921 | def test_missing_command_shows_help(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 931 | def test_unexpected_cli_error_does_not_print_traceback(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 942 | def test_help_has_no_json_option(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 957 | def test_subcommand_help_shows_options(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 968 | def test_selector_subcommand_help_shows_options(capsys): | CODE |
| LOW | tests/test_agent_cli.py | 170 | def test_server_dump_hierarchy_returns_compact_text(): | STRING |
| LOW | tests/test_utils.py | 57 | def test_is_version_compatiable(): | CODE |
| LOW | tests/test_utils.py | 94 | def test_with_package_resource(): | CODE |
| LOW | tests/test_input.py | 53 | def test_send_keys_hides_keyboard_when_using_custom_ime(): | CODE |
| LOW | tests/test_input.py | 76 | def test_send_keys_fallback_does_not_hide_keyboard(): | CODE |
| LOW | tests/test_input.py | 102 | def test_hide_keyboard_method(): | CODE |
| LOW | tests/test_xpath.py | 51 | def test_convert_to_camel_case(): | STRING |
| LOW | tests/test_xpath.py | 112 | def test_xpath_wait_and_wait_gone(): | STRING |
| LOW | tests/test_xpath.py | 165 | def test_strict_xpath_endswith_matches_content_desc(): | STRING |
| LOW | tests/test_logger.py | 14 | def test_enable_pretty_logging(caplog: pytest.LogCaptureFixture): | CODE |
| LOW | uiautomator2/__init__.py | 727 | def app_auto_grant_permissions(self, package_name: str): | CODE |
| LOW | uiautomator2/agent_cli/options.py | 187 | def _normalize_swipe_direction(value: str) -> Optional[str]: | CODE |
| LOW | uiautomator2/agent_cli/server.py | 178 | class U2CliRequestHandler(BaseHTTPRequestHandler): | CODE |
| LOW | _archived/widget.py | 226 | def replace_etree_node_to_class(self, root: etree.ElementTree): | CODE |
| LOW | _archived/init.py | 320 | def _install_uiautomator_apks(self): | CODE |
| LOW | demo_tests/test_device.py | 63 | def test_swipe_ext_inside_box(app: u2.Device): | CODE |
| LOW | demo_tests/test_app.py | 42 | def test_auto_grant_permissions(d: u2.Device): | CODE |
| LOW | mobile_tests/test_session.py | 10 | def test_session_function_exists(dev: u2.Device): | CODE |
| LOW | mobile_tests/test_session.py | 60 | def test_auto_grant_permissions(dev: u2.Device): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | uiautomator2/core.py | 264 | self._dev.sync.push(jar_path, target_path, check=True) | CODE |
| HIGH | uiautomator2/base.py | 186 | self._dev.sync.push(src, dst, mode=mode) | CODE |
| HIGH | _archived/webview.py | 85 | var obj = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null); | CODE |
| HIGH | _archived/webview.py | 93 | var obj = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null); | CODE |
| HIGH | _archived/webview.py | 114 | var obj = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null); | CODE |
| HIGH | _archived/init.py | 237 | self._device.sync.push(path, dest, mode=mode) | CODE |
| HIGH | _archived/init.py | 343 | self._device.sync.push(local_atx_agent_path, dest, mode=0o755) | CODE |
| HIGH | demo_tests/test_device.py | 129 | d.push(src_file, "/data/local/tmp/test_push.txt") | CODE |
| HIGH | mobile_tests/test_push_pull.py | 14 | d.push(io.BytesIO(content), device_target) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | uiautomator2/__init__.py | 72 | Take screenshot of device Returns: PIL.Image.Image, np.ndarray (OpenCV format) or None | STRING |
| HIGH | uiautomator2/__init__.py | 949 | Args: serial (str): Android device serialno or adb device instance port (int): uiautomator2 server | STRING |
| HIGH | uiautomator2/__init__.py | 970 | Args: serial (str): android device serial or adb device instance port (int): uiautomator2 server po | STRING |
| HIGH | uiautomator2/xpath.py | 439 | Get first matched element Args: timeout (float): max seconds to wait Returns: | STRING |
| HIGH | uiautomator2/image.py | 193 | Args: data: local path or http url or data:image/base64,xxx Returns: opencv image | STRING |
| HIGH | uiautomator2/base.py | 96 | Run shell command on device Args: cmdargs: str or list, example: "ls -l" or ["ls", "-l"] | STRING |
| HIGH | _archived/aircv/__init__.py | 56 | Locate image position with cv2.templateFind Use pixel match to find pictures. Args: | STRING |
| HIGH | _archived/ocr/__init__.py | 73 | Args: timeout: seconds to wait Returns: List of recognition (text, x, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 1001 | Refs: [Google uiautomator Configurator](https://developer.android.com/reference/android/support/test/uiautomator/Configu | COMMENT |
| LOW | README_CN.md | 1001 | COMMENT | |
| LOW | uiautomator2/version.py | 1 | # coding: utf-8 | COMMENT |
| LOW | uiautomator2/version.py | 21 | # 2.0.2 fix error: AndroidQ Service must be explicit | COMMENT |
| LOW | uiautomator2/version.py | 41 | # __jar_version__ = 'v0.1.6' # no useless for now. | COMMENT |
| LOW | uiautomator2/version.py | 61 | # 0.7.2 fix stop already stopped uiautomator return status 500 error | COMMENT |
| LOW | uiautomator2/version.py | 81 | # 0.4.0 add go-daemon lib. use safe-time.Timer to prevent panic error. this will make it run longer | COMMENT |
| LOW | uiautomator2/settings.py | 101 | # if __name__ == "__main__": | COMMENT |
| LOW | uiautomator2/exceptions.py | 1 | # coding: utf-8 | COMMENT |
| LOW | uiautomator2/image.py | 321 | COMMENT | |
| LOW | uiautomator2/image.py | 341 | # 'engine_template_multi_target_max_threshold': 0.99, | COMMENT |
| LOW | docs/conf.py | 1 | # Configuration file for the Sphinx documentation builder. | COMMENT |
| LOW | _archived/widget.py | 281 | # bounds = node.attrib.get("bounds") | COMMENT |
| LOW | _archived/widget.py | 381 | # print("hierarchy:", hsim) | COMMENT |
| LOW | _archived/webview.py | 221 | # test_self_driver() | COMMENT |
| LOW | demo_tests/test_watcher.py | 1 | # coding: utf-8 | COMMENT |
| LOW | mobile_tests/conftest.py | 41 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | uiautomator2/__init__.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/core.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/settings.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/xpath.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/_input.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/watcher.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/image.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/__main__.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/base.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | uiautomator2/agent_cli/options.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | uiautomator2/agent_cli/server.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | uiautomator2/agent_cli/commands.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | _archived/widget.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | _archived/webview.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | _archived/init.py | 25 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_core.py | 30 | # Create a temporary file with known content | COMMENT |
| MEDIUM | tests/test_core.py | 51 | # Create a temporary file with known content | COMMENT |
| MEDIUM | tests/test_core.py | 78 | # Create a temporary file with known content | COMMENT |
| MEDIUM | tests/test_core.py | 96 | # Create a temporary file with known content | COMMENT |
| MEDIUM | _archived/widget.py | 5 | # This file is deprecated and will be removed in the future. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | uiautomator2/core.py | 49 | except: | CODE |
| HIGH | uiautomator2/ext/perf/__init__.py | 194 | except ValueError: | CODE |
| HIGH | uiautomator2/agent_cli/client.py | 126 | except U2CliError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | uiautomator2/swipe.py | 16 | CODE | |
| LOW | uiautomator2/_selector.py | 240 | CODE | |
| LOW | uiautomator2/_selector.py | 494 | CODE | |
| LOW | uiautomator2/_selector.py | 537 | CODE | |
| LOW | uiautomator2/_selector.py | 522 | CODE | |
| LOW | uiautomator2/_selector.py | 565 | CODE | |
| LOW | uiautomator2/utils.py | 190 | CODE | |
| LOW | uiautomator2/xpath.py | 78 | CODE | |
| LOW | uiautomator2/xpath.py | 251 | CODE | |
| LOW | uiautomator2/image.py | 192 | CODE | |
| LOW | uiautomator2/ext/info/__init__.py | 51 | CODE | |
| LOW | uiautomator2/agent_cli/output.py | 18 | CODE | |
| LOW | _archived/aircv/__init__.py | 447 | CODE | |
| LOW | examples/runyaml/run.py | 53 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | uiautomator2/watcher.py | 229 | except Exception as e: | CODE |
| LOW | uiautomator2/watcher.py | 266 | except Exception as e: | CODE |
| LOW | uiautomator2/__main__.py | 130 | except Exception as e: | CODE |
| LOW | uiautomator2/agent_cli/options.py | 244 | except Exception as e: | CODE |
| MEDIUM | uiautomator2/agent_cli/options.py | 39 | def convert(self, value, param, ctx): | CODE |
| LOW | uiautomator2/agent_cli/server.py | 232 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | uiautomator2/version.py | 65 | # 0.6.1 make dump_hierarchy more robust, add cpu,mem collect | COMMENT |