@panicgit/android-test-pilot 0.1.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/.claude/skills/atp/analyze-app/SKILL.md +86 -0
- package/.claude/skills/atp/app-map/SKILL.md +36 -0
- package/.claude/skills/atp/check-logs/SKILL.md +77 -0
- package/.claude/skills/atp/run-test/SKILL.md +92 -0
- package/README.ko.md +241 -0
- package/README.md +241 -0
- package/lib/android.d.ts +96 -0
- package/lib/android.js +740 -0
- package/lib/android.js.map +1 -0
- package/lib/image-utils.d.ts +28 -0
- package/lib/image-utils.js +156 -0
- package/lib/image-utils.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +90 -0
- package/lib/index.js.map +1 -0
- package/lib/ios.d.ts +54 -0
- package/lib/ios.js +241 -0
- package/lib/ios.js.map +1 -0
- package/lib/iphone-simulator.d.ts +34 -0
- package/lib/iphone-simulator.js +227 -0
- package/lib/iphone-simulator.js.map +1 -0
- package/lib/logger.d.ts +2 -0
- package/lib/logger.js +23 -0
- package/lib/logger.js.map +1 -0
- package/lib/mobile-device.d.ts +25 -0
- package/lib/mobile-device.js +141 -0
- package/lib/mobile-device.js.map +1 -0
- package/lib/mobilecli.d.ts +32 -0
- package/lib/mobilecli.js +113 -0
- package/lib/mobilecli.js.map +1 -0
- package/lib/png.d.ts +9 -0
- package/lib/png.js +20 -0
- package/lib/png.js.map +1 -0
- package/lib/robot.d.ts +116 -0
- package/lib/robot.js +10 -0
- package/lib/robot.js.map +1 -0
- package/lib/server.d.ts +3 -0
- package/lib/server.js +692 -0
- package/lib/server.js.map +1 -0
- package/lib/tiers/abstract-tier.d.ts +48 -0
- package/lib/tiers/abstract-tier.js +35 -0
- package/lib/tiers/abstract-tier.js.map +1 -0
- package/lib/tiers/screenshot-tier.d.ts +19 -0
- package/lib/tiers/screenshot-tier.js +53 -0
- package/lib/tiers/screenshot-tier.js.map +1 -0
- package/lib/tiers/text-tier.d.ts +20 -0
- package/lib/tiers/text-tier.js +138 -0
- package/lib/tiers/text-tier.js.map +1 -0
- package/lib/tiers/tier-runner.d.ts +27 -0
- package/lib/tiers/tier-runner.js +91 -0
- package/lib/tiers/tier-runner.js.map +1 -0
- package/lib/tiers/types.d.ts +100 -0
- package/lib/tiers/types.js +12 -0
- package/lib/tiers/types.js.map +1 -0
- package/lib/tiers/uiautomator-tier.d.ts +16 -0
- package/lib/tiers/uiautomator-tier.js +91 -0
- package/lib/tiers/uiautomator-tier.js.map +1 -0
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +81 -0
- package/lib/utils.js.map +1 -0
- package/lib/webdriver-agent.d.ts +45 -0
- package/lib/webdriver-agent.js +400 -0
- package/lib/webdriver-agent.js.map +1 -0
- package/package.json +50 -0
- package/templates/scenario.md +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobilecli.js","sourceRoot":"","sources":["../src/mobilecli.ts"],"names":[],"mappings":"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"}
|
package/lib/png.d.ts
ADDED
package/lib/png.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PNG = void 0;
|
|
4
|
+
class PNG {
|
|
5
|
+
buffer;
|
|
6
|
+
constructor(buffer) {
|
|
7
|
+
this.buffer = buffer;
|
|
8
|
+
}
|
|
9
|
+
getDimensions() {
|
|
10
|
+
const pngSignature = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
11
|
+
if (!this.buffer.subarray(0, 8).equals(pngSignature)) {
|
|
12
|
+
throw new Error("Not a valid PNG file");
|
|
13
|
+
}
|
|
14
|
+
const width = this.buffer.readUInt32BE(16);
|
|
15
|
+
const height = this.buffer.readUInt32BE(20);
|
|
16
|
+
return { width, height };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.PNG = PNG;
|
|
20
|
+
//# sourceMappingURL=png.js.map
|
package/lib/png.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":";;;AAKA,MAAa,GAAG;IACqB;IAApC,YAAoC,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAClD,CAAC;IAEM,aAAa;QACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;CACD;AAdD,kBAcC"}
|
package/lib/robot.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export interface Dimensions {
|
|
2
|
+
width: number;
|
|
3
|
+
height: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ScreenSize extends Dimensions {
|
|
6
|
+
scale: number;
|
|
7
|
+
}
|
|
8
|
+
export interface InstalledApp {
|
|
9
|
+
packageName: string;
|
|
10
|
+
appName: string;
|
|
11
|
+
}
|
|
12
|
+
export type SwipeDirection = "up" | "down" | "left" | "right";
|
|
13
|
+
export type Button = "HOME" | "BACK" | "VOLUME_UP" | "VOLUME_DOWN" | "ENTER" | "DPAD_CENTER" | "DPAD_UP" | "DPAD_DOWN" | "DPAD_LEFT" | "DPAD_RIGHT";
|
|
14
|
+
export interface ScreenElementRect {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ScreenElement {
|
|
21
|
+
type: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
text?: string;
|
|
24
|
+
name?: string;
|
|
25
|
+
value?: string;
|
|
26
|
+
identifier?: string;
|
|
27
|
+
rect: ScreenElementRect;
|
|
28
|
+
focused?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare class ActionableError extends Error {
|
|
31
|
+
constructor(message: string);
|
|
32
|
+
}
|
|
33
|
+
export type Orientation = "portrait" | "landscape";
|
|
34
|
+
export interface Robot {
|
|
35
|
+
/**
|
|
36
|
+
* Get the screen size of the device in pixels.
|
|
37
|
+
*/
|
|
38
|
+
getScreenSize(): Promise<ScreenSize>;
|
|
39
|
+
/**
|
|
40
|
+
* Swipe in a direction.
|
|
41
|
+
*/
|
|
42
|
+
swipe(direction: SwipeDirection): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Swipe from a specific coordinate in a direction.
|
|
45
|
+
*/
|
|
46
|
+
swipeFromCoordinate(x: number, y: number, direction: SwipeDirection, distance?: number): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Get a screenshot of the screen. Returns a Buffer that contains
|
|
49
|
+
* a PNG image of the screen. Will be same dimensions as getScreenSize().
|
|
50
|
+
*/
|
|
51
|
+
getScreenshot(): Promise<Buffer>;
|
|
52
|
+
/**
|
|
53
|
+
* List all installed apps on the device. Returns an array of package names (or
|
|
54
|
+
* bundle identifiers in iOS) for all installed apps.
|
|
55
|
+
*/
|
|
56
|
+
listApps(): Promise<InstalledApp[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Launch an app.
|
|
59
|
+
*/
|
|
60
|
+
launchApp(packageName: string, locale?: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Terminate an app. If app was already terminated (or non existent) then this
|
|
63
|
+
* is a no-op.
|
|
64
|
+
*/
|
|
65
|
+
terminateApp(packageName: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Install an app on the device from a file path.
|
|
68
|
+
*/
|
|
69
|
+
installApp(path: string): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Uninstall an app from the device.
|
|
72
|
+
*/
|
|
73
|
+
uninstallApp(bundleId: string): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Open a URL in the device's web browser. Can be an https:// url, or a
|
|
76
|
+
* custom scheme (e.g. "myapp://").
|
|
77
|
+
*/
|
|
78
|
+
openUrl(url: string): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Send keys to the device, simulating keyboard input.
|
|
81
|
+
*/
|
|
82
|
+
sendKeys(text: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Press a button on the device, simulating a physical button press.
|
|
85
|
+
*/
|
|
86
|
+
pressButton(button: Button): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Tap on a specific coordinate on the screen.
|
|
89
|
+
*/
|
|
90
|
+
tap(x: number, y: number): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Tap on a specific coordinate on the screen.
|
|
93
|
+
*/
|
|
94
|
+
doubleTap(x: number, y: number): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Long press on a specific coordinate on the screen.
|
|
97
|
+
* @param x - The x coordinate to long press
|
|
98
|
+
* @param y - The y coordinate to long press
|
|
99
|
+
* @param duration - Duration of the long press in milliseconds
|
|
100
|
+
*/
|
|
101
|
+
longPress(x: number, y: number, duration: number): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Get all elements on the screen. Works only on native apps (not webviews). Will
|
|
104
|
+
* return a filtered list of elements that make sense to interact with.
|
|
105
|
+
*/
|
|
106
|
+
getElementsOnScreen(): Promise<ScreenElement[]>;
|
|
107
|
+
/**
|
|
108
|
+
* Change the screen orientation of the device.
|
|
109
|
+
* @param orientation The desired orientation ("portrait" or "landscape")
|
|
110
|
+
*/
|
|
111
|
+
setOrientation(orientation: Orientation): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Get the current screen orientation.
|
|
114
|
+
*/
|
|
115
|
+
getOrientation(): Promise<Orientation>;
|
|
116
|
+
}
|
package/lib/robot.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActionableError = void 0;
|
|
4
|
+
class ActionableError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.ActionableError = ActionableError;
|
|
10
|
+
//# sourceMappingURL=robot.js.map
|
package/lib/robot.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robot.js","sourceRoot":"","sources":["../src/robot.ts"],"names":[],"mappings":";;;AAsCA,MAAa,eAAgB,SAAQ,KAAK;IACzC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;IAChB,CAAC;CACD;AAJD,0CAIC"}
|
package/lib/server.d.ts
ADDED