@midscene/cli 0.14.3 → 0.14.4-beta-20250415065130.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/dist/es/index.js +76 -49
- package/dist/es/index.js.map +1 -1
- package/dist/lib/index.js +76 -49
- package/dist/lib/index.js.map +1 -1
- package/package.json +4 -3
package/dist/es/index.js
CHANGED
|
@@ -13955,7 +13955,7 @@ Usage: $0 [options] <path-to-yaml-script-file-or-directory>`
|
|
|
13955
13955
|
default: false,
|
|
13956
13956
|
description: "Keep the browser window open after the script finishes. This is useful when debugging, but will consume more resources"
|
|
13957
13957
|
}
|
|
13958
|
-
}).version("version", "Show version number", "0.14.
|
|
13958
|
+
}).version("version", "Show version number", "0.14.4-beta-20250415065130.0").help().wrap(yargs_default().terminalWidth());
|
|
13959
13959
|
const argv = await args.argv;
|
|
13960
13960
|
return {
|
|
13961
13961
|
path: argv._[0],
|
|
@@ -14600,6 +14600,7 @@ function getRenderedRowCount(contents, stream2) {
|
|
|
14600
14600
|
|
|
14601
14601
|
// src/yaml-runner.ts
|
|
14602
14602
|
import assert from "assert";
|
|
14603
|
+
import { agentFromAdbDevice } from "@midscene/android";
|
|
14603
14604
|
import { AgentOverChromeBridge } from "@midscene/web/bridge-mode";
|
|
14604
14605
|
import { puppeteerAgentForTarget } from "@midscene/web/puppeteer";
|
|
14605
14606
|
var launchServer = async (dir) => {
|
|
@@ -14626,60 +14627,86 @@ async function playYamlFiles(files, options) {
|
|
|
14626
14627
|
};
|
|
14627
14628
|
const player = new ScriptPlayer(script, async (target) => {
|
|
14628
14629
|
const freeFn = [];
|
|
14629
|
-
|
|
14630
|
-
|
|
14631
|
-
|
|
14632
|
-
|
|
14633
|
-
|
|
14634
|
-
|
|
14635
|
-
|
|
14636
|
-
|
|
14637
|
-
|
|
14630
|
+
const webTarget = script.web || script.target;
|
|
14631
|
+
if (webTarget) {
|
|
14632
|
+
if (script.target) {
|
|
14633
|
+
console.warn(
|
|
14634
|
+
"target is deprecated, please use web instead. See https://midscenejs.com/automate-with-scripts-in-yaml for more information. Sorry for the inconvenience."
|
|
14635
|
+
);
|
|
14636
|
+
}
|
|
14637
|
+
let localServer;
|
|
14638
|
+
let urlToVisit;
|
|
14639
|
+
if (webTarget.serve) {
|
|
14640
|
+
assert(
|
|
14641
|
+
typeof webTarget.url === "string",
|
|
14642
|
+
"url is required in serve mode"
|
|
14643
|
+
);
|
|
14644
|
+
localServer = await launchServer(webTarget.serve);
|
|
14645
|
+
const serverAddress = localServer.server.address();
|
|
14646
|
+
freeFn.push({
|
|
14647
|
+
name: "local_server",
|
|
14648
|
+
fn: () => localServer?.server.close()
|
|
14649
|
+
});
|
|
14650
|
+
if (webTarget.url.startsWith("/")) {
|
|
14651
|
+
urlToVisit = `http://${serverAddress?.address}:${serverAddress?.port}${webTarget.url}`;
|
|
14652
|
+
} else {
|
|
14653
|
+
urlToVisit = `http://${serverAddress?.address}:${serverAddress?.port}/${webTarget.url}`;
|
|
14654
|
+
}
|
|
14655
|
+
webTarget.url = urlToVisit;
|
|
14656
|
+
}
|
|
14657
|
+
if (!webTarget.bridgeMode) {
|
|
14658
|
+
const { agent: agent2, freeFn: newFreeFn } = await puppeteerAgentForTarget(
|
|
14659
|
+
webTarget,
|
|
14660
|
+
preference
|
|
14661
|
+
);
|
|
14662
|
+
freeFn.push(...newFreeFn);
|
|
14663
|
+
return { agent: agent2, freeFn };
|
|
14664
|
+
}
|
|
14665
|
+
assert(
|
|
14666
|
+
webTarget.bridgeMode === "newTabWithUrl" || webTarget.bridgeMode === "currentTab",
|
|
14667
|
+
`bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${webTarget.bridgeMode}`
|
|
14668
|
+
);
|
|
14669
|
+
if (webTarget.userAgent || webTarget.viewportWidth || webTarget.viewportHeight || webTarget.viewportScale || webTarget.waitForNetworkIdle || webTarget.cookie) {
|
|
14670
|
+
console.warn(
|
|
14671
|
+
"puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode. They will be ignored."
|
|
14672
|
+
);
|
|
14673
|
+
}
|
|
14674
|
+
const agent = new AgentOverChromeBridge({
|
|
14675
|
+
closeNewTabsAfterDisconnect: webTarget.closeNewTabsAfterDisconnect,
|
|
14676
|
+
cacheId: fileName
|
|
14638
14677
|
});
|
|
14639
|
-
if (
|
|
14640
|
-
|
|
14678
|
+
if (webTarget.bridgeMode === "newTabWithUrl") {
|
|
14679
|
+
await agent.connectNewTabWithUrl(webTarget.url);
|
|
14641
14680
|
} else {
|
|
14642
|
-
|
|
14681
|
+
if (webTarget.url) {
|
|
14682
|
+
console.warn(
|
|
14683
|
+
'url will be ignored in bridge mode with "currentTab"'
|
|
14684
|
+
);
|
|
14685
|
+
}
|
|
14686
|
+
await agent.connectCurrentTab();
|
|
14643
14687
|
}
|
|
14644
|
-
|
|
14688
|
+
freeFn.push({
|
|
14689
|
+
name: "destroy_agent_over_chrome_bridge",
|
|
14690
|
+
fn: () => agent.destroy()
|
|
14691
|
+
});
|
|
14692
|
+
return {
|
|
14693
|
+
agent,
|
|
14694
|
+
freeFn
|
|
14695
|
+
};
|
|
14645
14696
|
}
|
|
14646
|
-
if (
|
|
14647
|
-
const
|
|
14648
|
-
|
|
14649
|
-
|
|
14650
|
-
|
|
14651
|
-
|
|
14652
|
-
|
|
14697
|
+
if (script.android) {
|
|
14698
|
+
const androidTarget = script.android;
|
|
14699
|
+
const agent = await agentFromAdbDevice(androidTarget.deviceId);
|
|
14700
|
+
await agent.launch(androidTarget.launch);
|
|
14701
|
+
freeFn.push({
|
|
14702
|
+
name: "destroy_android_agent",
|
|
14703
|
+
fn: () => agent.destroy()
|
|
14704
|
+
});
|
|
14705
|
+
return { agent, freeFn };
|
|
14653
14706
|
}
|
|
14654
|
-
|
|
14655
|
-
target
|
|
14656
|
-
`bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${target.bridgeMode}`
|
|
14707
|
+
throw new Error(
|
|
14708
|
+
'No valid target configuration found in the yaml script, should be either "web" or "android"'
|
|
14657
14709
|
);
|
|
14658
|
-
if (target.userAgent || target.viewportWidth || target.viewportHeight || target.viewportScale || target.waitForNetworkIdle || target.cookie) {
|
|
14659
|
-
console.warn(
|
|
14660
|
-
"puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode. They will be ignored."
|
|
14661
|
-
);
|
|
14662
|
-
}
|
|
14663
|
-
const agent = new AgentOverChromeBridge({
|
|
14664
|
-
closeNewTabsAfterDisconnect: target.closeNewTabsAfterDisconnect,
|
|
14665
|
-
cacheId: fileName
|
|
14666
|
-
});
|
|
14667
|
-
if (target.bridgeMode === "newTabWithUrl") {
|
|
14668
|
-
await agent.connectNewTabWithUrl(target.url);
|
|
14669
|
-
} else {
|
|
14670
|
-
if (target.url) {
|
|
14671
|
-
console.warn('url will be ignored in bridge mode with "currentTab"');
|
|
14672
|
-
}
|
|
14673
|
-
await agent.connectCurrentTab();
|
|
14674
|
-
}
|
|
14675
|
-
freeFn.push({
|
|
14676
|
-
name: "destroy_agent_over_chrome_bridge",
|
|
14677
|
-
fn: () => agent.destroy()
|
|
14678
|
-
});
|
|
14679
|
-
return {
|
|
14680
|
-
agent,
|
|
14681
|
-
freeFn
|
|
14682
|
-
};
|
|
14683
14710
|
});
|
|
14684
14711
|
fileContextList.push({ file, player });
|
|
14685
14712
|
}
|