@midscene/ios 0.30.9-beta-20251203125106.0 → 0.30.10
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/bin.mjs +46 -14
- package/dist/es/index.mjs +46 -14
- package/dist/lib/bin.js +46 -14
- package/dist/lib/index.js +46 -14
- package/dist/types/index.d.ts +15 -0
- package/package.json +5 -5
- package/static/index.html +1 -1
- package/static/static/js/{index.9f554396.js → index.2caaacaf.js} +3 -3
- package/static/static/js/{index.9f554396.js.map → index.2caaacaf.js.map} +1 -1
- /package/static/static/js/{index.9f554396.js.LICENSE.txt → index.2caaacaf.js.LICENSE.txt} +0 -0
package/dist/es/bin.mjs
CHANGED
|
@@ -11999,6 +11999,49 @@ class IOSWebDriverClient extends WebDriverClient {
|
|
|
11999
11999
|
debugIOS(`Warning: Key "${key}" is not supported on iOS platform`);
|
|
12000
12000
|
throw new Error(`Key "${key}" is not supported on iOS platform`);
|
|
12001
12001
|
}
|
|
12002
|
+
async getActiveElement() {
|
|
12003
|
+
this.ensureSession();
|
|
12004
|
+
debugIOS('Getting active element');
|
|
12005
|
+
try {
|
|
12006
|
+
var _response_value, _response_value1;
|
|
12007
|
+
const response = await this.makeRequest('GET', `/session/${this.sessionId}/element/active`);
|
|
12008
|
+
const elementId = (null == (_response_value = response.value) ? void 0 : _response_value.ELEMENT) || (null == (_response_value1 = response.value) ? void 0 : _response_value1['element-6066-11e4-a52e-4f735466cecf']) || response.ELEMENT || response['element-6066-11e4-a52e-4f735466cecf'];
|
|
12009
|
+
if (elementId) {
|
|
12010
|
+
debugIOS(`Got active element ID: ${elementId}`);
|
|
12011
|
+
return elementId;
|
|
12012
|
+
}
|
|
12013
|
+
debugIOS('No active element found');
|
|
12014
|
+
return null;
|
|
12015
|
+
} catch (error) {
|
|
12016
|
+
debugIOS(`Failed to get active element: ${error}`);
|
|
12017
|
+
return null;
|
|
12018
|
+
}
|
|
12019
|
+
}
|
|
12020
|
+
async clearElement(elementId) {
|
|
12021
|
+
this.ensureSession();
|
|
12022
|
+
debugIOS(`Clearing element: ${elementId}`);
|
|
12023
|
+
try {
|
|
12024
|
+
await this.makeRequest('POST', `/session/${this.sessionId}/element/${elementId}/clear`);
|
|
12025
|
+
debugIOS('Element cleared successfully');
|
|
12026
|
+
} catch (error) {
|
|
12027
|
+
debugIOS(`Failed to clear element: ${error}`);
|
|
12028
|
+
throw new Error(`Failed to clear element: ${error}`);
|
|
12029
|
+
}
|
|
12030
|
+
}
|
|
12031
|
+
async clearActiveElement() {
|
|
12032
|
+
try {
|
|
12033
|
+
const elementId = await this.getActiveElement();
|
|
12034
|
+
if (!elementId) {
|
|
12035
|
+
debugIOS('No active element to clear');
|
|
12036
|
+
return false;
|
|
12037
|
+
}
|
|
12038
|
+
await this.clearElement(elementId);
|
|
12039
|
+
return true;
|
|
12040
|
+
} catch (error) {
|
|
12041
|
+
debugIOS(`Failed to clear active element: ${error}`);
|
|
12042
|
+
return false;
|
|
12043
|
+
}
|
|
12044
|
+
}
|
|
12002
12045
|
normalizeKeyName(key) {
|
|
12003
12046
|
return key.charAt(0).toUpperCase() + key.slice(1).toLowerCase();
|
|
12004
12047
|
}
|
|
@@ -12158,7 +12201,6 @@ function device_define_property(obj, key, value) {
|
|
|
12158
12201
|
return obj;
|
|
12159
12202
|
}
|
|
12160
12203
|
const debugDevice = getDebug('ios:device');
|
|
12161
|
-
const BackspaceChar = '\u0008';
|
|
12162
12204
|
class device_IOSDevice {
|
|
12163
12205
|
actionSpace() {
|
|
12164
12206
|
const defaultActions = [
|
|
@@ -12367,19 +12409,9 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
|
|
|
12367
12409
|
if (!element) return;
|
|
12368
12410
|
await this.tap(element.center[0], element.center[1]);
|
|
12369
12411
|
await sleep(100);
|
|
12370
|
-
|
|
12371
|
-
|
|
12372
|
-
|
|
12373
|
-
await this.wdaBackend.typeText(BackspaceChar);
|
|
12374
|
-
} catch (error2) {
|
|
12375
|
-
debugDevice(`Method 1 failed, trying method 2: ${error2}`);
|
|
12376
|
-
try {
|
|
12377
|
-
const backspaces = Array(100).fill(BackspaceChar).join('');
|
|
12378
|
-
await this.wdaBackend.typeText(backspaces);
|
|
12379
|
-
} catch (error3) {
|
|
12380
|
-
debugDevice(`All clear methods failed: ${error3}`);
|
|
12381
|
-
}
|
|
12382
|
-
}
|
|
12412
|
+
debugDevice('Attempting to clear input with WebDriver Clear API');
|
|
12413
|
+
const cleared = await this.wdaBackend.clearActiveElement();
|
|
12414
|
+
cleared ? debugDevice('Successfully cleared input with WebDriver Clear API') : debugDevice('WebDriver Clear API returned false (no active element or clear failed)');
|
|
12383
12415
|
}
|
|
12384
12416
|
async url() {
|
|
12385
12417
|
return '';
|
package/dist/es/index.mjs
CHANGED
|
@@ -150,6 +150,49 @@ class IOSWebDriverClient extends WebDriverClient {
|
|
|
150
150
|
debugIOS(`Warning: Key "${key}" is not supported on iOS platform`);
|
|
151
151
|
throw new Error(`Key "${key}" is not supported on iOS platform`);
|
|
152
152
|
}
|
|
153
|
+
async getActiveElement() {
|
|
154
|
+
this.ensureSession();
|
|
155
|
+
debugIOS('Getting active element');
|
|
156
|
+
try {
|
|
157
|
+
var _response_value, _response_value1;
|
|
158
|
+
const response = await this.makeRequest('GET', `/session/${this.sessionId}/element/active`);
|
|
159
|
+
const elementId = (null == (_response_value = response.value) ? void 0 : _response_value.ELEMENT) || (null == (_response_value1 = response.value) ? void 0 : _response_value1['element-6066-11e4-a52e-4f735466cecf']) || response.ELEMENT || response['element-6066-11e4-a52e-4f735466cecf'];
|
|
160
|
+
if (elementId) {
|
|
161
|
+
debugIOS(`Got active element ID: ${elementId}`);
|
|
162
|
+
return elementId;
|
|
163
|
+
}
|
|
164
|
+
debugIOS('No active element found');
|
|
165
|
+
return null;
|
|
166
|
+
} catch (error) {
|
|
167
|
+
debugIOS(`Failed to get active element: ${error}`);
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async clearElement(elementId) {
|
|
172
|
+
this.ensureSession();
|
|
173
|
+
debugIOS(`Clearing element: ${elementId}`);
|
|
174
|
+
try {
|
|
175
|
+
await this.makeRequest('POST', `/session/${this.sessionId}/element/${elementId}/clear`);
|
|
176
|
+
debugIOS('Element cleared successfully');
|
|
177
|
+
} catch (error) {
|
|
178
|
+
debugIOS(`Failed to clear element: ${error}`);
|
|
179
|
+
throw new Error(`Failed to clear element: ${error}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async clearActiveElement() {
|
|
183
|
+
try {
|
|
184
|
+
const elementId = await this.getActiveElement();
|
|
185
|
+
if (!elementId) {
|
|
186
|
+
debugIOS('No active element to clear');
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
await this.clearElement(elementId);
|
|
190
|
+
return true;
|
|
191
|
+
} catch (error) {
|
|
192
|
+
debugIOS(`Failed to clear active element: ${error}`);
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
153
196
|
normalizeKeyName(key) {
|
|
154
197
|
return key.charAt(0).toUpperCase() + key.slice(1).toLowerCase();
|
|
155
198
|
}
|
|
@@ -309,7 +352,6 @@ function _define_property(obj, key, value) {
|
|
|
309
352
|
return obj;
|
|
310
353
|
}
|
|
311
354
|
const debugDevice = getDebug('ios:device');
|
|
312
|
-
const BackspaceChar = '\u0008';
|
|
313
355
|
class IOSDevice {
|
|
314
356
|
actionSpace() {
|
|
315
357
|
const defaultActions = [
|
|
@@ -518,19 +560,9 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
|
|
|
518
560
|
if (!element) return;
|
|
519
561
|
await this.tap(element.center[0], element.center[1]);
|
|
520
562
|
await sleep(100);
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
await this.wdaBackend.typeText(BackspaceChar);
|
|
525
|
-
} catch (error2) {
|
|
526
|
-
debugDevice(`Method 1 failed, trying method 2: ${error2}`);
|
|
527
|
-
try {
|
|
528
|
-
const backspaces = Array(100).fill(BackspaceChar).join('');
|
|
529
|
-
await this.wdaBackend.typeText(backspaces);
|
|
530
|
-
} catch (error3) {
|
|
531
|
-
debugDevice(`All clear methods failed: ${error3}`);
|
|
532
|
-
}
|
|
533
|
-
}
|
|
563
|
+
debugDevice('Attempting to clear input with WebDriver Clear API');
|
|
564
|
+
const cleared = await this.wdaBackend.clearActiveElement();
|
|
565
|
+
cleared ? debugDevice('Successfully cleared input with WebDriver Clear API') : debugDevice('WebDriver Clear API returned false (no active element or clear failed)');
|
|
534
566
|
}
|
|
535
567
|
async url() {
|
|
536
568
|
return '';
|
package/dist/lib/bin.js
CHANGED
|
@@ -12137,6 +12137,49 @@ var __webpack_exports__ = {};
|
|
|
12137
12137
|
debugIOS(`Warning: Key "${key}" is not supported on iOS platform`);
|
|
12138
12138
|
throw new Error(`Key "${key}" is not supported on iOS platform`);
|
|
12139
12139
|
}
|
|
12140
|
+
async getActiveElement() {
|
|
12141
|
+
this.ensureSession();
|
|
12142
|
+
debugIOS('Getting active element');
|
|
12143
|
+
try {
|
|
12144
|
+
var _response_value, _response_value1;
|
|
12145
|
+
const response = await this.makeRequest('GET', `/session/${this.sessionId}/element/active`);
|
|
12146
|
+
const elementId = (null == (_response_value = response.value) ? void 0 : _response_value.ELEMENT) || (null == (_response_value1 = response.value) ? void 0 : _response_value1['element-6066-11e4-a52e-4f735466cecf']) || response.ELEMENT || response['element-6066-11e4-a52e-4f735466cecf'];
|
|
12147
|
+
if (elementId) {
|
|
12148
|
+
debugIOS(`Got active element ID: ${elementId}`);
|
|
12149
|
+
return elementId;
|
|
12150
|
+
}
|
|
12151
|
+
debugIOS('No active element found');
|
|
12152
|
+
return null;
|
|
12153
|
+
} catch (error) {
|
|
12154
|
+
debugIOS(`Failed to get active element: ${error}`);
|
|
12155
|
+
return null;
|
|
12156
|
+
}
|
|
12157
|
+
}
|
|
12158
|
+
async clearElement(elementId) {
|
|
12159
|
+
this.ensureSession();
|
|
12160
|
+
debugIOS(`Clearing element: ${elementId}`);
|
|
12161
|
+
try {
|
|
12162
|
+
await this.makeRequest('POST', `/session/${this.sessionId}/element/${elementId}/clear`);
|
|
12163
|
+
debugIOS('Element cleared successfully');
|
|
12164
|
+
} catch (error) {
|
|
12165
|
+
debugIOS(`Failed to clear element: ${error}`);
|
|
12166
|
+
throw new Error(`Failed to clear element: ${error}`);
|
|
12167
|
+
}
|
|
12168
|
+
}
|
|
12169
|
+
async clearActiveElement() {
|
|
12170
|
+
try {
|
|
12171
|
+
const elementId = await this.getActiveElement();
|
|
12172
|
+
if (!elementId) {
|
|
12173
|
+
debugIOS('No active element to clear');
|
|
12174
|
+
return false;
|
|
12175
|
+
}
|
|
12176
|
+
await this.clearElement(elementId);
|
|
12177
|
+
return true;
|
|
12178
|
+
} catch (error) {
|
|
12179
|
+
debugIOS(`Failed to clear active element: ${error}`);
|
|
12180
|
+
return false;
|
|
12181
|
+
}
|
|
12182
|
+
}
|
|
12140
12183
|
normalizeKeyName(key) {
|
|
12141
12184
|
return key.charAt(0).toUpperCase() + key.slice(1).toLowerCase();
|
|
12142
12185
|
}
|
|
@@ -12296,7 +12339,6 @@ var __webpack_exports__ = {};
|
|
|
12296
12339
|
return obj;
|
|
12297
12340
|
}
|
|
12298
12341
|
const debugDevice = (0, logger_namespaceObject.getDebug)('ios:device');
|
|
12299
|
-
const BackspaceChar = '\u0008';
|
|
12300
12342
|
class device_IOSDevice {
|
|
12301
12343
|
actionSpace() {
|
|
12302
12344
|
const defaultActions = [
|
|
@@ -12505,19 +12547,9 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
|
|
|
12505
12547
|
if (!element) return;
|
|
12506
12548
|
await this.tap(element.center[0], element.center[1]);
|
|
12507
12549
|
await (0, utils_namespaceObject.sleep)(100);
|
|
12508
|
-
|
|
12509
|
-
|
|
12510
|
-
|
|
12511
|
-
await this.wdaBackend.typeText(BackspaceChar);
|
|
12512
|
-
} catch (error2) {
|
|
12513
|
-
debugDevice(`Method 1 failed, trying method 2: ${error2}`);
|
|
12514
|
-
try {
|
|
12515
|
-
const backspaces = Array(100).fill(BackspaceChar).join('');
|
|
12516
|
-
await this.wdaBackend.typeText(backspaces);
|
|
12517
|
-
} catch (error3) {
|
|
12518
|
-
debugDevice(`All clear methods failed: ${error3}`);
|
|
12519
|
-
}
|
|
12520
|
-
}
|
|
12550
|
+
debugDevice('Attempting to clear input with WebDriver Clear API');
|
|
12551
|
+
const cleared = await this.wdaBackend.clearActiveElement();
|
|
12552
|
+
cleared ? debugDevice('Successfully cleared input with WebDriver Clear API') : debugDevice('WebDriver Clear API returned false (no active element or clear failed)');
|
|
12521
12553
|
}
|
|
12522
12554
|
async url() {
|
|
12523
12555
|
return '';
|
package/dist/lib/index.js
CHANGED
|
@@ -188,6 +188,49 @@ class IOSWebDriverClient extends webdriver_namespaceObject.WebDriverClient {
|
|
|
188
188
|
debugIOS(`Warning: Key "${key}" is not supported on iOS platform`);
|
|
189
189
|
throw new Error(`Key "${key}" is not supported on iOS platform`);
|
|
190
190
|
}
|
|
191
|
+
async getActiveElement() {
|
|
192
|
+
this.ensureSession();
|
|
193
|
+
debugIOS('Getting active element');
|
|
194
|
+
try {
|
|
195
|
+
var _response_value, _response_value1;
|
|
196
|
+
const response = await this.makeRequest('GET', `/session/${this.sessionId}/element/active`);
|
|
197
|
+
const elementId = (null == (_response_value = response.value) ? void 0 : _response_value.ELEMENT) || (null == (_response_value1 = response.value) ? void 0 : _response_value1['element-6066-11e4-a52e-4f735466cecf']) || response.ELEMENT || response['element-6066-11e4-a52e-4f735466cecf'];
|
|
198
|
+
if (elementId) {
|
|
199
|
+
debugIOS(`Got active element ID: ${elementId}`);
|
|
200
|
+
return elementId;
|
|
201
|
+
}
|
|
202
|
+
debugIOS('No active element found');
|
|
203
|
+
return null;
|
|
204
|
+
} catch (error) {
|
|
205
|
+
debugIOS(`Failed to get active element: ${error}`);
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async clearElement(elementId) {
|
|
210
|
+
this.ensureSession();
|
|
211
|
+
debugIOS(`Clearing element: ${elementId}`);
|
|
212
|
+
try {
|
|
213
|
+
await this.makeRequest('POST', `/session/${this.sessionId}/element/${elementId}/clear`);
|
|
214
|
+
debugIOS('Element cleared successfully');
|
|
215
|
+
} catch (error) {
|
|
216
|
+
debugIOS(`Failed to clear element: ${error}`);
|
|
217
|
+
throw new Error(`Failed to clear element: ${error}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async clearActiveElement() {
|
|
221
|
+
try {
|
|
222
|
+
const elementId = await this.getActiveElement();
|
|
223
|
+
if (!elementId) {
|
|
224
|
+
debugIOS('No active element to clear');
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
await this.clearElement(elementId);
|
|
228
|
+
return true;
|
|
229
|
+
} catch (error) {
|
|
230
|
+
debugIOS(`Failed to clear active element: ${error}`);
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
191
234
|
normalizeKeyName(key) {
|
|
192
235
|
return key.charAt(0).toUpperCase() + key.slice(1).toLowerCase();
|
|
193
236
|
}
|
|
@@ -347,7 +390,6 @@ function _define_property(obj, key, value) {
|
|
|
347
390
|
return obj;
|
|
348
391
|
}
|
|
349
392
|
const debugDevice = (0, logger_namespaceObject.getDebug)('ios:device');
|
|
350
|
-
const BackspaceChar = '\u0008';
|
|
351
393
|
class IOSDevice {
|
|
352
394
|
actionSpace() {
|
|
353
395
|
const defaultActions = [
|
|
@@ -556,19 +598,9 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
|
|
|
556
598
|
if (!element) return;
|
|
557
599
|
await this.tap(element.center[0], element.center[1]);
|
|
558
600
|
await (0, utils_namespaceObject.sleep)(100);
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
await this.wdaBackend.typeText(BackspaceChar);
|
|
563
|
-
} catch (error2) {
|
|
564
|
-
debugDevice(`Method 1 failed, trying method 2: ${error2}`);
|
|
565
|
-
try {
|
|
566
|
-
const backspaces = Array(100).fill(BackspaceChar).join('');
|
|
567
|
-
await this.wdaBackend.typeText(backspaces);
|
|
568
|
-
} catch (error3) {
|
|
569
|
-
debugDevice(`All clear methods failed: ${error3}`);
|
|
570
|
-
}
|
|
571
|
-
}
|
|
601
|
+
debugDevice('Attempting to clear input with WebDriver Clear API');
|
|
602
|
+
const cleared = await this.wdaBackend.clearActiveElement();
|
|
603
|
+
cleared ? debugDevice('Successfully cleared input with WebDriver Clear API') : debugDevice('WebDriver Clear API returned false (no active element or clear failed)');
|
|
572
604
|
}
|
|
573
605
|
async url() {
|
|
574
606
|
return '';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -114,6 +114,21 @@ export declare class IOSWebDriverClient extends WebDriverClient {
|
|
|
114
114
|
pressHomeButton(): Promise<void>;
|
|
115
115
|
appSwitcher(): Promise<void>;
|
|
116
116
|
pressKey(key: string): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Get the currently focused element's WebDriver ID
|
|
119
|
+
* @returns WebDriver element ID or null if no element is focused
|
|
120
|
+
*/
|
|
121
|
+
getActiveElement(): Promise<string | null>;
|
|
122
|
+
/**
|
|
123
|
+
* Clear an element using WebDriver's clear endpoint
|
|
124
|
+
* @param elementId WebDriver element ID
|
|
125
|
+
*/
|
|
126
|
+
clearElement(elementId: string): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Clear the currently focused input field using WebDriver Clear API
|
|
129
|
+
* @returns true if successful, false otherwise
|
|
130
|
+
*/
|
|
131
|
+
clearActiveElement(): Promise<boolean>;
|
|
117
132
|
private normalizeKeyName;
|
|
118
133
|
dismissKeyboard(keyNames?: string[]): Promise<boolean>;
|
|
119
134
|
typeText(text: string): Promise<void>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/ios",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.10",
|
|
4
4
|
"description": "iOS automation library for Midscene",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iOS UI automation",
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@inquirer/prompts": "^7.8.6",
|
|
40
40
|
"open": "10.1.0",
|
|
41
|
-
"@midscene/
|
|
42
|
-
"@midscene/
|
|
43
|
-
"@midscene/webdriver": "0.30.
|
|
41
|
+
"@midscene/shared": "0.30.10",
|
|
42
|
+
"@midscene/core": "0.30.10",
|
|
43
|
+
"@midscene/webdriver": "0.30.10"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@rslib/core": "^0.11.2",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"typescript": "^5.8.3",
|
|
50
50
|
"tsx": "^4.19.2",
|
|
51
51
|
"vitest": "3.0.5",
|
|
52
|
-
"@midscene/playground": "0.30.
|
|
52
|
+
"@midscene/playground": "0.30.10"
|
|
53
53
|
},
|
|
54
54
|
"license": "MIT",
|
|
55
55
|
"scripts": {
|
package/static/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html><head><link rel="icon" href="/favicon.ico"><title>Midscene Playground</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script defer src="/static/js/lib-react.f566a9ed.js"></script><script defer src="/static/js/931.dc961e99.js"></script><script defer src="/static/js/index.
|
|
1
|
+
<!doctype html><html><head><link rel="icon" href="/favicon.ico"><title>Midscene Playground</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script defer src="/static/js/lib-react.f566a9ed.js"></script><script defer src="/static/js/931.dc961e99.js"></script><script defer src="/static/js/index.2caaacaf.js"></script><link href="/static/css/index.44466eb4.css" rel="stylesheet"></head><body><div id="root"></div></body></html>
|