Welcome to mirror list, hosted at ThFree Co, Russian Federation.

mach_commands.py - github.com/mozilla/geckodriver.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e557caeab247a8a549b7ddb1f2d058182e35e354 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from __future__ import absolute_import, print_function, unicode_literals

import os
import logging

from mach.decorators import (
    Command,
    CommandArgument,
    CommandArgumentGroup,
    CommandProvider,
)

from mozbuild.base import MachCommandBase, BinaryNotFoundException


@CommandProvider
class GeckoDriver(MachCommandBase):
    @Command(
        "geckodriver",
        category="post-build",
        description="Run the WebDriver implementation for Gecko.",
    )
    @CommandArgument(
        "--binary", type=str, help="Firefox binary (defaults to the local build)."
    )
    @CommandArgument(
        "params", nargs="...", help="Flags to be passed through to geckodriver."
    )
    @CommandArgumentGroup("debugging")
    @CommandArgument(
        "--debug",
        action="store_true",
        group="debugging",
        help="Enable the debugger. Not specifying a --debugger "
        "option will result in the default debugger "
        "being used.",
    )
    @CommandArgument(
        "--debugger",
        default=None,
        type=str,
        group="debugging",
        help="Name of debugger to use.",
    )
    @CommandArgument(
        "--debugger-args",
        default=None,
        metavar="params",
        type=str,
        group="debugging",
        help="Flags to pass to the debugger itself; "
        "split as the Bourne shell would.",
    )
    def run(self, command_context, binary, params, debug, debugger, debugger_args):
        try:
            binpath = command_context.get_binary_path("geckodriver")
        except BinaryNotFoundException as e:
            command_context.log(
                logging.ERROR, "geckodriver", {"error": str(e)}, "ERROR: {error}"
            )
            command_context.log(
                logging.INFO,
                "geckodriver",
                {},
                "It looks like geckodriver isn't built. "
                "Add ac_add_options --enable-geckodriver to your "
                "mozconfig "
                "and run |./mach build| to build it.",
            )
            return 1

        args = [binpath]

        if params:
            args.extend(params)

        if binary is None:
            try:
                binary = command_context.get_binary_path("app")
            except BinaryNotFoundException as e:
                command_context.log(
                    logging.ERROR, "geckodriver", {"error": str(e)}, "ERROR: {error}"
                )
                command_context.log(
                    logging.INFO, "geckodriver", {"help": e.help()}, "{help}"
                )
                return 1

        args.extend(["--binary", binary])

        if debug or debugger or debugger_args:
            if "INSIDE_EMACS" in os.environ:
                command_context.log_manager.terminal_handler.setLevel(logging.WARNING)

            import mozdebug

            if not debugger:
                # No debugger name was provided. Look for the default ones on
                # current OS.
                debugger = mozdebug.get_default_debugger_name(
                    mozdebug.DebuggerSearch.KeepLooking
                )

            if debugger:
                debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args)
                if not debuggerInfo:
                    print("Could not find a suitable debugger in your PATH.")
                    return 1

            # Parameters come from the CLI. We need to convert them before
            # their use.
            if debugger_args:
                from mozbuild import shellutil

                try:
                    debugger_args = shellutil.split(debugger_args)
                except shellutil.MetaCharacterException as e:
                    print(
                        "The --debugger-args you passed require a real shell to parse them."
                    )
                    print("(We can't handle the %r character.)" % e.char)
                    return 1

            # Prepend the debugger args.
            args = [debuggerInfo.path] + debuggerInfo.args + args

        return command_context.run_process(
            args=args, ensure_exit_code=False, pass_thru=True
        )