appium-cdp-driver 1.0.3 → 1.0.4
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 +4 -4
- package/build/scripts/duckduckgo.js +100 -0
- package/build/scripts/opera.js +29 -8
- package/build/src/adb.js +34 -2
- package/build/src/commands/element.js +3 -2
- package/build/src/commands/find.js +16 -4
- package/build/src/driver.js +10 -3
- package/package.json +3 -2
- package/src/adb.js +32 -1
- package/src/commands/element.js +2 -1
- package/src/commands/find.js +15 -3
- package/src/driver.js +8 -2
package/README.md
CHANGED
|
@@ -30,10 +30,10 @@ LOCAL_PROTOCOL=true appium server -pa /wd/hub --use-drivers=cdp-driver
|
|
|
30
30
|
|
|
31
31
|
### Appium Capabilities
|
|
32
32
|
|
|
33
|
-
| Capability | Required | Type | Description
|
|
34
|
-
| ----------------------- | :------: | :----: |
|
|
35
|
-
| `appium:automationName` | + | string | Must be `CDP`
|
|
36
|
-
| `appium:browserName` | + | string | Must be `chrome` or `Terrace` or `opera` or `brave` |
|
|
33
|
+
| Capability | Required | Type | Description |
|
|
34
|
+
| ----------------------- | :------: | :----: | ------------------------------------------------------------------- |
|
|
35
|
+
| `appium:automationName` | + | string | Must be `CDP` |
|
|
36
|
+
| `appium:browserName` | + | string | Must be `chrome` or `Terrace` or `opera` or `brave` or `duckduckgo` |
|
|
37
37
|
|
|
38
38
|
### W3C Capabilities
|
|
39
39
|
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const appium_uiautomator2_driver_1 = require("appium-uiautomator2-driver");
|
|
17
|
+
const appium_adb_1 = require("appium-adb");
|
|
18
|
+
const logger_js_1 = __importDefault(require("../src/logger.js"));
|
|
19
|
+
const asyncbox_1 = require("asyncbox");
|
|
20
|
+
const START_APP_WAIT_DURATION = 60000;
|
|
21
|
+
const duckduckgo = {
|
|
22
|
+
pkg: 'com.duckduckgo.mobile.android',
|
|
23
|
+
activity: 'com.duckduckgo.app.browser.BrowserActivity',
|
|
24
|
+
};
|
|
25
|
+
const common = {
|
|
26
|
+
waitDuration: START_APP_WAIT_DURATION,
|
|
27
|
+
optionalIntentArguments: '-d www.appium.io',
|
|
28
|
+
};
|
|
29
|
+
function skipWelcomeDuckDuckGo() {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
const adb = yield appium_adb_1.ADB.createADB();
|
|
32
|
+
yield adb.adbExec(['shell', 'pm', 'clear', 'com.duckduckgo.mobile.android']);
|
|
33
|
+
const driver = new appium_uiautomator2_driver_1.AndroidUiautomator2Driver();
|
|
34
|
+
const caps = {
|
|
35
|
+
platformName: "Android",
|
|
36
|
+
"appium:automationName": "UiAutomator2",
|
|
37
|
+
"appium:deviceName": "Android Device",
|
|
38
|
+
"appium:appPackage": "com.duckduckgo.mobile.android",
|
|
39
|
+
"appium:appActivity": "com.duckduckgo.app.browser.BrowserActivity",
|
|
40
|
+
};
|
|
41
|
+
try {
|
|
42
|
+
yield driver.createSession(null, {
|
|
43
|
+
alwaysMatch: caps,
|
|
44
|
+
firstMatch: [{}],
|
|
45
|
+
});
|
|
46
|
+
const activity = yield driver.getCurrentActivity();
|
|
47
|
+
logger_js_1.default.info(`Activity is ${activity}`);
|
|
48
|
+
if (activity.includes('BrowserActivity')) {
|
|
49
|
+
const findElementWithWaitForCondition = (strategy_1, selector_1, ...args_1) => __awaiter(this, [strategy_1, selector_1, ...args_1], void 0, function* (strategy, selector, timeout = 6000) {
|
|
50
|
+
try {
|
|
51
|
+
return yield (0, asyncbox_1.waitForCondition)(() => __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
try {
|
|
53
|
+
logger_js_1.default.info(`Attempting to find element (${strategy}: ${selector})`);
|
|
54
|
+
const element = yield driver.findElement(strategy, selector);
|
|
55
|
+
logger_js_1.default.info(`Successfully found element (${strategy}: ${selector})`);
|
|
56
|
+
return element;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Return false to continue waiting
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}), {
|
|
63
|
+
waitMs: timeout,
|
|
64
|
+
intervalMs: 1000,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
throw new Error(`Failed to find element (${strategy}: ${selector}) within ${timeout}ms timeout: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
let attempt = 0;
|
|
72
|
+
let found = false;
|
|
73
|
+
const MAX_RETRIES = 3;
|
|
74
|
+
while (attempt < MAX_RETRIES && !found) {
|
|
75
|
+
try {
|
|
76
|
+
const dismissButton = yield findElementWithWaitForCondition('id', 'com.duckduckgo.mobile.android:id/bottomSheetPromoSecondaryButton');
|
|
77
|
+
logger_js_1.default.info(`Dismiss button found: ${JSON.stringify(dismissButton, null, 2)} in attempt ${attempt}`);
|
|
78
|
+
yield driver.click(dismissButton.ELEMENT);
|
|
79
|
+
found = true;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
logger_js_1.default.info(`Dismiss button not found, retrying after opening a url...`);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
yield adb.shell(['am', 'start', '-a', 'android.intent.action.VIEW', '-d', 'https://www.appium.io', duckduckgo.pkg]);
|
|
86
|
+
attempt++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
yield driver.deleteSession();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
+
yield skipWelcomeDuckDuckGo();
|
|
98
|
+
process.exit(0);
|
|
99
|
+
}))();
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVja2R1Y2tnby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NjcmlwdHMvZHVja2R1Y2tnby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQSwyRUFBdUU7QUFDdkUsMkNBQWlDO0FBQ2pDLGlFQUFtQztBQUNuQyx1Q0FBNEM7QUFFNUMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQUc7SUFDakIsR0FBRyxFQUFFLCtCQUErQjtJQUNwQyxRQUFRLEVBQUUsNENBQTRDO0NBQ3ZELENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRztJQUNiLFlBQVksRUFBRSx1QkFBdUI7SUFDckMsdUJBQXVCLEVBQUUsa0JBQWtCO0NBQzVDLENBQUM7QUFFRixTQUFlLHFCQUFxQjs7UUFDbEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxnQkFBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLCtCQUErQixDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLE1BQU0sR0FBRyxJQUFJLHNEQUF5QixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUc7WUFDWCxZQUFZLEVBQUUsU0FBUztZQUN2Qix1QkFBdUIsRUFBRSxjQUFjO1lBQ3ZDLG1CQUFtQixFQUFFLGdCQUFnQjtZQUNyQyxtQkFBbUIsRUFBRSwrQkFBK0I7WUFDcEQsb0JBQW9CLEVBQUUsNENBQTRDO1NBQ25FLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO2dCQUMvQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2pCLENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7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
|
package/build/scripts/opera.js
CHANGED
|
@@ -89,15 +89,36 @@ function skipWelcomeOpera() {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
const skipAgainButton = yield findElementWithWaitForCondition('id', 'com.opera.browser:id/skip_button');
|
|
92
|
-
|
|
92
|
+
attempt = 0;
|
|
93
|
+
found = false;
|
|
94
|
+
while (attempt < MAX_RETRIES && !found) {
|
|
95
|
+
yield driver.click(skipAgainButton.ELEMENT);
|
|
96
|
+
try {
|
|
97
|
+
yield findElementWithWaitForCondition('xpath', '//android.widget.Button[@text="Allow"]');
|
|
98
|
+
found = true;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logger_js_1.default.info(`Enable notifications text not found, retrying skip...`);
|
|
102
|
+
attempt++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
93
105
|
const allowButton = yield findElementWithWaitForCondition('xpath', '//android.widget.Button[@text="Allow"]');
|
|
94
106
|
yield driver.click(allowButton.ELEMENT);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
107
|
+
attempt = 0;
|
|
108
|
+
found = false;
|
|
109
|
+
while (attempt < MAX_RETRIES && !found) {
|
|
110
|
+
try {
|
|
111
|
+
const doneButton = yield findElementWithWaitForCondition('id', 'com.opera.browser:id/positive_button', 8000);
|
|
112
|
+
yield driver.click(doneButton.ELEMENT);
|
|
113
|
+
found = true;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
logger_js_1.default.info(`Done button not found, retrying after opening a url...`);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
yield adb.shell(['am', 'start', '-a', 'android.intent.action.VIEW', '-d', 'https://www.appium.io', opera.pkg]);
|
|
120
|
+
attempt++;
|
|
121
|
+
}
|
|
101
122
|
}
|
|
102
123
|
}
|
|
103
124
|
}
|
|
@@ -110,4 +131,4 @@ function skipWelcomeOpera() {
|
|
|
110
131
|
yield skipWelcomeOpera();
|
|
111
132
|
process.exit(0);
|
|
112
133
|
}))();
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zY3JpcHRzL29wZXJhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUVBLDJFQUF1RTtBQUN2RSwyQ0FBaUM7QUFDakMsaUVBQW1DO0FBQ25DLHVDQUE0QztBQUU1QyxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxNQUFNLEtBQUssR0FBRztJQUNaLEdBQUcsRUFBRSxtQkFBbUI7SUFDeEIsUUFBUSxFQUFFLG1DQUFtQztDQUM5QyxDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQUc7SUFDYixZQUFZLEVBQUUsdUJBQXVCO0lBQ3JDLHVCQUF1QixFQUFFLGtCQUFrQjtDQUM1QyxDQUFDO0FBRUYsU0FBZSxnQkFBZ0I7O1FBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDakUsdURBQXVEO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksc0RBQXlCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRztZQUNYLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLHVCQUF1QixFQUFFLGNBQWM7WUFDdkMsbUJBQW1CLEVBQUUsZ0JBQWdCO1lBQ3JDLG1CQUFtQixFQUFFLG1CQUFtQjtZQUN4QyxvQkFBb0IsRUFBRSxtQ0FBbUM7U0FDMUQsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQy9CLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FB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
|
package/build/src/adb.js
CHANGED
|
@@ -26,6 +26,7 @@ const DEVTOOLS_SOCKET_MAP = {
|
|
|
26
26
|
chrome: 'chrome_devtools_remote',
|
|
27
27
|
brave: 'chrome_devtools_remote',
|
|
28
28
|
opera: 'com.opera.browser.devtools',
|
|
29
|
+
duckduckgo: 'webview_devtools_remote',
|
|
29
30
|
terrance: 'com.sec.android.app.sbrowser_devtools_remote',
|
|
30
31
|
};
|
|
31
32
|
function getAdb() {
|
|
@@ -60,7 +61,16 @@ function requireSdkRoot() {
|
|
|
60
61
|
function adbExec() {
|
|
61
62
|
return __awaiter(this, arguments, void 0, function* (browser = 'chrome') {
|
|
62
63
|
let freePort = yield (0, get_port_1.default)();
|
|
63
|
-
|
|
64
|
+
let devtoolsSocket = DEVTOOLS_SOCKET_MAP[browser] || `${browser}_devtools_remote`;
|
|
65
|
+
if (browser === 'duckduckgo') {
|
|
66
|
+
const pid = yield getDuckDuckGoPid(browser);
|
|
67
|
+
if (pid) {
|
|
68
|
+
devtoolsSocket = `webview_devtools_remote_${pid}`;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw new Error(`Unable to get PID for ${browser}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
64
74
|
yield adb.adbExec([
|
|
65
75
|
'forward',
|
|
66
76
|
`tcp:${freePort}`,
|
|
@@ -69,6 +79,20 @@ function adbExec() {
|
|
|
69
79
|
return freePort;
|
|
70
80
|
});
|
|
71
81
|
}
|
|
82
|
+
function getDuckDuckGoPid() {
|
|
83
|
+
return __awaiter(this, arguments, void 0, function* (browser = 'duckduckgo') {
|
|
84
|
+
const packageName = 'com.duckduckgo.mobile.android';
|
|
85
|
+
try {
|
|
86
|
+
const output = yield adb.adbExec(['shell', 'pidof', packageName]);
|
|
87
|
+
const pid = output.trim();
|
|
88
|
+
return pid || null;
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
console.error(`Unable to get PID for ${browser}:`, err.message);
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
72
96
|
function startApplication() {
|
|
73
97
|
return __awaiter(this, arguments, void 0, function* (browser = 'chrome') {
|
|
74
98
|
const common = {
|
|
@@ -91,6 +115,10 @@ function startApplication() {
|
|
|
91
115
|
pkg: 'com.opera.browser',
|
|
92
116
|
activity: 'com.opera.android.BrowserActivity',
|
|
93
117
|
};
|
|
118
|
+
const duckduckgo = {
|
|
119
|
+
pkg: 'com.duckduckgo.mobile.android',
|
|
120
|
+
activity: 'com.duckduckgo.app.browser.BrowserActivity',
|
|
121
|
+
};
|
|
94
122
|
if (browser === 'chrome') {
|
|
95
123
|
logger_1.default.info(`Starting Chrome`);
|
|
96
124
|
yield adb.startApp(Object.assign({}, chrome, common));
|
|
@@ -107,6 +135,10 @@ function startApplication() {
|
|
|
107
135
|
logger_1.default.info(`Starting Opera`);
|
|
108
136
|
yield adb.startApp(Object.assign({}, opera, common));
|
|
109
137
|
}
|
|
138
|
+
else if (browser === 'duckduckgo') {
|
|
139
|
+
logger_1.default.info(`Starting DuckDuckGo`);
|
|
140
|
+
yield adb.startApp(Object.assign({}, duckduckgo, common));
|
|
141
|
+
}
|
|
110
142
|
});
|
|
111
143
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWdCQSx3QkFRQztBQUVELHdDQXNCQztBQUVELDBCQW9CQztBQWNELDRDQThDQztBQWxJRCwyQ0FBb0Q7QUFDcEQsNkNBQXFDO0FBQ3JDLHdEQUErQjtBQUMvQixzREFBMkI7QUFFM0IsSUFBSSxHQUFHLENBQUM7QUFDUixNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsS0FBSyxFQUFFLHdCQUF3QjtJQUMvQixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFVBQVUsRUFBRSx5QkFBeUI7SUFDckMsUUFBUSxFQUFFLDhDQUE4QztDQUN6RCxDQUFDO0FBRUYsU0FBc0IsTUFBTTs7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULEdBQUcsR0FBRyxNQUFNLGdCQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztDQUFBO0FBRUQsU0FBc0IsY0FBYzs7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBaUIsR0FBRSxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUNWLG1GQUFtRixDQUFDO1FBQ3RGLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLE1BQU0sRUFBRSxDQUN6RixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYixnQ0FBZ0MsT0FBTyw4Q0FBOEMsTUFBTSxFQUFFLENBQzlGLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLHlCQUF5QixPQUFPLHVCQUF1QixNQUFNLEVBQUUsQ0FDaEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQUE7QUFFRCxTQUFzQixPQUFPO3lEQUFDLE9BQU8sR0FBRyxRQUFRO1FBQzlDLElBQUksUUFBUSxHQUFHLE1BQU0sSUFBQSxrQkFBTyxHQUFFLENBQUM7UUFDL0IsSUFBSSxjQUFjLEdBQ2hCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxrQkFBa0IsQ0FBQztRQUUvRCxJQUFJLE9BQU8sS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUM3QixNQUFNLEdBQUcsR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsY0FBYyxHQUFHLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUNoQixTQUFTO1lBQ1QsT0FBTyxRQUFRLEVBQUU7WUFDakIsaUJBQWlCLGNBQWMsRUFBRTtTQUNsQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQUE7QUFFRCxTQUFlLGdCQUFnQjt5REFBQyxPQUFPLEdBQUcsWUFBWTtRQUNwRCxNQUFNLFdBQVcsR0FBRywrQkFBK0IsQ0FBQztRQUNwRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0NBQUE7QUFFRCxTQUFzQixnQkFBZ0I7eURBQUMsT0FBTyxHQUFHLFFBQVE7UUFDdkQsTUFBTSxNQUFNLEdBQUc7WUFDYixZQUFZLEVBQUUsdUJBQXVCO1lBQ3JDLHVCQUF1QixFQUFFLGtCQUFrQjtTQUM1QyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUc7WUFDYixHQUFHLEVBQUUsb0JBQW9CO1lBQ3pCLFFBQVEsRUFBRSxxQ0FBcUM7U0FDaEQsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHO1lBQ2YsR0FBRyxFQUFFLDhCQUE4QjtZQUNuQyxRQUFRLEVBQUUsbURBQW1EO1NBQzlELENBQUM7UUFFRixNQUFNLEtBQUssR0FBRztZQUNaLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsUUFBUSxFQUFFLHFDQUFxQztTQUNoRCxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLEVBQUUsbUJBQW1CO1lBQ3hCLFFBQVEsRUFBRSxtQ0FBbUM7U0FDOUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEdBQUcsRUFBRSwrQkFBK0I7WUFDcEMsUUFBUSxFQUFFLDRDQUE0QztTQUN2RCxDQUFDO1FBRUYsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekIsZ0JBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1QixNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLGdCQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDOUIsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMvQixnQkFBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDL0IsZ0JBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzQixNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3BDLGdCQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDaEMsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0NBQUEifQ==
|
|
@@ -47,7 +47,8 @@ commands.elementEnabled = function elementEnabled(elementId) {
|
|
|
47
47
|
commands.setValue = function setValue(value, elementId) {
|
|
48
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49
49
|
const element = find_1.elementCache[elementId];
|
|
50
|
-
|
|
50
|
+
const input = Array.isArray(value) ? value.join('') : value;
|
|
51
|
+
yield (0, taiko_1.write)(input, (0, taiko_1.into)(element));
|
|
51
52
|
});
|
|
52
53
|
};
|
|
53
54
|
commands.clear = function clear(elementId) {
|
|
@@ -81,4 +82,4 @@ commands.getName = function getName(elementId) {
|
|
|
81
82
|
};
|
|
82
83
|
Object.assign(extensions, commands, helpers);
|
|
83
84
|
exports.default = extensions;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFtRDtBQUNuRCxpQ0FBc0M7QUFFdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQTJEVCw0QkFBUTtBQUFFLDBCQUFPO0FBekQxQixTQUFlLE1BQU0sQ0FBQyxPQUFPOztRQUMzQixNQUFNLElBQUEsYUFBSyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUNELFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBZSxLQUFLLENBQUMsU0FBUzs7UUFDN0MsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxPQUFPLEdBQUcsU0FBZSxPQUFPLENBQUMsU0FBUzs7UUFDakQsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxTQUFlLGdCQUFnQixDQUFDLFNBQVM7O1FBQ25FLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsY0FBYyxHQUFHLFNBQWUsY0FBYyxDQUFDLFNBQVM7O1FBQy9ELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLENBQUEsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQztJQUNyQyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBZSxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVM7O1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzVELE1BQU0sSUFBQSxhQUFLLEVBQUMsS0FBSyxFQUFFLElBQUEsWUFBSSxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQWUsS0FBSyxDQUFDLFNBQVM7O1FBQzdDLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFBLGFBQUssRUFBQyxFQUFFLEVBQUUsSUFBQSxZQUFJLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxZQUFZLEdBQUcsU0FBZSxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVM7O1FBQ2xFLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsY0FBYyxHQUFHLFNBQWUsY0FBYyxDQUFDLFNBQVM7O1FBQy9ELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUV6QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0QsT0FBTyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUFBLENBQUE7QUFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLFNBQWUsT0FBTyxDQUFDLFNBQVM7O1FBQ2pELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUUxQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUU3QyxrQkFBZSxVQUFVLENBQUMifQ==
|
|
@@ -31,15 +31,27 @@ helpers.findElOrEls = function findElOrEls(strategy, selector, mult, context) {
|
|
|
31
31
|
logger_1.default.info(`Selector is ${selector}`);
|
|
32
32
|
logger_1.default.info(`Mult is ${mult}`);
|
|
33
33
|
logger_1.default.info(`Context is ${context}`);
|
|
34
|
-
const elStrategy =
|
|
34
|
+
// const elStrategy = $(selector);
|
|
35
|
+
let elStrategy;
|
|
36
|
+
switch (strategy) {
|
|
37
|
+
case 'id':
|
|
38
|
+
elStrategy = (0, taiko_1.$)(`#${selector}`);
|
|
39
|
+
break;
|
|
40
|
+
case 'class':
|
|
41
|
+
elStrategy = (0, taiko_1.$)(`.${selector}`);
|
|
42
|
+
default:
|
|
43
|
+
elStrategy = (0, taiko_1.$)(selector);
|
|
44
|
+
}
|
|
35
45
|
if ((yield elStrategy.exists()) && !mult) {
|
|
36
46
|
const elementId = getUUID();
|
|
37
47
|
elementCache[elementId] = elStrategy;
|
|
38
48
|
return { [constants_1.W3C_ELEMENT_KEY]: elementId };
|
|
39
49
|
}
|
|
40
50
|
else if (mult) {
|
|
41
|
-
|
|
42
|
-
(
|
|
51
|
+
const foundEls = yield elStrategy.elements();
|
|
52
|
+
logger_1.default.info(`Found ${foundEls.length} elements using strategy: ${strategy}`);
|
|
53
|
+
const els = [];
|
|
54
|
+
foundEls.forEach((element) => {
|
|
43
55
|
const elementId = getUUID();
|
|
44
56
|
elementCache[elementId] = element;
|
|
45
57
|
els.push({ ELEMENT: elementId });
|
|
@@ -63,4 +75,4 @@ commands.findElements = function findElements(strategy, selector) {
|
|
|
63
75
|
};
|
|
64
76
|
Object.assign(extensions, commands, helpers);
|
|
65
77
|
exports.default = extensions;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUE2QztBQUM3QyxpQ0FBMEI7QUFDMUIsdURBQTRCO0FBQzVCLDZDQUF1QztBQUN2Qyx1RUFBMEU7QUFFMUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsRUFDZixZQUFZLEdBQUcsRUFBRSxDQUFDO0FBdURYLDRCQUFRO0FBQUUsMEJBQU87QUFBRSxvQ0FBWTtBQXJEeEMsU0FBUyxPQUFPO0lBQ2QsT0FBTyxjQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkIsQ0FBQztBQUVELE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBZSxXQUFXLENBQzlDLFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLE9BQU87O1FBRVAsZ0JBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLGdCQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwQyxnQkFBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUIsZ0JBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLGtDQUFrQztRQUNsQyxJQUFJLFVBQVUsQ0FBQztRQUNmLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxJQUFJO2dCQUNQLFVBQVUsR0FBRyxJQUFBLFNBQUMsRUFBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsVUFBVSxHQUFHLElBQUEsU0FBQyxFQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqQztnQkFDRSxVQUFVLEdBQUcsSUFBQSxTQUFDLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekMsTUFBTSxTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDNUIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUNyQyxPQUFPLEVBQUUsQ0FBQywyQkFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0MsZ0JBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRLENBQUMsTUFBTSw2QkFBNkIsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMxRSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDZixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLG9CQUFNLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUM7Q0FBQSxDQUFDO0FBRUYsUUFBUSxDQUFDLFdBQVcsR0FBRyxTQUFlLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUTs7UUFDbEUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsWUFBWSxHQUFHLFNBQWUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFROztRQUNwRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUU3QyxrQkFBZSxVQUFVLENBQUMifQ==
|
package/build/src/driver.js
CHANGED
|
@@ -45,8 +45,15 @@ class AppiumCDPDriver extends base_driver_1.BaseDriver {
|
|
|
45
45
|
const res = yield _super.createSession.call(this, w3cCaps);
|
|
46
46
|
const browser = w3cCaps.alwaysMatch['browserName'];
|
|
47
47
|
yield (0, adb_1.getAdb)();
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
let port;
|
|
49
|
+
if (browser === 'duckduckgo') {
|
|
50
|
+
yield (0, adb_1.startApplication)(browser);
|
|
51
|
+
port = yield (0, adb_1.adbExec)(browser);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
port = yield (0, adb_1.adbExec)(browser);
|
|
55
|
+
yield (0, adb_1.startApplication)(browser);
|
|
56
|
+
}
|
|
50
57
|
logger_1.default.info('Browser opened');
|
|
51
58
|
// Wait a bit longer for Opera to initialize its CDP interface
|
|
52
59
|
yield new Promise((resolve) => setTimeout(resolve, 3000));
|
|
@@ -97,4 +104,4 @@ class AppiumCDPDriver extends base_driver_1.BaseDriver {
|
|
|
97
104
|
}
|
|
98
105
|
exports.AppiumCDPDriver = AppiumCDPDriver;
|
|
99
106
|
Object.assign(AppiumCDPDriver.prototype, commands_1.default);
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaXZlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsK0JBQTBEO0FBQzFELGlDQUFxRDtBQUNyRCwwREFBa0M7QUFDbEMsc0RBQTJCO0FBQzNCLDREQUErQjtBQUMvQiw4REFBZ0M7QUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sZUFBZ0IsU0FBUSx3QkFBVTtJQUN0QyxZQUFZLElBQUk7UUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlOzs7OztZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBQSxpQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFNLGFBQWEsWUFBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBQSxZQUFNLEdBQUUsQ0FBQztZQUNmLElBQUksSUFBSSxDQUFDO1lBQ1QsSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBQSxzQkFB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
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"appium",
|
|
6
6
|
"chrome-dev-tools"
|
|
7
7
|
],
|
|
8
|
-
"version": "1.0.
|
|
8
|
+
"version": "1.0.4",
|
|
9
9
|
"author": "",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"repository": {
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"mainClass": "AppiumCDPDriver",
|
|
34
34
|
"scripts": {
|
|
35
35
|
"skip-welcome-opera": "./build/scripts/opera.js",
|
|
36
|
-
"skip-welcome-brave": "./build/scripts/brave.js"
|
|
36
|
+
"skip-welcome-brave": "./build/scripts/brave.js",
|
|
37
|
+
"skip-welcome-duckduckgo": "./build/scripts/duckduckgo.js"
|
|
37
38
|
}
|
|
38
39
|
},
|
|
39
40
|
"scripts": {
|
package/src/adb.js
CHANGED
|
@@ -10,6 +10,7 @@ const DEVTOOLS_SOCKET_MAP = {
|
|
|
10
10
|
chrome: 'chrome_devtools_remote',
|
|
11
11
|
brave: 'chrome_devtools_remote',
|
|
12
12
|
opera: 'com.opera.browser.devtools',
|
|
13
|
+
duckduckgo: 'webview_devtools_remote',
|
|
13
14
|
terrance: 'com.sec.android.app.sbrowser_devtools_remote',
|
|
14
15
|
};
|
|
15
16
|
|
|
@@ -49,8 +50,18 @@ export async function requireSdkRoot() {
|
|
|
49
50
|
|
|
50
51
|
export async function adbExec(browser = 'chrome') {
|
|
51
52
|
let freePort = await getPort();
|
|
52
|
-
|
|
53
|
+
let devtoolsSocket =
|
|
53
54
|
DEVTOOLS_SOCKET_MAP[browser] || `${browser}_devtools_remote`;
|
|
55
|
+
|
|
56
|
+
if (browser === 'duckduckgo') {
|
|
57
|
+
const pid = await getDuckDuckGoPid(browser);
|
|
58
|
+
if (pid) {
|
|
59
|
+
devtoolsSocket = `webview_devtools_remote_${pid}`;
|
|
60
|
+
} else {
|
|
61
|
+
throw new Error(`Unable to get PID for ${browser}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
54
65
|
await adb.adbExec([
|
|
55
66
|
'forward',
|
|
56
67
|
`tcp:${freePort}`,
|
|
@@ -58,6 +69,18 @@ export async function adbExec(browser = 'chrome') {
|
|
|
58
69
|
]);
|
|
59
70
|
return freePort;
|
|
60
71
|
}
|
|
72
|
+
|
|
73
|
+
async function getDuckDuckGoPid(browser = 'duckduckgo') {
|
|
74
|
+
const packageName = 'com.duckduckgo.mobile.android';
|
|
75
|
+
try {
|
|
76
|
+
const output = await adb.adbExec(['shell', 'pidof', packageName]);
|
|
77
|
+
const pid = output.trim();
|
|
78
|
+
return pid || null;
|
|
79
|
+
} catch (err) {
|
|
80
|
+
console.error(`Unable to get PID for ${browser}:`, err.message);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
61
84
|
|
|
62
85
|
export async function startApplication(browser = 'chrome') {
|
|
63
86
|
const common = {
|
|
@@ -84,6 +107,11 @@ export async function startApplication(browser = 'chrome') {
|
|
|
84
107
|
activity: 'com.opera.android.BrowserActivity',
|
|
85
108
|
};
|
|
86
109
|
|
|
110
|
+
const duckduckgo = {
|
|
111
|
+
pkg: 'com.duckduckgo.mobile.android',
|
|
112
|
+
activity: 'com.duckduckgo.app.browser.BrowserActivity',
|
|
113
|
+
};
|
|
114
|
+
|
|
87
115
|
if (browser === 'chrome') {
|
|
88
116
|
log.info(`Starting Chrome`);
|
|
89
117
|
await adb.startApp(Object.assign({}, chrome, common));
|
|
@@ -96,5 +124,8 @@ export async function startApplication(browser = 'chrome') {
|
|
|
96
124
|
} else if (browser === 'opera') {
|
|
97
125
|
log.info(`Starting Opera`);
|
|
98
126
|
await adb.startApp(Object.assign({}, opera, common));
|
|
127
|
+
} else if (browser === 'duckduckgo') {
|
|
128
|
+
log.info(`Starting DuckDuckGo`);
|
|
129
|
+
await adb.startApp(Object.assign({}, duckduckgo, common));
|
|
99
130
|
}
|
|
100
131
|
}
|
package/src/commands/element.js
CHANGED
|
@@ -30,7 +30,8 @@ commands.elementEnabled = async function elementEnabled(elementId) {
|
|
|
30
30
|
|
|
31
31
|
commands.setValue = async function setValue(value, elementId) {
|
|
32
32
|
const element = elementCache[elementId];
|
|
33
|
-
|
|
33
|
+
const input = Array.isArray(value) ? value.join('') : value;
|
|
34
|
+
await write(input, into(element));
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
commands.clear = async function clear(elementId) {
|
package/src/commands/find.js
CHANGED
|
@@ -23,14 +23,26 @@ helpers.findElOrEls = async function findElOrEls(
|
|
|
23
23
|
log.info(`Selector is ${selector}`);
|
|
24
24
|
log.info(`Mult is ${mult}`);
|
|
25
25
|
log.info(`Context is ${context}`);
|
|
26
|
-
const elStrategy =
|
|
26
|
+
// const elStrategy = $(selector);
|
|
27
|
+
let elStrategy;
|
|
28
|
+
switch (strategy) {
|
|
29
|
+
case 'id':
|
|
30
|
+
elStrategy = $(`#${selector}`);
|
|
31
|
+
break;
|
|
32
|
+
case 'class':
|
|
33
|
+
elStrategy = $(`.${selector}`);
|
|
34
|
+
default:
|
|
35
|
+
elStrategy = $(selector);
|
|
36
|
+
}
|
|
27
37
|
if ((await elStrategy.exists()) && !mult) {
|
|
28
38
|
const elementId = getUUID();
|
|
29
39
|
elementCache[elementId] = elStrategy;
|
|
30
40
|
return { [W3C_ELEMENT_KEY]: elementId };
|
|
31
41
|
} else if (mult) {
|
|
32
|
-
|
|
33
|
-
(
|
|
42
|
+
const foundEls = await elStrategy.elements();
|
|
43
|
+
log.info(`Found ${foundEls.length} elements using strategy: ${strategy}`);
|
|
44
|
+
const els = [];
|
|
45
|
+
foundEls.forEach((element) => {
|
|
34
46
|
const elementId = getUUID();
|
|
35
47
|
elementCache[elementId] = element;
|
|
36
48
|
els.push({ ELEMENT: elementId });
|
package/src/driver.js
CHANGED
|
@@ -27,8 +27,14 @@ class AppiumCDPDriver extends BaseDriver {
|
|
|
27
27
|
const res = await super.createSession(w3cCaps);
|
|
28
28
|
const browser = w3cCaps.alwaysMatch['browserName'];
|
|
29
29
|
await getAdb();
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
let port;
|
|
31
|
+
if (browser === 'duckduckgo') {
|
|
32
|
+
await startApplication(browser);
|
|
33
|
+
port = await adbExec(browser);
|
|
34
|
+
} else {
|
|
35
|
+
port = await adbExec(browser);
|
|
36
|
+
await startApplication(browser);
|
|
37
|
+
}
|
|
32
38
|
log.info('Browser opened');
|
|
33
39
|
// Wait a bit longer for Opera to initialize its CDP interface
|
|
34
40
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|