tauri-test-cli 0.7.2 → 0.9.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.
Files changed (2) hide show
  1. package/dist/cli.js +236 -223
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -120717,6 +120717,7 @@ async function disconnect() {
120717
120717
 
120718
120718
  // src/commands/screenshot.ts
120719
120719
  import { writeFile } from "fs/promises";
120720
+ import { execFileSync } from "child_process";
120720
120721
 
120721
120722
  // src/driver.ts
120722
120723
  import { spawn as spawn2, execSync as execSync2 } from "child_process";
@@ -120930,24 +120931,34 @@ async function screenshot(options = {}) {
120930
120931
  const { width, height } = await browser3.getWindowSize();
120931
120932
  let data2;
120932
120933
  let method;
120933
- try {
120934
- data2 = await withTimeout(captureWithHtml2Canvas(browser3), timeout, "html2canvas timed out");
120935
- method = "html2canvas";
120936
- } catch (err) {
120937
- console.error(`html2canvas failed: ${err}, trying canvas fallback...`);
120934
+ const xvfbDisplay2 = getXvfbDisplay();
120935
+ if (xvfbDisplay2 !== null) {
120938
120936
  try {
120939
- data2 = await withTimeout(captureWithCanvas(browser3), timeout, "Canvas screenshot timed out");
120940
- method = "canvas";
120941
- } catch (canvasErr) {
120942
- if (getXvfbDisplay() !== null) {
120943
- throw new Error(`All screenshot methods failed in Xvfb: html2canvas: ${err}, canvas: ${canvasErr}`);
120944
- }
120945
- console.error(`Canvas failed: ${canvasErr}, trying native...`);
120937
+ data2 = captureWithX11(xvfbDisplay2);
120938
+ method = "x11";
120939
+ } catch (err) {
120940
+ console.error(`X11 capture failed: ${err}, falling back to JS-based methods...`);
120941
+ }
120942
+ }
120943
+ if (!data2 && xvfbDisplay2 === null) {
120944
+ try {
120945
+ data2 = await withTimeout(browser3.takeScreenshot(), timeout, `Native screenshot timed out after ${timeout}ms`);
120946
+ method = "native";
120947
+ } catch (err) {
120948
+ console.error(`Native screenshot failed: ${err}, trying html2canvas...`);
120949
+ }
120950
+ }
120951
+ if (!data2) {
120952
+ try {
120953
+ data2 = await withTimeout(captureWithHtml2Canvas(browser3), timeout, "html2canvas timed out");
120954
+ method = "html2canvas";
120955
+ } catch (err) {
120956
+ console.error(`html2canvas failed: ${err}, trying canvas fallback...`);
120946
120957
  try {
120947
- data2 = await withTimeout(browser3.takeScreenshot(), timeout, `Native screenshot timed out after ${timeout}ms`);
120948
- method = "native";
120949
- } catch (nativeErr) {
120950
- throw new Error(`All screenshot methods failed: html2canvas: ${err}, canvas: ${canvasErr}, native: ${nativeErr}`);
120958
+ data2 = await withTimeout(captureWithCanvas(browser3), timeout, "Canvas screenshot timed out");
120959
+ method = "canvas";
120960
+ } catch (canvasErr) {
120961
+ throw new Error(`All screenshot methods failed: ${xvfbDisplay2 !== null ? "x11 failed, " : ""}html2canvas: ${err}, canvas: ${canvasErr}`);
120951
120962
  }
120952
120963
  }
120953
120964
  }
@@ -120993,105 +121004,106 @@ async function captureWithHtml2Canvas(browser3) {
120993
121004
  throw new Error("Failed to load html2canvas from CDN");
120994
121005
  }
120995
121006
  await new Promise((r) => setTimeout(r, 50));
120996
- await browser3.execute(() => {
120997
- window.__h2cResult = undefined;
120998
- const h2c = window.html2canvas;
120999
- if (!h2c) {
121000
- window.__h2cResult = "";
121001
- return;
121002
- }
121003
- h2c(document.body, {
121004
- useCORS: true,
121005
- allowTaint: true,
121006
- logging: false,
121007
- backgroundColor: "#ffffff"
121008
- }).then((canvas) => {
121009
- const dataUrl = canvas.toDataURL("image/png");
121010
- window.__h2cResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121011
- }).catch(() => {
121012
- window.__h2cResult = "";
121013
- });
121014
- setTimeout(() => {
121015
- if (window.__h2cResult === undefined) {
121016
- window.__h2cResult = "";
121007
+ const base64 = await browser3.execute(() => {
121008
+ return new Promise((resolve) => {
121009
+ const h2c = window.html2canvas;
121010
+ if (!h2c) {
121011
+ resolve("");
121012
+ return;
121017
121013
  }
121018
- }, 4000);
121014
+ h2c(document.body, {
121015
+ useCORS: true,
121016
+ allowTaint: false,
121017
+ logging: false,
121018
+ backgroundColor: "#ffffff"
121019
+ }).then((canvas) => {
121020
+ try {
121021
+ const dataUrl = canvas.toDataURL("image/png");
121022
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121023
+ } catch {
121024
+ resolve("");
121025
+ }
121026
+ }).catch(() => resolve(""));
121027
+ setTimeout(() => resolve(""), 4000);
121028
+ });
121019
121029
  });
121020
- const base64 = await pollForResult(browser3, "__h2cResult");
121021
121030
  if (!base64) {
121022
121031
  throw new Error("html2canvas capture returned empty");
121023
121032
  }
121024
121033
  return base64;
121025
121034
  }
121026
121035
  async function captureWithCanvas(browser3) {
121027
- await browser3.execute(() => {
121028
- window.__canvasResult = undefined;
121029
- try {
121030
- const w2 = window.innerWidth || 800;
121031
- const h = window.innerHeight || 600;
121032
- const canvas = document.createElement("canvas");
121033
- canvas.width = w2;
121034
- canvas.height = h;
121035
- const ctx = canvas.getContext("2d");
121036
- ctx.fillStyle = "#ffffff";
121037
- ctx.fillRect(0, 0, w2, h);
121038
- const serializer = new XMLSerializer;
121039
- const cloned = document.documentElement.cloneNode(true);
121040
- const html3 = serializer.serializeToString(cloned);
121041
- const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${w2}" height="${h}">
121042
- <foreignObject width="100%" height="100%">
121043
- ${html3}
121044
- </foreignObject>
121045
- </svg>`;
121046
- const blob = new Blob([svg], { type: "image/svg+xml;charset=utf-8" });
121047
- const url2 = URL.createObjectURL(blob);
121048
- const img = new Image;
121049
- img.onload = () => {
121050
- ctx.drawImage(img, 0, 0);
121051
- URL.revokeObjectURL(url2);
121052
- const dataUrl = canvas.toDataURL("image/png");
121053
- window.__canvasResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121054
- };
121055
- img.onerror = () => {
121056
- URL.revokeObjectURL(url2);
121057
- ctx.fillStyle = "#000000";
121058
- ctx.font = "16px monospace";
121059
- const text3 = document.body.innerText || "";
121060
- const lines = text3.split(`
121036
+ const base64 = await browser3.execute(() => {
121037
+ return new Promise((resolve) => {
121038
+ try {
121039
+ const w2 = window.innerWidth || 800;
121040
+ const h = window.innerHeight || 600;
121041
+ const canvas = document.createElement("canvas");
121042
+ canvas.width = w2;
121043
+ canvas.height = h;
121044
+ const ctx = canvas.getContext("2d");
121045
+ ctx.fillStyle = "#ffffff";
121046
+ ctx.fillRect(0, 0, w2, h);
121047
+ const serializer = new XMLSerializer;
121048
+ const cloned = document.documentElement.cloneNode(true);
121049
+ const html3 = serializer.serializeToString(cloned);
121050
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${w2}" height="${h}">
121051
+ <foreignObject width="100%" height="100%">
121052
+ ${html3}
121053
+ </foreignObject>
121054
+ </svg>`;
121055
+ const blob = new Blob([svg], { type: "image/svg+xml;charset=utf-8" });
121056
+ const url2 = URL.createObjectURL(blob);
121057
+ const img = new Image;
121058
+ const renderText2 = () => {
121059
+ ctx.fillStyle = "#000000";
121060
+ ctx.font = "16px monospace";
121061
+ const text3 = document.body.innerText || "";
121062
+ const lines = text3.split(`
121061
121063
  `);
121062
- for (let i = 0;i < lines.length && i < 40; i++) {
121063
- ctx.fillText(lines[i], 10, 20 + i * 20);
121064
- }
121065
- const dataUrl = canvas.toDataURL("image/png");
121066
- window.__canvasResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121067
- };
121068
- img.src = url2;
121069
- setTimeout(() => {
121070
- if (window.__canvasResult === undefined) {
121064
+ for (let i = 0;i < lines.length && i < 40; i++) {
121065
+ ctx.fillText(lines[i], 10, 20 + i * 20);
121066
+ }
121071
121067
  const dataUrl = canvas.toDataURL("image/png");
121072
- window.__canvasResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121073
- }
121074
- }, 4000);
121075
- } catch (e) {
121076
- window.__canvasResult = "";
121077
- }
121068
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121069
+ };
121070
+ img.onload = () => {
121071
+ try {
121072
+ ctx.drawImage(img, 0, 0);
121073
+ URL.revokeObjectURL(url2);
121074
+ const dataUrl = canvas.toDataURL("image/png");
121075
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121076
+ } catch {
121077
+ URL.revokeObjectURL(url2);
121078
+ renderText2();
121079
+ }
121080
+ };
121081
+ img.onerror = () => {
121082
+ URL.revokeObjectURL(url2);
121083
+ renderText2();
121084
+ };
121085
+ img.src = url2;
121086
+ setTimeout(() => {
121087
+ try {
121088
+ const dataUrl = canvas.toDataURL("image/png");
121089
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121090
+ } catch {
121091
+ renderText2();
121092
+ }
121093
+ }, 4000);
121094
+ } catch (e) {
121095
+ resolve("");
121096
+ }
121097
+ });
121078
121098
  });
121079
- const base64 = await pollForResult(browser3, "__canvasResult");
121080
121099
  if (!base64) {
121081
121100
  throw new Error("Canvas screenshot capture returned empty");
121082
121101
  }
121083
121102
  return base64;
121084
121103
  }
121085
- async function pollForResult(browser3, key, intervalMs = 100, maxMs = 5000) {
121086
- const start = Date.now();
121087
- while (Date.now() - start < maxMs) {
121088
- const val3 = await browser3.execute((k) => window[k], key);
121089
- if (val3 !== undefined)
121090
- return val3;
121091
- await new Promise((r) => setTimeout(r, intervalMs));
121092
- }
121093
- const val2 = await browser3.execute((k) => window[k], key);
121094
- return val2 ?? "";
121104
+ function captureWithX11(display) {
121105
+ const result = execFileSync("import", ["-display", `:${display}`, "-window", "root", "png:-"], { maxBuffer: 50 * 1024 * 1024, timeout: 1e4 });
121106
+ return result.toString("base64");
121095
121107
  }
121096
121108
 
121097
121109
  // src/commands/snapshot.ts
@@ -121370,6 +121382,7 @@ import { readFileSync } from "fs";
121370
121382
 
121371
121383
  // src/commands/screenshot.ts
121372
121384
  import { writeFile as writeFile3 } from "fs/promises";
121385
+ import { execFileSync as execFileSync2 } from "child_process";
121373
121386
  var HTML2CANVAS_CDN2 = "https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js";
121374
121387
  async function screenshot2(options = {}) {
121375
121388
  const browser3 = requireBrowser();
@@ -121381,24 +121394,34 @@ async function screenshot2(options = {}) {
121381
121394
  const { width, height } = await browser3.getWindowSize();
121382
121395
  let data2;
121383
121396
  let method;
121384
- try {
121385
- data2 = await withTimeout2(captureWithHtml2Canvas2(browser3), timeout, "html2canvas timed out");
121386
- method = "html2canvas";
121387
- } catch (err) {
121388
- console.error(`html2canvas failed: ${err}, trying canvas fallback...`);
121397
+ const xvfbDisplay2 = getXvfbDisplay();
121398
+ if (xvfbDisplay2 !== null) {
121389
121399
  try {
121390
- data2 = await withTimeout2(captureWithCanvas2(browser3), timeout, "Canvas screenshot timed out");
121391
- method = "canvas";
121392
- } catch (canvasErr) {
121393
- if (getXvfbDisplay() !== null) {
121394
- throw new Error(`All screenshot methods failed in Xvfb: html2canvas: ${err}, canvas: ${canvasErr}`);
121395
- }
121396
- console.error(`Canvas failed: ${canvasErr}, trying native...`);
121400
+ data2 = captureWithX112(xvfbDisplay2);
121401
+ method = "x11";
121402
+ } catch (err) {
121403
+ console.error(`X11 capture failed: ${err}, falling back to JS-based methods...`);
121404
+ }
121405
+ }
121406
+ if (!data2 && xvfbDisplay2 === null) {
121407
+ try {
121408
+ data2 = await withTimeout2(browser3.takeScreenshot(), timeout, `Native screenshot timed out after ${timeout}ms`);
121409
+ method = "native";
121410
+ } catch (err) {
121411
+ console.error(`Native screenshot failed: ${err}, trying html2canvas...`);
121412
+ }
121413
+ }
121414
+ if (!data2) {
121415
+ try {
121416
+ data2 = await withTimeout2(captureWithHtml2Canvas2(browser3), timeout, "html2canvas timed out");
121417
+ method = "html2canvas";
121418
+ } catch (err) {
121419
+ console.error(`html2canvas failed: ${err}, trying canvas fallback...`);
121397
121420
  try {
121398
- data2 = await withTimeout2(browser3.takeScreenshot(), timeout, `Native screenshot timed out after ${timeout}ms`);
121399
- method = "native";
121400
- } catch (nativeErr) {
121401
- throw new Error(`All screenshot methods failed: html2canvas: ${err}, canvas: ${canvasErr}, native: ${nativeErr}`);
121421
+ data2 = await withTimeout2(captureWithCanvas2(browser3), timeout, "Canvas screenshot timed out");
121422
+ method = "canvas";
121423
+ } catch (canvasErr) {
121424
+ throw new Error(`All screenshot methods failed: ${xvfbDisplay2 !== null ? "x11 failed, " : ""}html2canvas: ${err}, canvas: ${canvasErr}`);
121402
121425
  }
121403
121426
  }
121404
121427
  }
@@ -121444,105 +121467,106 @@ async function captureWithHtml2Canvas2(browser3) {
121444
121467
  throw new Error("Failed to load html2canvas from CDN");
121445
121468
  }
121446
121469
  await new Promise((r) => setTimeout(r, 50));
121447
- await browser3.execute(() => {
121448
- window.__h2cResult = undefined;
121449
- const h2c = window.html2canvas;
121450
- if (!h2c) {
121451
- window.__h2cResult = "";
121452
- return;
121453
- }
121454
- h2c(document.body, {
121455
- useCORS: true,
121456
- allowTaint: true,
121457
- logging: false,
121458
- backgroundColor: "#ffffff"
121459
- }).then((canvas) => {
121460
- const dataUrl = canvas.toDataURL("image/png");
121461
- window.__h2cResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121462
- }).catch(() => {
121463
- window.__h2cResult = "";
121464
- });
121465
- setTimeout(() => {
121466
- if (window.__h2cResult === undefined) {
121467
- window.__h2cResult = "";
121470
+ const base64 = await browser3.execute(() => {
121471
+ return new Promise((resolve) => {
121472
+ const h2c = window.html2canvas;
121473
+ if (!h2c) {
121474
+ resolve("");
121475
+ return;
121468
121476
  }
121469
- }, 4000);
121477
+ h2c(document.body, {
121478
+ useCORS: true,
121479
+ allowTaint: false,
121480
+ logging: false,
121481
+ backgroundColor: "#ffffff"
121482
+ }).then((canvas) => {
121483
+ try {
121484
+ const dataUrl = canvas.toDataURL("image/png");
121485
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121486
+ } catch {
121487
+ resolve("");
121488
+ }
121489
+ }).catch(() => resolve(""));
121490
+ setTimeout(() => resolve(""), 4000);
121491
+ });
121470
121492
  });
121471
- const base64 = await pollForResult2(browser3, "__h2cResult");
121472
121493
  if (!base64) {
121473
121494
  throw new Error("html2canvas capture returned empty");
121474
121495
  }
121475
121496
  return base64;
121476
121497
  }
121477
121498
  async function captureWithCanvas2(browser3) {
121478
- await browser3.execute(() => {
121479
- window.__canvasResult = undefined;
121480
- try {
121481
- const w2 = window.innerWidth || 800;
121482
- const h = window.innerHeight || 600;
121483
- const canvas = document.createElement("canvas");
121484
- canvas.width = w2;
121485
- canvas.height = h;
121486
- const ctx = canvas.getContext("2d");
121487
- ctx.fillStyle = "#ffffff";
121488
- ctx.fillRect(0, 0, w2, h);
121489
- const serializer = new XMLSerializer;
121490
- const cloned = document.documentElement.cloneNode(true);
121491
- const html3 = serializer.serializeToString(cloned);
121492
- const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${w2}" height="${h}">
121493
- <foreignObject width="100%" height="100%">
121494
- ${html3}
121495
- </foreignObject>
121496
- </svg>`;
121497
- const blob = new Blob([svg], { type: "image/svg+xml;charset=utf-8" });
121498
- const url2 = URL.createObjectURL(blob);
121499
- const img = new Image;
121500
- img.onload = () => {
121501
- ctx.drawImage(img, 0, 0);
121502
- URL.revokeObjectURL(url2);
121503
- const dataUrl = canvas.toDataURL("image/png");
121504
- window.__canvasResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121505
- };
121506
- img.onerror = () => {
121507
- URL.revokeObjectURL(url2);
121508
- ctx.fillStyle = "#000000";
121509
- ctx.font = "16px monospace";
121510
- const text3 = document.body.innerText || "";
121511
- const lines = text3.split(`
121499
+ const base64 = await browser3.execute(() => {
121500
+ return new Promise((resolve) => {
121501
+ try {
121502
+ const w2 = window.innerWidth || 800;
121503
+ const h = window.innerHeight || 600;
121504
+ const canvas = document.createElement("canvas");
121505
+ canvas.width = w2;
121506
+ canvas.height = h;
121507
+ const ctx = canvas.getContext("2d");
121508
+ ctx.fillStyle = "#ffffff";
121509
+ ctx.fillRect(0, 0, w2, h);
121510
+ const serializer = new XMLSerializer;
121511
+ const cloned = document.documentElement.cloneNode(true);
121512
+ const html3 = serializer.serializeToString(cloned);
121513
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${w2}" height="${h}">
121514
+ <foreignObject width="100%" height="100%">
121515
+ ${html3}
121516
+ </foreignObject>
121517
+ </svg>`;
121518
+ const blob = new Blob([svg], { type: "image/svg+xml;charset=utf-8" });
121519
+ const url2 = URL.createObjectURL(blob);
121520
+ const img = new Image;
121521
+ const renderText2 = () => {
121522
+ ctx.fillStyle = "#000000";
121523
+ ctx.font = "16px monospace";
121524
+ const text3 = document.body.innerText || "";
121525
+ const lines = text3.split(`
121512
121526
  `);
121513
- for (let i = 0;i < lines.length && i < 40; i++) {
121514
- ctx.fillText(lines[i], 10, 20 + i * 20);
121515
- }
121516
- const dataUrl = canvas.toDataURL("image/png");
121517
- window.__canvasResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121518
- };
121519
- img.src = url2;
121520
- setTimeout(() => {
121521
- if (window.__canvasResult === undefined) {
121527
+ for (let i = 0;i < lines.length && i < 40; i++) {
121528
+ ctx.fillText(lines[i], 10, 20 + i * 20);
121529
+ }
121522
121530
  const dataUrl = canvas.toDataURL("image/png");
121523
- window.__canvasResult = dataUrl.replace(/^data:image\/png;base64,/, "");
121524
- }
121525
- }, 4000);
121526
- } catch (e) {
121527
- window.__canvasResult = "";
121528
- }
121531
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121532
+ };
121533
+ img.onload = () => {
121534
+ try {
121535
+ ctx.drawImage(img, 0, 0);
121536
+ URL.revokeObjectURL(url2);
121537
+ const dataUrl = canvas.toDataURL("image/png");
121538
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121539
+ } catch {
121540
+ URL.revokeObjectURL(url2);
121541
+ renderText2();
121542
+ }
121543
+ };
121544
+ img.onerror = () => {
121545
+ URL.revokeObjectURL(url2);
121546
+ renderText2();
121547
+ };
121548
+ img.src = url2;
121549
+ setTimeout(() => {
121550
+ try {
121551
+ const dataUrl = canvas.toDataURL("image/png");
121552
+ resolve(dataUrl.replace(/^data:image\/png;base64,/, ""));
121553
+ } catch {
121554
+ renderText2();
121555
+ }
121556
+ }, 4000);
121557
+ } catch (e) {
121558
+ resolve("");
121559
+ }
121560
+ });
121529
121561
  });
121530
- const base64 = await pollForResult2(browser3, "__canvasResult");
121531
121562
  if (!base64) {
121532
121563
  throw new Error("Canvas screenshot capture returned empty");
121533
121564
  }
121534
121565
  return base64;
121535
121566
  }
121536
- async function pollForResult2(browser3, key, intervalMs = 100, maxMs = 5000) {
121537
- const start = Date.now();
121538
- while (Date.now() - start < maxMs) {
121539
- const val3 = await browser3.execute((k) => window[k], key);
121540
- if (val3 !== undefined)
121541
- return val3;
121542
- await new Promise((r) => setTimeout(r, intervalMs));
121543
- }
121544
- const val2 = await browser3.execute((k) => window[k], key);
121545
- return val2 ?? "";
121567
+ function captureWithX112(display) {
121568
+ const result = execFileSync2("import", ["-display", `:${display}`, "-window", "root", "png:-"], { maxBuffer: 50 * 1024 * 1024, timeout: 1e4 });
121569
+ return result.toString("base64");
121546
121570
  }
121547
121571
 
121548
121572
  // src/commands/snapshot.ts
@@ -122008,35 +122032,24 @@ async function startServer(options) {
122008
122032
  const { port, appPath, waitTimeout, autoWait } = options;
122009
122033
  process.on("SIGINT", shutdown);
122010
122034
  process.on("SIGTERM", shutdown);
122011
- const getAncestorPids = () => {
122012
- const pids = [];
122013
- let pid = process.pid;
122014
- while (pid > 1) {
122015
- try {
122016
- const stat = readFileSync(`/proc/${pid}/stat`, "utf8");
122017
- const ppid = parseInt(stat.split(") ")[1].split(" ")[1]);
122018
- if (ppid <= 1)
122019
- break;
122020
- pids.push(ppid);
122021
- pid = ppid;
122022
- } catch {
122023
- break;
122024
- }
122035
+ const getDirectParentPid = () => {
122036
+ try {
122037
+ const stat = readFileSync(`/proc/${process.pid}/stat`, "utf8");
122038
+ return parseInt(stat.split(") ")[1].split(" ")[1]);
122039
+ } catch {
122040
+ return process.ppid;
122025
122041
  }
122026
- return pids;
122027
122042
  };
122028
- const ancestorPids = getAncestorPids();
122029
- if (ancestorPids.length > 0) {
122043
+ const parentPid = getDirectParentPid();
122044
+ if (parentPid > 1) {
122030
122045
  setInterval(() => {
122031
- for (const pid of ancestorPids) {
122032
- try {
122033
- process.kill(pid, 0);
122034
- } catch {
122035
- shutdown();
122036
- return;
122037
- }
122046
+ try {
122047
+ process.kill(parentPid, 0);
122048
+ } catch {
122049
+ shutdown();
122050
+ return;
122038
122051
  }
122039
- }, 500);
122052
+ }, 2000);
122040
122053
  }
122041
122054
  console.error(`Launching app and waiting for load (timeout: ${waitTimeout}ms)...`);
122042
122055
  await connect2({ appPath, waitTimeout });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tauri-test-cli",
3
- "version": "0.7.2",
3
+ "version": "0.9.0",
4
4
  "description": "CLI for testing Tauri applications with screenshot capture, DOM inspection, and user interaction simulation",
5
5
  "type": "module",
6
6
  "bin": {