@wdio/appium-service 9.21.0 → 9.23.0
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.
- package/README.md +76 -0
- package/bin/start-appium-inspector.js +7 -0
- package/build/cli-utils.d.ts +8 -0
- package/build/cli-utils.d.ts.map +1 -0
- package/build/cli.d.ts +2 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +229 -0
- package/build/index.js +2 -1
- package/build/launcher.d.ts.map +1 -1
- package/build/types.d.ts +5 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +13 -5
package/README.md
CHANGED
|
@@ -111,6 +111,82 @@ export const config = {
|
|
|
111
111
|
```
|
|
112
112
|
**Note:** The utilization of aliases is discouraged and unsupported. Instead, please use the full property name in lower camel case.
|
|
113
113
|
|
|
114
|
+
## CLI Command
|
|
115
|
+
|
|
116
|
+
This package includes a CLI command to quickly start the Appium server and open the Appium Inspector in your browser. This makes it easier to work with Appium when using WebdriverIO.
|
|
117
|
+
|
|
118
|
+
### Usage
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
npx start-appium-inspector [options]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The command will:
|
|
125
|
+
- Check if the Appium Inspector plugin is installed (required for the Inspector to work)
|
|
126
|
+
- Automatically start the Appium server with the Inspector plugin enabled
|
|
127
|
+
- Open the Appium Inspector at `http://localhost:{port}/inspector` in your default browser
|
|
128
|
+
- Handle cleanup when you press `Ctrl+C`
|
|
129
|
+
|
|
130
|
+
### Prerequisites
|
|
131
|
+
|
|
132
|
+
Make sure you have Appium installed with the drivers you need:
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
# Install Appium globally
|
|
136
|
+
npm install -g appium
|
|
137
|
+
|
|
138
|
+
# Install drivers (examples)
|
|
139
|
+
appium driver install uiautomator2 # For Android
|
|
140
|
+
appium driver install xcuitest # For iOS
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Or install Appium locally in your project:
|
|
144
|
+
|
|
145
|
+
```sh
|
|
146
|
+
npm install --save-dev appium
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Important:** The Appium Inspector plugin must be installed for this CLI command to work. The command will automatically check if the plugin is installed before starting the server. If it's not installed, you'll see an error with instructions.
|
|
150
|
+
|
|
151
|
+
Install the Appium Inspector plugin:
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
# Add it as a local dependency
|
|
155
|
+
npm install --D appium-inspector-plugin
|
|
156
|
+
|
|
157
|
+
# Add it globally, depending on how you installed it before
|
|
158
|
+
appium plugin install inspector
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
For more information about installing and using the Appium Inspector plugin, see the [Appium Inspector documentation](https://appium.github.io/appium-inspector/latest/quickstart/installation/#appium-plugin).
|
|
162
|
+
|
|
163
|
+
### Examples
|
|
164
|
+
|
|
165
|
+
Start with default port (4723):
|
|
166
|
+
```sh
|
|
167
|
+
npx start-appium-inspector
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Start with a custom port:
|
|
171
|
+
```sh
|
|
172
|
+
npx start-appium-inspector --port=8080
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Pass additional Appium server arguments:
|
|
176
|
+
```sh
|
|
177
|
+
npx start-appium-inspector --port=4723 --base-path=/wd/hub --relaxed-security
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The command accepts all standard Appium server arguments. For a complete list of available arguments, see the [Appium documentation](https://appium.io/docs/en/latest/cli/args/).
|
|
181
|
+
|
|
182
|
+
### Appium Inspector
|
|
183
|
+
|
|
184
|
+
The CLI automatically opens the Appium Inspector web application at `http://localhost:{port}/inspector`, which provides a GUI interface for inspecting and interacting with your mobile apps. The Inspector is served directly from the Appium server when the Inspector plugin is enabled. For more information about the Appium Inspector, visit the [Appium Inspector GitHub repository](https://github.com/appium/appium-inspector).
|
|
185
|
+
|
|
186
|
+
**Note:**
|
|
187
|
+
- The Appium Inspector requires CORS to be enabled on the Appium server. The CLI automatically adds the `--allow-cors` flag to ensure compatibility.
|
|
188
|
+
- The CLI uses the `--use-plugins=inspector` flag to enable the Appium Inspector plugin. Before running the command, make sure you have installed the Appium Inspector plugin (see Prerequisites above).
|
|
189
|
+
|
|
114
190
|
----
|
|
115
191
|
|
|
116
192
|
For more information on WebdriverIO see the [homepage](https://webdriver.io).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ChildProcessByStdio } from 'node:child_process';
|
|
2
|
+
import { type Readable } from 'node:stream';
|
|
3
|
+
export declare function extractPortFromCliArgs(args: string[]): number;
|
|
4
|
+
export declare function determineAppiumCliCommand(command?: string): Promise<string>;
|
|
5
|
+
export declare function checkInspectorPluginInstalled(appiumCommandPath: string): Promise<void>;
|
|
6
|
+
export declare function startAppiumForCli(appiumCommandPath: string, args: string[], timeout?: number): Promise<ChildProcessByStdio<null, Readable, Readable>>;
|
|
7
|
+
export declare function openBrowser(url: string): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=cli-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../src/cli-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAoC3C,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7D;AAYD,wBAAsB,yBAAyB,CAAC,OAAO,SAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BnF;AAED,wBAAsB,6BAA6B,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5F;AAED,wBAAsB,iBAAiB,CACnC,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,SAAuB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CA6GxD;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5D"}
|
package/build/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,wBAAsB,GAAG,kBAqDxB"}
|
package/build/cli.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
// src/cli-utils.ts
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import url from "node:url";
|
|
4
|
+
import { resolve as resolveModule } from "import-meta-resolve";
|
|
5
|
+
import { execSync, spawn, exec } from "node:child_process";
|
|
6
|
+
import os from "node:os";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
var APPIUM_START_TIMEOUT = 30 * 1e3;
|
|
9
|
+
function extractPortFromArgs(args) {
|
|
10
|
+
const portArgIndex = args.findIndex((arg) => arg.startsWith("--port"));
|
|
11
|
+
if (portArgIndex === -1) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const portArg = args[portArgIndex];
|
|
15
|
+
let portValue;
|
|
16
|
+
if (portArg.includes("=")) {
|
|
17
|
+
portValue = portArg.split("=")[1];
|
|
18
|
+
} else {
|
|
19
|
+
const nextArg = args[portArgIndex + 1];
|
|
20
|
+
if (!nextArg || nextArg.startsWith("--")) {
|
|
21
|
+
throw new Error("Missing port value after --port flag.");
|
|
22
|
+
}
|
|
23
|
+
portValue = nextArg;
|
|
24
|
+
}
|
|
25
|
+
const port = Number(portValue);
|
|
26
|
+
if (Number.isInteger(port) && port >= 1 && port <= 65535) {
|
|
27
|
+
return port;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function extractPortFromCliArgs(args) {
|
|
32
|
+
return extractPortFromArgs(args) ?? 4723;
|
|
33
|
+
}
|
|
34
|
+
async function tryResolveModule(command, from) {
|
|
35
|
+
try {
|
|
36
|
+
const entryPath = await resolveModule(command, from);
|
|
37
|
+
return url.fileURLToPath(entryPath);
|
|
38
|
+
} catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function determineAppiumCliCommand(command = "appium") {
|
|
43
|
+
const localNodeModules = resolve(process.cwd(), "node_modules");
|
|
44
|
+
const localPath = await tryResolveModule(command, url.pathToFileURL(localNodeModules).toString());
|
|
45
|
+
if (localPath) {
|
|
46
|
+
return localPath;
|
|
47
|
+
}
|
|
48
|
+
const packagePath = await tryResolveModule(command, import.meta.url);
|
|
49
|
+
if (packagePath) {
|
|
50
|
+
return packagePath;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const npmPrefix = execSync("npm config get prefix", { encoding: "utf-8" }).trim();
|
|
54
|
+
const globalNodeModules = resolve(npmPrefix, "lib", "node_modules");
|
|
55
|
+
const globalPath = await tryResolveModule(command, url.pathToFileURL(globalNodeModules).toString());
|
|
56
|
+
if (globalPath) {
|
|
57
|
+
return globalPath;
|
|
58
|
+
}
|
|
59
|
+
} catch {
|
|
60
|
+
}
|
|
61
|
+
throw new Error(
|
|
62
|
+
"Appium is not installed. Please install it globally via `npm install -g appium`\nor locally in your project via `npm i --save-dev appium`. Do not forget to also\ninstall the drivers for your platform."
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
async function checkInspectorPluginInstalled(appiumCommandPath) {
|
|
66
|
+
const INSPECTOR_PLUGIN_DOCS_URL = "https://appium.github.io/appium-inspector/latest/quickstart/installation/#appium-plugin";
|
|
67
|
+
const helpMessage = `Please check this link for more information: ${INSPECTOR_PLUGIN_DOCS_URL}`;
|
|
68
|
+
try {
|
|
69
|
+
const { stdout, stderr } = await promisify(exec)(`${appiumCommandPath} plugin list --installed`, {
|
|
70
|
+
encoding: "utf-8"
|
|
71
|
+
});
|
|
72
|
+
const output = stderr || stdout;
|
|
73
|
+
if (!output || output.trim().length === 0) {
|
|
74
|
+
throw new Error(
|
|
75
|
+
`Appium Inspector plugin is not installed. ${helpMessage}`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
const lines = output.split("\n");
|
|
79
|
+
const inspectorLine = lines.find((line) => /^-.*inspector/i.test(line.trim()));
|
|
80
|
+
if (!inspectorLine) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Appium Inspector plugin is not installed. ${helpMessage}`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
} catch (err) {
|
|
86
|
+
if (err instanceof Error && !err.message.includes("Inspector plugin")) {
|
|
87
|
+
throw new Error(
|
|
88
|
+
`Failed to check Appium Inspector plugin installation: ${err.message}. ${helpMessage}`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async function startAppiumForCli(appiumCommandPath, args, timeout = APPIUM_START_TIMEOUT) {
|
|
95
|
+
let command = "node";
|
|
96
|
+
const appiumArgs = [appiumCommandPath, ...args];
|
|
97
|
+
if (os.platform() === "win32") {
|
|
98
|
+
appiumArgs.unshift("/c", command);
|
|
99
|
+
command = "cmd";
|
|
100
|
+
}
|
|
101
|
+
const appiumProcess = spawn(command, appiumArgs, {
|
|
102
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
103
|
+
});
|
|
104
|
+
let errorCaptured = false;
|
|
105
|
+
let timeoutId;
|
|
106
|
+
let error;
|
|
107
|
+
return new Promise((resolvePromise, reject) => {
|
|
108
|
+
let outputBuffer = "";
|
|
109
|
+
timeoutId = setTimeout(() => {
|
|
110
|
+
rejectOnce(new Error("Timeout: Appium did not start within expected time"));
|
|
111
|
+
}, timeout);
|
|
112
|
+
const rejectOnce = (err) => {
|
|
113
|
+
if (!errorCaptured) {
|
|
114
|
+
errorCaptured = true;
|
|
115
|
+
clearTimeout(timeoutId);
|
|
116
|
+
reject(err);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const onErrorMessage = (data) => {
|
|
120
|
+
const message = data.toString();
|
|
121
|
+
const isDebuggerMessage = message.includes("Debugger attached") || message.includes("Debugger listening on") || message.includes("For help, see: https://nodejs.org/en/docs/inspector");
|
|
122
|
+
if (isDebuggerMessage) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (!errorCaptured) {
|
|
126
|
+
error = message || "Appium exited without error message";
|
|
127
|
+
const isWarning = message.trim().startsWith("WARN");
|
|
128
|
+
if (!isWarning) {
|
|
129
|
+
rejectOnce(new Error(error));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
process.stderr.write(message);
|
|
134
|
+
};
|
|
135
|
+
const onStdout = (data) => {
|
|
136
|
+
outputBuffer += data.toString();
|
|
137
|
+
process.stdout.write(data.toString());
|
|
138
|
+
if (outputBuffer.includes("Appium REST http interface listener started")) {
|
|
139
|
+
outputBuffer = "";
|
|
140
|
+
clearTimeout(timeoutId);
|
|
141
|
+
resolvePromise(appiumProcess);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
appiumProcess.stdout.on("data", onStdout);
|
|
145
|
+
appiumProcess.stderr.on("data", onErrorMessage);
|
|
146
|
+
appiumProcess.once("exit", (exitCode) => {
|
|
147
|
+
let errorMessage = `Appium exited before timeout (exit code: ${exitCode})`;
|
|
148
|
+
if (exitCode === 2) {
|
|
149
|
+
errorMessage += "\n" + (error?.toString() || "Check that you don't already have a running Appium service.");
|
|
150
|
+
} else if (errorCaptured) {
|
|
151
|
+
errorMessage += `
|
|
152
|
+
${error?.toString()}`;
|
|
153
|
+
}
|
|
154
|
+
if (exitCode !== 0) {
|
|
155
|
+
console.error(errorMessage);
|
|
156
|
+
}
|
|
157
|
+
rejectOnce(new Error(errorMessage));
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
async function openBrowser(url2) {
|
|
162
|
+
console.log("\u{1F310} Opening Appium Inspector in your default browser...");
|
|
163
|
+
let command;
|
|
164
|
+
const platform = os.platform();
|
|
165
|
+
if (platform === "win32") {
|
|
166
|
+
command = `start "" "${url2}"`;
|
|
167
|
+
} else if (platform === "darwin") {
|
|
168
|
+
command = `open "${url2}"`;
|
|
169
|
+
} else {
|
|
170
|
+
command = `xdg-open "${url2}"`;
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
execSync(command, { stdio: "ignore" });
|
|
174
|
+
console.log("\u2705 Opened Appium Inspector in your default browser.");
|
|
175
|
+
} catch {
|
|
176
|
+
console.warn(`\u26A0\uFE0F Automatically starting the default browser didn't work, please open your favorite browser and paste the url '${url2}' in there`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// src/cli.ts
|
|
181
|
+
import treeKill from "tree-kill";
|
|
182
|
+
import { promisify as promisify2 } from "node:util";
|
|
183
|
+
var promisifiedTreeKill = promisify2(treeKill);
|
|
184
|
+
async function run() {
|
|
185
|
+
const args = process.argv.slice(2);
|
|
186
|
+
const port = extractPortFromCliArgs(args);
|
|
187
|
+
const requiredFlags = ["--log-timestamp", "--use-plugins=inspector", "--allow-cors"];
|
|
188
|
+
args.push(`--port=${port}`);
|
|
189
|
+
requiredFlags.forEach((flag) => {
|
|
190
|
+
if (!args.includes(flag)) {
|
|
191
|
+
args.push(flag);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
const command = await determineAppiumCliCommand();
|
|
195
|
+
const serverArgs = ["server", ...args];
|
|
196
|
+
console.log("\u23F3 Checking inspector plugin...");
|
|
197
|
+
await checkInspectorPluginInstalled(command);
|
|
198
|
+
console.log("\u{1F680} Starting Appium server...");
|
|
199
|
+
console.log(`\u{1F4E1} Command: ${command} ${serverArgs.join(" ")}`);
|
|
200
|
+
console.log("\u23F3 Waiting for Appium server to be ready...");
|
|
201
|
+
console.log("\u2139\uFE0F Press Ctrl+C to stop Appium server and exit\n\n");
|
|
202
|
+
const appiumProcess = await startAppiumForCli(command, serverArgs);
|
|
203
|
+
await openBrowser(`http://localhost:${port}/inspector`);
|
|
204
|
+
let isCleaningUp = false;
|
|
205
|
+
const cleanup = async () => {
|
|
206
|
+
if (isCleaningUp) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
isCleaningUp = true;
|
|
210
|
+
if (appiumProcess && appiumProcess.pid) {
|
|
211
|
+
console.log("\n\u{1F6D1} Stopping Appium server...");
|
|
212
|
+
try {
|
|
213
|
+
await promisifiedTreeKill(appiumProcess.pid, "SIGTERM");
|
|
214
|
+
console.log("\u2705 Appium server stopped successfully");
|
|
215
|
+
} catch (err) {
|
|
216
|
+
console.error("Error stopping Appium:", err);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
process.removeListener("SIGINT", cleanup);
|
|
220
|
+
process.removeListener("SIGTERM", cleanup);
|
|
221
|
+
process.exit(0);
|
|
222
|
+
};
|
|
223
|
+
process.on("SIGINT", cleanup);
|
|
224
|
+
process.on("SIGTERM", cleanup);
|
|
225
|
+
process.stdin.resume();
|
|
226
|
+
}
|
|
227
|
+
export {
|
|
228
|
+
run
|
|
229
|
+
};
|
package/build/index.js
CHANGED
|
@@ -148,7 +148,8 @@ var AppiumLauncher = class _AppiumLauncher {
|
|
|
148
148
|
}
|
|
149
149
|
this._appiumCliArgs.push(...formatCliArgs({ ...this._args }));
|
|
150
150
|
const command = await this._getCommand(this._options.command);
|
|
151
|
-
|
|
151
|
+
const timeout = this._options.appiumStartTimeout ?? APPIUM_START_TIMEOUT;
|
|
152
|
+
this._process = await this._startAppium(command, this._appiumCliArgs, timeout);
|
|
152
153
|
if (this._logPath) {
|
|
153
154
|
this._redirectLogStream(this._logPath);
|
|
154
155
|
} else {
|
package/build/launcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAa5E,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,QAAQ,CAAC,eAAe;;IAQ/D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO,CAAC;IATpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAA+C;IAChE,OAAO,CAAC,eAAe,CAAiB;gBAG5B,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,YAAY,CAAC,sBAAsB,EAClD,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,YAAA;YAS1B,WAAW;IAqBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyDlB,SAAS;
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAa5E,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,QAAQ,CAAC,eAAe;;IAQ/D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO,CAAC;IATpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAA+C;IAChE,OAAO,CAAC,eAAe,CAAiB;gBAG5B,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,YAAY,CAAC,sBAAsB,EAClD,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,YAAA;YAS1B,WAAW;IAqBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyDlB,SAAS;IAuDf,OAAO,CAAC,mBAAmB,CAAsC;IAC3D,UAAU;IAmChB,OAAO,CAAC,YAAY;YA2GN,kBAAkB;mBAeX,iBAAiB;CAezC"}
|
package/build/types.d.ts
CHANGED
|
@@ -137,6 +137,11 @@ export interface AppiumServiceConfig {
|
|
|
137
137
|
* @default {}
|
|
138
138
|
*/
|
|
139
139
|
args?: AppiumServerArguments;
|
|
140
|
+
/**
|
|
141
|
+
* Timeout in milliseconds for Appium to start successfully.
|
|
142
|
+
* @default 30000
|
|
143
|
+
*/
|
|
144
|
+
appiumStartTimeout?: number;
|
|
140
145
|
}
|
|
141
146
|
export type ArgValue = string | number | boolean | null | object;
|
|
142
147
|
export type KeyValueArgs = {
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,qBAAqB,CAAA;IAE5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAA;AAChE,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/appium-service",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.23.0",
|
|
4
4
|
"description": "A WebdriverIO service to start & stop Appium Server",
|
|
5
5
|
"author": "Morten Bjerg Gregersen <morten@mogee.dk>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-appium-service",
|
|
@@ -25,28 +25,36 @@
|
|
|
25
25
|
"bugs": {
|
|
26
26
|
"url": "https://github.com/webdriverio/webdriverio/issues"
|
|
27
27
|
},
|
|
28
|
+
"bin": {
|
|
29
|
+
"start-appium-inspector": "./bin/start-appium-inspector.js"
|
|
30
|
+
},
|
|
28
31
|
"type": "module",
|
|
29
32
|
"types": "./build/index.d.ts",
|
|
30
33
|
"exports": {
|
|
31
34
|
".": {
|
|
32
35
|
"import": "./build/index.js",
|
|
33
36
|
"types": "./build/index.d.ts"
|
|
37
|
+
},
|
|
38
|
+
"./cli": {
|
|
39
|
+
"import": "./build/cli.js",
|
|
40
|
+
"importSource": "./src/cli.ts",
|
|
41
|
+
"types": "./build/cli.d.ts"
|
|
34
42
|
}
|
|
35
43
|
},
|
|
36
44
|
"typeScriptVersion": "3.8.3",
|
|
37
45
|
"dependencies": {
|
|
38
|
-
"@wdio/config": "9.
|
|
46
|
+
"@wdio/config": "9.23.0",
|
|
39
47
|
"@wdio/logger": "9.18.0",
|
|
40
48
|
"@wdio/types": "9.20.0",
|
|
41
|
-
"@wdio/utils": "9.
|
|
49
|
+
"@wdio/utils": "9.23.0",
|
|
42
50
|
"change-case": "^5.4.3",
|
|
43
51
|
"get-port": "^7.0.0",
|
|
44
52
|
"import-meta-resolve": "^4.0.0",
|
|
45
53
|
"tree-kill": "^1.2.2",
|
|
46
|
-
"webdriverio": "9.
|
|
54
|
+
"webdriverio": "9.23.0"
|
|
47
55
|
},
|
|
48
56
|
"publishConfig": {
|
|
49
57
|
"access": "public"
|
|
50
58
|
},
|
|
51
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "5b35e4e2b94e3ac5247ec2bf27f2f5e41ef00372"
|
|
52
60
|
}
|