appium-cdp-driver 1.0.0-beta.3 → 1.0.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/README.md CHANGED
@@ -44,7 +44,7 @@ LOCAL_PROTOCOL=true appium server -pa /wd/hub --use-drivers=cdp-driver
44
44
  | [createWindow](src/commands/createWindow.js) | [here](https://www.w3.org/TR/webdriver/#dfn-new-window) | New Window | ❌ |
45
45
  | [deleteCookie](src/commands/deleteCookie.js) | [here](https://www.w3.org/TR/webdriver/#dfn-delete-cookie) | Delete Cookie | ✅ |
46
46
  | [deleteCookies](src/commands/deleteCookies.js) | [here](https://www.w3.org/TR/webdriver/#dfn-delete-all-cookies) | Delete All Cookies | ✅ |
47
- | [deleteSession](src/commands/deleteSession.js) | [here](https://www.w3.org/TR/webdriver/#dfn-delete-session) | Delete Session | |
47
+ | [deleteSession](src/commands/deleteSession.js) | [here](https://www.w3.org/TR/webdriver/#dfn-delete-session) | Delete Session | |
48
48
  | [elementDisplayed](src/commands/elementDisplayed.js) | [here](https://www.w3.org/TR/webdriver/#element-displayedness) | Is Element Displayed | ✅ |
49
49
  | [elementEnabled](src/commands/elementEnabled.js) | [here](https://www.w3.org/TR/webdriver/#dfn-is-element-enabled) | Is Element Enabled | ✅ |
50
50
  | [elementSelected](src/commands/elementSelected.js) | [here](https://www.w3.org/TR/webdriver/#dfn-is-element-selected) | Is Element Selected | ❌ |
@@ -52,20 +52,20 @@ LOCAL_PROTOCOL=true appium server -pa /wd/hub --use-drivers=cdp-driver
52
52
  | [executeAsync](src/commands/executeAsync.js) | [here](https://www.w3.org/TR/webdriver/#dfn-execute-async-script) | Execute Async Script | ❌ |
53
53
  | [findElOrEls](src/commands/findElOrEls.js) | [here](https://www.w3.org/TR/webdriver/#element-retrieval) | Find Elements | ✅ |
54
54
  | [forward](src/commands/forward.js) | [here](https://www.w3.org/TR/webdriver/#dfn-forward) | Forward | ✅ |
55
- | [fullScreenWindow](src/commands/fullScreenWindow.js) | [here](https://www.w3.org/TR/webdriver/#dfn-fullscreen-window) | Fullscreen Window | |
55
+ | [fullScreenWindow](src/commands/fullScreenWindow.js) | [here](https://www.w3.org/TR/webdriver/#dfn-fullscreen-window) | Fullscreen Window | Not supported |
56
56
  | [getAlertText](src/commands/getAlertText.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-alert-text) | Get Alert Text | ❌ |
57
- | [getAttribute](src/commands/getAttribute.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-attribute) | Get Element Attribute | |
57
+ | [getAttribute](src/commands/getAttribute.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-attribute) | Get Element Attribute | |
58
58
  | [getComputedLabel](src/commands/getComputedLabel.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-computed-label) | Get Computed Label | ❌ |
59
59
  | [getComputedRole](src/commands/getComputedRole.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-computed-role) | Get Computed Role | ❌ |
60
60
  | [getCookie](src/commands/getCookie.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-named-cookie) | Get Named Cookie | ✅ |
61
61
  | [getCookies](src/commands/getCookies.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-all-cookies) | Get All Cookies | ✅ |
62
62
  | [getCssProperty](src/commands/getCssProperty.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-css-value) | Get Element CSS Value | ❌ |
63
- | [getElementRect](src/commands/getElementRect.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-rect) | Get Element Rect | |
64
- | [getElementScreenshot](src/commands/getElementScreenshot.js) | [here](https://www.w3.org/TR/webdriver/#dfn-take-element-screenshot) | Take Element Screenshot | |
65
- | [getName](src/commands/getName.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-tag-name) | Get Element Tag Name | |
63
+ | [getElementRect](src/commands/getElementRect.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-rect) | Get Element Rect | |
64
+ | [getElementScreenshot](src/commands/getElementScreenshot.js) | [here](https://www.w3.org/TR/webdriver/#dfn-take-element-screenshot) | Take Element Screenshot | |
65
+ | [getName](src/commands/getName.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-tag-name) | Get Element Tag Name | |
66
66
  | [getPageSource](src/commands/getPageSource.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-page-source) | Get Page Source | ✅ |
67
67
  | [getProperty](src/commands/getProperty.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-property) | Get Element Property | ❌ |
68
- | [getScreenshot](src/commands/getScreenshot.js) | [here](https://www.w3.org/TR/webdriver/#dfn-take-screenshot) | Take Screenshot | |
68
+ | [getScreenshot](src/commands/getScreenshot.js) | [here](https://www.w3.org/TR/webdriver/#dfn-take-screenshot) | Take Screenshot | |
69
69
  | [getText](src/commands/getText.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-element-text) | Get Element Text | ✅ |
70
70
  | [getTimeouts](src/commands/getTimeouts.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-timeouts) | Get Timeouts | ❌ |
71
71
  | [getUrl](src/commands/url.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-current-url) | Get Current URL | ✅ |
@@ -81,7 +81,7 @@ LOCAL_PROTOCOL=true appium server -pa /wd/hub --use-drivers=cdp-driver
81
81
  | [postAcceptAlert](src/commands/postAcceptAlert.js) | [here](https://www.w3.org/TR/webdriver/#dfn-accept-alert) | Accept Alert | ❌ |
82
82
  | [postDismissAlert](src/commands/postDismissAlert.js) | [here](https://www.w3.org/TR/webdriver/#dfn-dismiss-alert) | Dismiss Alert | ❌ |
83
83
  | [printPage](src/commands/printPage.js) | [here](https://www.w3.org/TR/webdriver/#dfn-print-page) | Print Page | ❌ |
84
- | [refresh](src/commands/refresh.js) | [here](https://www.w3.org/TR/webdriver/#dfn-refresh) | Refresh | |
84
+ | [refresh](src/commands/refresh.js) | [here](https://www.w3.org/TR/webdriver/#dfn-refresh) | Refresh | |
85
85
  | [releaseActions](src/commands/releaseActions.js) | [here](https://www.w3.org/TR/webdriver/#dfn-release-actions) | Release Actions | ❌ |
86
86
  | [scriptTimeoutW3C](src/commands/scriptTimeoutW3C.js) | [here](https://www.w3.org/TR/webdriver/#dfn-set-timeouts) | Set Script Timeout | ❌ |
87
87
  | [setAlertText](src/commands/setAlertText.js) | [here](https://www.w3.org/TR/webdriver/#dfn-send-alert-text) | Send Alert Text | ❌ |
@@ -90,6 +90,6 @@ LOCAL_PROTOCOL=true appium server -pa /wd/hub --use-drivers=cdp-driver
90
90
  | [setUrl](src/commands/url.js) | [here](https://www.w3.org/TR/webdriver/#dfn-navigate-to) | Navigate To | ✅ |
91
91
  | [setValue](src/commands/setValue.js) | [here](https://www.w3.org/TR/webdriver/#dfn-element-send-keys) | Element Send Keys | ✅ |
92
92
  | [setWindow](src/commands/setWindow.js) | [here](https://www.w3.org/TR/webdriver/#dfn-switch-to-window) | Switch To Window | ❌ |
93
- | [setWindowRect](src/commands/setWindowRect.js) | [here](https://www.w3.org/TR/webdriver/#dfn-set-window-rect) | Set Window Rect | |
93
+ | [setWindowRect](src/commands/setWindowRect.js) | [here](https://www.w3.org/TR/webdriver/#dfn-set-window-rect) | Set Window Rect | Not supported |
94
94
  | [title](src/commands/title.js) | [here](https://www.w3.org/TR/webdriver/#dfn-get-title) | Get Title | ✅ |
95
- | [uploadFile](src/commands/uploadFile.js) | - | Upload File | |
95
+ | [uploadFile](src/commands/uploadFile.js) | - | Upload File | Not supported |
package/build/adb.js CHANGED
@@ -18,6 +18,12 @@ const support_1 = require("@appium/support");
18
18
  const get_port_1 = __importDefault(require("get-port"));
19
19
  let adb;
20
20
  const START_APP_WAIT_DURATION = 60000;
21
+ const DEVTOOLS_SOCKET_MAP = {
22
+ chrome: 'chrome_devtools_remote',
23
+ brave: 'chrome_devtools_remote',
24
+ opera: 'com.opera.browser.devtools',
25
+ terrance: 'com.sec.android.app.sbrowser_devtools_remote',
26
+ };
21
27
  function getAdb() {
22
28
  return __awaiter(this, void 0, void 0, function* () {
23
29
  try {
@@ -34,7 +40,7 @@ exports.getAdb = getAdb;
34
40
  function requireSdkRoot() {
35
41
  return __awaiter(this, void 0, void 0, function* () {
36
42
  const sdkRoot = (0, appium_adb_1.getSdkRootFromEnv)();
37
- const docMsg = "Read https://developer.android.com/studio/command-line/variables for more details";
43
+ const docMsg = 'Read https://developer.android.com/studio/command-line/variables for more details';
38
44
  if (_.isEmpty(sdkRoot)) {
39
45
  throw new Error(`Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported. ${docMsg}`);
40
46
  }
@@ -49,13 +55,14 @@ function requireSdkRoot() {
49
55
  });
50
56
  }
51
57
  exports.requireSdkRoot = requireSdkRoot;
52
- function adbExec(browser = "chrome") {
58
+ function adbExec(browser = 'chrome') {
53
59
  return __awaiter(this, void 0, void 0, function* () {
54
60
  let freePort = yield (0, get_port_1.default)();
61
+ const devtoolsSocket = DEVTOOLS_SOCKET_MAP[browser] || `${browser}_devtools_remote`;
55
62
  yield adb.adbExec([
56
- "forward",
63
+ 'forward',
57
64
  `tcp:${freePort}`,
58
- `localabstract:${browser}_devtools_remote`,
65
+ `localabstract:${devtoolsSocket}`,
59
66
  ]);
60
67
  return freePort;
61
68
  });
@@ -65,23 +72,37 @@ function startApplication(browser = 'chrome') {
65
72
  return __awaiter(this, void 0, void 0, function* () {
66
73
  const common = {
67
74
  waitDuration: START_APP_WAIT_DURATION,
68
- optionalIntentArguments: "-d www.appium.io",
75
+ optionalIntentArguments: '-d www.appium.io',
69
76
  };
70
77
  const chrome = {
71
- pkg: "com.android.chrome",
72
- activity: "com.google.android.apps.chrome.Main",
78
+ pkg: 'com.android.chrome',
79
+ activity: 'com.google.android.apps.chrome.Main',
73
80
  };
74
81
  const terrance = {
75
- pkg: "com.sec.android.app.sbrowser",
76
- activity: "com.sec.android.app.sbrowser.SBrowserMainActivity",
82
+ pkg: 'com.sec.android.app.sbrowser',
83
+ activity: 'com.sec.android.app.sbrowser.SBrowserMainActivity',
84
+ };
85
+ const brave = {
86
+ pkg: 'com.brave.browser',
87
+ activity: 'com.google.android.apps.chrome.Main',
88
+ };
89
+ const opera = {
90
+ pkg: 'com.opera.browser',
91
+ activity: 'com.opera.android.BrowserActivity',
77
92
  };
78
93
  if (browser === 'chrome') {
79
94
  yield adb.startApp(Object.assign({}, chrome, common));
80
95
  }
81
- else {
96
+ else if (browser === 'terrance') {
82
97
  yield adb.startApp(Object.assign({}, terrance, common));
83
98
  }
99
+ else if (browser === 'brave') {
100
+ yield adb.startApp(Object.assign({}, brave, common));
101
+ }
102
+ else if (browser === 'opera') {
103
+ yield adb.startApp(Object.assign({}, opera, common));
104
+ }
84
105
  });
85
106
  }
86
107
  exports.startApplication = startApplication;
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FkYi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBb0Q7QUFDcEQsNkNBQXFDO0FBRXJDLHdEQUErQjtBQUUvQixJQUFJLEdBQUcsQ0FBQztBQUNSLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBRXRDLFNBQXNCLE1BQU07O1FBQzFCLElBQUk7WUFDRixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLEdBQUcsR0FBRyxNQUFNLGdCQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDN0I7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQjtJQUNILENBQUM7Q0FBQTtBQVJELHdCQVFDO0FBRUQsU0FBc0IsY0FBYzs7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBaUIsR0FBRSxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUNWLG1GQUFtRixDQUFDO1FBQ3RGLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUNiLGdGQUFnRixNQUFNLEVBQUUsQ0FDekYsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYixnQ0FBZ0MsT0FBTyw4Q0FBOEMsTUFBTSxFQUFFLENBQzlGLENBQUM7U0FDSDtRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQ2IseUJBQXlCLE9BQU8sdUJBQXVCLE1BQU0sRUFBRSxDQUNoRSxDQUFDO1NBQ0g7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQUE7QUF0QkQsd0NBc0JDO0FBRUQsU0FBc0IsT0FBTyxDQUFDLE9BQU8sR0FBRyxRQUFROztRQUM5QyxJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUEsa0JBQU8sR0FBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUNoQixTQUFTO1lBQ1QsT0FBTyxRQUFRLEVBQUU7WUFDakIsaUJBQWlCLE9BQU8sa0JBQWtCO1NBQzNDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FBQTtBQVJELDBCQVFDO0FBRUQsU0FBc0IsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLFFBQVE7O1FBQ3ZELE1BQU0sTUFBTSxHQUFHO1lBQ2IsWUFBWSxFQUFFLHVCQUF1QjtZQUNyQyx1QkFBdUIsRUFBRSxrQkFBa0I7U0FDNUMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHO1lBQ2IsR0FBRyxFQUFFLG9CQUFvQjtZQUN6QixRQUFRLEVBQUUscUNBQXFDO1NBQ2hELENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRztZQUNmLEdBQUcsRUFBRSw4QkFBOEI7WUFDbkMsUUFBUSxFQUFFLG1EQUFtRDtTQUM5RCxDQUFDO1FBQ0YsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztDQUFBO0FBbkJELDRDQW1CQyJ9
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FkYi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBb0Q7QUFDcEQsNkNBQXFDO0FBQ3JDLHdEQUErQjtBQUUvQixJQUFJLEdBQUcsQ0FBQztBQUNSLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBRXRDLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQyxLQUFLLEVBQUUsd0JBQXdCO0lBQy9CLEtBQUssRUFBRSw0QkFBNEI7SUFDbkMsUUFBUSxFQUFFLDhDQUE4QztDQUN6RCxDQUFDO0FBRUYsU0FBc0IsTUFBTTs7UUFDMUIsSUFBSTtZQUNGLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1IsR0FBRyxHQUFHLE1BQU0sZ0JBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUM3QjtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztDQUFBO0FBUkQsd0JBUUM7QUFFRCxTQUFzQixjQUFjOztRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFpQixHQUFFLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQ1YsbUZBQW1GLENBQUM7UUFDdEYsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLE1BQU0sRUFBRSxDQUN6RixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxPQUFPLDhDQUE4QyxNQUFNLEVBQUUsQ0FDOUYsQ0FBQztTQUNIO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYix5QkFBeUIsT0FBTyx1QkFBdUIsTUFBTSxFQUFFLENBQ2hFLENBQUM7U0FDSDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FBQTtBQXRCRCx3Q0FzQkM7QUFFRCxTQUFzQixPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVE7O1FBQzlDLElBQUksUUFBUSxHQUFHLE1BQU0sSUFBQSxrQkFBTyxHQUFFLENBQUM7UUFDL0IsTUFBTSxjQUFjLEdBQ2xCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxrQkFBa0IsQ0FBQztRQUMvRCxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDaEIsU0FBUztZQUNULE9BQU8sUUFBUSxFQUFFO1lBQ2pCLGlCQUFpQixjQUFjLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUFBO0FBVkQsMEJBVUM7QUFFRCxTQUFzQixnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsUUFBUTs7UUFDdkQsTUFBTSxNQUFNLEdBQUc7WUFDYixZQUFZLEVBQUUsdUJBQXVCO1lBQ3JDLHVCQUF1QixFQUFFLGtCQUFrQjtTQUM1QyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUc7WUFDYixHQUFHLEVBQUUsb0JBQW9CO1lBQ3pCLFFBQVEsRUFBRSxxQ0FBcUM7U0FDaEQsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHO1lBQ2YsR0FBRyxFQUFFLDhCQUE4QjtZQUNuQyxRQUFRLEVBQUUsbURBQW1EO1NBQzlELENBQUM7UUFFRixNQUFNLEtBQUssR0FBRztZQUNaLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsUUFBUSxFQUFFLHFDQUFxQztTQUNoRCxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLEVBQUUsbUJBQW1CO1lBQ3hCLFFBQVEsRUFBRSxtQ0FBbUM7U0FDOUMsQ0FBQztRQUVGLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN4QixNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDdkQ7YUFBTSxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUU7WUFDakMsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQzlCLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN0RDthQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUM5QixNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0NBQUE7QUFsQ0QsNENBa0NDIn0=
package/build/cdp.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getNetwork = void 0;
13
+ const taiko_1 = require("taiko");
14
+ function getNetwork() {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const cdpClient = yield (0, taiko_1.client)();
17
+ const Network = cdpClient.Network;
18
+ yield Network.enable();
19
+ return Network;
20
+ });
21
+ }
22
+ exports.getNetwork = getNetwork;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NkcC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpQ0FBK0I7QUFFL0IsU0FBc0IsVUFBVTs7UUFDNUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLGNBQU0sR0FBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDbEMsTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUFBO0FBTEQsZ0NBS0MifQ==
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.elementCache = exports.helpers = exports.commands = void 0;
16
+ const cdp_1 = require("../cdp");
17
+ const url_1 = __importDefault(require("./url"));
18
+ let commands = {}, helpers = {}, extensions = {};
19
+ exports.commands = commands;
20
+ exports.helpers = helpers;
21
+ commands.setCookie = function setCookie(cookie) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const url = yield url_1.default.getUrl();
24
+ const origin = (new URL(url)).origin;
25
+ const options = {};
26
+ options.name = cookie.name;
27
+ options.value = cookie.value;
28
+ options.url = origin;
29
+ const network = yield (0, cdp_1.getNetwork)();
30
+ return network.setCookie(options);
31
+ });
32
+ };
33
+ commands.getCookies = function getCookies() {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const network = yield (0, cdp_1.getNetwork)();
36
+ const allCookies = yield network.getAllCookies();
37
+ return allCookies.cookies;
38
+ });
39
+ };
40
+ commands.getCookie = function getCookie(key) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const network = yield (0, cdp_1.getNetwork)();
43
+ const allCookies = yield network.getAllCookies();
44
+ return allCookies.cookies.filter((cookie) => { return cookie.name === key; })[0];
45
+ });
46
+ };
47
+ commands.deleteCookie = function deleteCookie(key) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const allCookies = yield commands.getCookies();
50
+ const cookie = allCookies.filter((cookie) => { return cookie.name === key; })[0];
51
+ const network = yield (0, cdp_1.getNetwork)();
52
+ return network.deleteCookies({ name: key, domain: cookie.domain });
53
+ });
54
+ };
55
+ commands.deleteCookies = function deleteAllCookies() {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const network = yield (0, cdp_1.getNetwork)();
58
+ return network.clearBrowserCookies();
59
+ });
60
+ };
61
+ Object.assign(extensions, commands, helpers);
62
+ exports.default = extensions;
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jb29raWVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdDQUFvQztBQUNwQyxnREFBZ0M7QUFFaEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNiLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQXdDWCw0QkFBUTtBQUFFLDBCQUFPO0FBdEMxQixRQUFRLENBQUMsU0FBUyxHQUFHLFNBQWUsU0FBUyxDQUFDLE1BQU07O1FBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFckMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMzQixPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFckIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGdCQUFVLEdBQUUsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUFBLENBQUE7QUFFRCxRQUFRLENBQUMsVUFBVSxHQUFHLFNBQWUsVUFBVTs7UUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGdCQUFVLEdBQUUsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQztDQUFBLENBQUE7QUFFRCxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQWUsU0FBUyxDQUFDLEdBQUc7O1FBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxnQkFBVSxHQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7Q0FBQSxDQUFBO0FBRUQsUUFBUSxDQUFDLFlBQVksR0FBRyxTQUFlLFlBQVksQ0FBQyxHQUFHOztRQUNuRCxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGdCQUFVLEdBQUUsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQUEsQ0FBQTtBQUVELFFBQVEsQ0FBQyxhQUFhLEdBQUcsU0FBZSxnQkFBZ0I7O1FBQ3BELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxnQkFBVSxHQUFFLENBQUM7UUFDbkMsT0FBTyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0NBQUEsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUU3QyxrQkFBZSxVQUFVLENBQUMifQ==
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.elementCache = exports.helpers = exports.commands = void 0;
13
+ const taiko_1 = require("taiko");
14
+ let commands = {}, helpers = {}, extensions = {};
15
+ exports.commands = commands;
16
+ exports.helpers = helpers;
17
+ commands.getPageSource = function pageSource() {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ return (0, taiko_1.evaluate)(() => { return document.documentElement.outerHTML; });
20
+ });
21
+ };
22
+ Object.assign(extensions, commands, helpers);
23
+ exports.default = extensions;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZG9jdW1lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQWlDO0FBRWpDLElBQUksUUFBUSxHQUFHLEVBQUUsRUFDZixPQUFPLEdBQUcsRUFBRSxFQUNaLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFPVCw0QkFBUTtBQUFFLDBCQUFPO0FBTDFCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsU0FBZSxVQUFVOztRQUM5QyxPQUFPLElBQUEsZ0JBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUFBLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFN0Msa0JBQWUsVUFBVSxDQUFDIn0=
@@ -41,7 +41,7 @@ commands.elementDisplayed = function elementDisplayed(elementId) {
41
41
  commands.elementEnabled = function elementEnabled(elementId) {
42
42
  return __awaiter(this, void 0, void 0, function* () {
43
43
  const element = find_1.elementCache[elementId];
44
- return !element.isDisabled();
44
+ return !(yield element.isDisabled());
45
45
  });
46
46
  };
47
47
  commands.setValue = function setValue(value, elementId) {
@@ -53,9 +53,32 @@ commands.setValue = function setValue(value, elementId) {
53
53
  commands.clear = function clear(elementId) {
54
54
  return __awaiter(this, void 0, void 0, function* () {
55
55
  const element = find_1.elementCache[elementId];
56
- yield (0, taiko_1.write)('', (0, taiko_1.into)(element));
56
+ yield (0, taiko_1.write)("", (0, taiko_1.into)(element));
57
+ });
58
+ };
59
+ commands.getAttribute = function getAttribute(value, elementId) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const element = find_1.elementCache[elementId];
62
+ return yield element.attribute(value);
63
+ });
64
+ };
65
+ commands.getElementRect = function getElementRect(elementId) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ const element = find_1.elementCache[elementId];
68
+ return yield (0, taiko_1.evaluate)(element, (element) => {
69
+ const { x, y, width, height } = element.getBoundingClientRect();
70
+ return { x, y, width, height };
71
+ });
72
+ });
73
+ };
74
+ commands.getName = function getName(elementId) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const element = find_1.elementCache[elementId];
77
+ return yield (0, taiko_1.evaluate)(element, (element) => {
78
+ return element.tagName;
79
+ });
57
80
  });
58
81
  };
59
82
  Object.assign(extensions, commands, helpers);
60
83
  exports.default = extensions;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUNBLGlDQUEyQztBQUMzQyxpQ0FBc0M7QUFFdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQW9DVCw0QkFBUTtBQUFFLDBCQUFPO0FBbEMxQixTQUFlLE1BQU0sQ0FBQyxPQUFPOztRQUMzQixNQUFNLElBQUEsYUFBSyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUNELFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBZSxLQUFLLENBQUMsU0FBUzs7UUFDN0MsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxPQUFPLEdBQUcsU0FBZSxPQUFPLENBQUMsU0FBUzs7UUFDakQsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxTQUFlLGdCQUFnQixDQUFDLFNBQVM7O1FBQ25FLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsY0FBYyxHQUFHLFNBQWUsY0FBYyxDQUFDLFNBQVM7O1FBQy9ELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBZSxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVM7O1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFBLGFBQUssRUFBQyxLQUFLLEVBQUUsSUFBQSxZQUFJLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQUEsQ0FBQTtBQUVELFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBZSxLQUFLLENBQUMsU0FBUzs7UUFDN0MsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUEsYUFBSyxFQUFDLEVBQUUsRUFBRSxJQUFBLFlBQUksRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLGtCQUFlLFVBQVUsQ0FBQyJ9
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFtRDtBQUNuRCxpQ0FBc0M7QUFFdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQTBEVCw0QkFBUTtBQUFFLDBCQUFPO0FBeEQxQixTQUFlLE1BQU0sQ0FBQyxPQUFPOztRQUMzQixNQUFNLElBQUEsYUFBSyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUNELFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBZSxLQUFLLENBQUMsU0FBUzs7UUFDN0MsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxPQUFPLEdBQUcsU0FBZSxPQUFPLENBQUMsU0FBUzs7UUFDakQsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxTQUFlLGdCQUFnQixDQUFDLFNBQVM7O1FBQ25FLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsY0FBYyxHQUFHLFNBQWUsY0FBYyxDQUFDLFNBQVM7O1FBQy9ELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLENBQUEsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQztJQUNyQyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBZSxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVM7O1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFBLGFBQUssRUFBQyxLQUFLLEVBQUUsSUFBQSxZQUFJLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBZSxLQUFLLENBQUMsU0FBUzs7UUFDN0MsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUEsYUFBSyxFQUFDLEVBQUUsRUFBRSxJQUFBLFlBQUksRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FBQSxDQUFDO0FBRUYsUUFBUSxDQUFDLFlBQVksR0FBRyxTQUFlLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUzs7UUFDbEUsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxjQUFjLEdBQUcsU0FBZSxjQUFjLENBQUMsU0FBUzs7UUFDL0QsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sSUFBQSxnQkFBUSxFQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBRXpDLE1BQU0sRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvRCxPQUFPLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQUEsQ0FBQTtBQUVELFFBQVEsQ0FBQyxPQUFPLEdBQUcsU0FBZSxPQUFPLENBQUMsU0FBUzs7UUFDakQsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sSUFBQSxnQkFBUSxFQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBRTFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLGtCQUFlLFVBQVUsQ0FBQyJ9
@@ -6,7 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const url_1 = __importDefault(require("./url"));
7
7
  const find_1 = __importDefault(require("./find"));
8
8
  const element_1 = __importDefault(require("./element"));
9
+ const navigation_1 = __importDefault(require("./navigation"));
10
+ const document_1 = __importDefault(require("./document"));
11
+ const cookies_1 = __importDefault(require("./cookies"));
12
+ const screencapture_1 = __importDefault(require("./screencapture"));
9
13
  let commands = {};
10
- Object.assign(commands, url_1.default, find_1.default, element_1.default);
14
+ Object.assign(commands, screencapture_1.default, cookies_1.default, document_1.default, navigation_1.default, url_1.default, find_1.default, element_1.default);
11
15
  exports.default = commands;
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBZ0M7QUFDaEMsa0RBQWlDO0FBQ2pDLHdEQUF3QztBQUN4QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFFbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBVyxFQUFFLGNBQVcsRUFBRSxpQkFBZSxDQUFDLENBQUM7QUFFbkUsa0JBQWUsUUFBUSxDQUFDIn0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBZ0M7QUFDaEMsa0RBQWlDO0FBQ2pDLHdEQUF3QztBQUN4Qyw4REFBOEM7QUFDOUMsMERBQTBDO0FBQzFDLHdEQUF1QztBQUN2QyxvRUFBZ0Q7QUFFaEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBRWxCLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLHVCQUFrQixFQUFFLGlCQUFjLEVBQUUsa0JBQWdCLEVBQUUsb0JBQWtCLEVBQUUsYUFBVyxFQUFFLGNBQVcsRUFBRSxpQkFBZSxDQUFDLENBQUM7QUFFN0ksa0JBQWUsUUFBUSxDQUFDIn0=
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.elementCache = exports.helpers = exports.commands = void 0;
13
+ const taiko_1 = require("taiko");
14
+ let commands = {}, helpers = {}, extensions = {};
15
+ exports.commands = commands;
16
+ exports.helpers = helpers;
17
+ commands.title = function pageTitle() {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ return yield (0, taiko_1.title)();
20
+ });
21
+ };
22
+ commands.back = function back() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ yield (0, taiko_1.goBack)();
25
+ });
26
+ };
27
+ commands.forward = function forward() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ yield (0, taiko_1.goForward)();
30
+ });
31
+ };
32
+ Object.assign(extensions, commands, helpers);
33
+ exports.default = extensions;
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9uYXZpZ2F0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFpRDtBQUVqRCxJQUFJLFFBQVEsR0FBRyxFQUFFLEVBQ2YsT0FBTyxHQUFHLEVBQUUsRUFDWixVQUFVLEdBQUcsRUFBRSxDQUFDO0FBZVQsNEJBQVE7QUFBRSwwQkFBTztBQWIxQixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQWUsU0FBUzs7UUFDdkMsT0FBTyxNQUFNLElBQUEsYUFBSyxHQUFFLENBQUM7SUFDdkIsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsSUFBSSxHQUFHLFNBQWUsSUFBSTs7UUFDakMsTUFBTSxJQUFBLGNBQU0sR0FBRSxDQUFDO0lBQ2pCLENBQUM7Q0FBQSxDQUFDO0FBRUYsUUFBUSxDQUFDLE9BQU8sR0FBRyxTQUFlLE9BQU87O1FBQ3ZDLE1BQU0sSUFBQSxpQkFBUyxHQUFFLENBQUM7SUFDcEIsQ0FBQztDQUFBLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFN0Msa0JBQWUsVUFBVSxDQUFDIn0=
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.helpers = exports.commands = void 0;
13
+ const taiko_1 = require("taiko");
14
+ const find_1 = require("./find");
15
+ let commands = {}, helpers = {}, extensions = {};
16
+ exports.commands = commands;
17
+ exports.helpers = helpers;
18
+ commands.getScreenshot = function getScreenshot() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ return (0, taiko_1.screenshot)({ encoding: "base64" });
21
+ });
22
+ };
23
+ commands.getElementScreenshot = function getElementScreenshot(elementId) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const element = find_1.elementCache[elementId];
26
+ return (0, taiko_1.screenshot)(element, { encoding: "base64" });
27
+ });
28
+ };
29
+ Object.assign(extensions, commands, helpers);
30
+ exports.default = extensions;
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuY2FwdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zY3JlZW5jYXB0dXJlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFtQztBQUNuQyxpQ0FBc0M7QUFFdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQVlULDRCQUFRO0FBQUUsMEJBQU87QUFWMUIsUUFBUSxDQUFDLGFBQWEsR0FBRyxTQUFlLGFBQWE7O1FBQ25ELE9BQU8sSUFBQSxrQkFBVSxFQUFDLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsb0JBQW9CLEdBQUcsU0FBZSxvQkFBb0IsQ0FBQyxTQUFTOztRQUMzRSxNQUFNLE9BQU8sR0FBRyxtQkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBQSxrQkFBVSxFQUFDLE9BQU8sRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLGtCQUFlLFVBQVUsQ0FBQyJ9
@@ -24,6 +24,11 @@ commands.getUrl = function getUrl() {
24
24
  return yield (0, taiko_1.currentURL)();
25
25
  });
26
26
  };
27
+ commands.refresh = function refresh() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return yield (0, taiko_1.reload)();
30
+ });
31
+ };
27
32
  Object.assign(extensions, commands, helpers);
28
33
  exports.default = extensions;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3VybC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpQ0FBeUM7QUFFekMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQVdULDRCQUFRO0FBQUUsMEJBQU87QUFUMUIsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFlLE1BQU0sQ0FBQyxHQUFHOztRQUN6QyxNQUFNLElBQUEsWUFBSSxFQUFDLEdBQUcsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsTUFBTSxHQUFHLFNBQWUsTUFBTTs7UUFDckMsT0FBTyxNQUFNLElBQUEsa0JBQVUsR0FBRSxDQUFDO0lBQzVCLENBQUM7Q0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLGtCQUFlLFVBQVUsQ0FBQyJ9
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3VybC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxpQ0FBaUQ7QUFFakQsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQWVULDRCQUFRO0FBQUUsMEJBQU87QUFiMUIsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFlLE1BQU0sQ0FBQyxHQUFHOztRQUN6QyxNQUFNLElBQUEsWUFBSSxFQUFDLEdBQUcsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsTUFBTSxHQUFHLFNBQWUsTUFBTTs7UUFDckMsT0FBTyxNQUFNLElBQUEsa0JBQVUsR0FBRSxDQUFDO0lBQzVCLENBQUM7Q0FBQSxDQUFDO0FBRUYsUUFBUSxDQUFDLE9BQU8sR0FBRyxTQUFlLE9BQU87O1FBQ3ZDLE9BQU8sTUFBTSxJQUFBLGNBQU0sR0FBRSxDQUFDO0lBQ3hCLENBQUM7Q0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLGtCQUFlLFVBQVUsQ0FBQyJ9
package/build/driver.js CHANGED
@@ -24,7 +24,7 @@ process.env.LOCAL_PROTOCOL = true;
24
24
  class AppiumCDPDriver extends base_driver_1.BaseDriver {
25
25
  constructor(args) {
26
26
  super(args);
27
- this.locatorStrategies = ["xpath", "id"];
27
+ this.locatorStrategies = ['xpath', 'id'];
28
28
  this.desiredCapConstraints = {
29
29
  automationName: {
30
30
  presence: true,
@@ -41,31 +41,46 @@ class AppiumCDPDriver extends base_driver_1.BaseDriver {
41
41
  createSession: { get: () => super.createSession }
42
42
  });
43
43
  return __awaiter(this, void 0, void 0, function* () {
44
- console.log(yield (0, taiko_1.getConfig)("local"));
44
+ console.log(yield (0, taiko_1.getConfig)('local'));
45
45
  const res = yield _super.createSession.call(this, w3cCaps);
46
- const browser = w3cCaps.alwaysMatch["browserName"];
46
+ const browser = w3cCaps.alwaysMatch['browserName'];
47
47
  yield (0, adb_1.getAdb)();
48
48
  const port = yield (0, adb_1.adbExec)(browser);
49
49
  yield (0, adb_1.startApplication)(browser);
50
- logger_1.default.info("Browser opened");
50
+ logger_1.default.info('Browser opened');
51
+ // Wait a bit longer for Opera to initialize its CDP interface
52
+ yield new Promise((resolve) => setTimeout(resolve, 3000));
51
53
  const data = yield (0, async_retry_1.default)((bail) => __awaiter(this, void 0, void 0, function* () {
52
- const res = yield yield (0, node_fetch_1.default)(`http://localhost:${port}/json/list`);
53
- const data = yield res.json();
54
- if (data.length == 0) {
55
- throw new Error('Debug list is empty');
54
+ try {
55
+ logger_1.default.info(`Attempting to connect to CDP at http://localhost:${port}/json/list`);
56
+ const res = yield (0, node_fetch_1.default)(`http://localhost:${port}/json/list`);
57
+ if (!res.ok) {
58
+ throw new Error(`HTTP ${res.status}: ${res.statusText}`);
59
+ }
60
+ const data = yield res.json();
61
+ logger_1.default.info(`CDP response: ${JSON.stringify(data)}`);
62
+ if (!Array.isArray(data) || data.length === 0) {
63
+ throw new Error('Debug list is empty or invalid');
64
+ }
65
+ return data;
66
+ }
67
+ catch (error) {
68
+ logger_1.default.error(`CDP connection attempt failed: ${error.message}`);
69
+ throw error;
56
70
  }
57
- return data;
58
71
  }), {
59
- retries: 5,
60
- factor: 1,
72
+ retries: 10,
73
+ factor: 2,
74
+ minTimeout: 2000,
75
+ maxTimeout: 10000,
61
76
  });
62
77
  const target = data.find((target) => {
63
- return (target.url).includes("appium.io");
78
+ return target.url.includes('appium.io');
64
79
  });
65
80
  logger_1.default.info(`Target found: ${target.webSocketDebuggerUrl}`);
66
81
  yield (0, taiko_1.openBrowser)({
67
82
  port: port,
68
- host: "127.0.0.1",
83
+ host: '127.0.0.1',
69
84
  target: target.webSocketDebuggerUrl,
70
85
  });
71
86
  return res;
@@ -82,4 +97,4 @@ class AppiumCDPDriver extends base_driver_1.BaseDriver {
82
97
  }
83
98
  exports.AppiumCDPDriver = AppiumCDPDriver;
84
99
  Object.assign(AppiumCDPDriver.prototype, commands_1.default);
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RyaXZlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsK0JBQTBEO0FBQzFELGlDQUFxRDtBQUNyRCwwREFBa0M7QUFDbEMsc0RBQTJCO0FBQzNCLDREQUErQjtBQUMvQiw4REFBZ0M7QUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sZUFBZ0IsU0FBUSx3QkFBVTtJQUN0QyxZQUFZLElBQUk7UUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlOzs7OztZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBQSxpQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFNLGFBQWEsWUFBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBQSxZQUFNLEdBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxhQUFPLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFBLHNCQUFnQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLGdCQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHFCQUFLLEVBQ3RCLENBQU8sSUFBSSxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLElBQUEsb0JBQUssRUFBQyxvQkFBb0IsSUFBSSxZQUFZLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUEsRUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsQ0FBQzthQUNWLENBQ0YsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxnQkFBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLElBQUEsbUJBQVcsRUFBQztnQkFDaEIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE1BQU0sRUFBRSxNQUFNLENBQUMsb0JBQW9CO2FBQ3BDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztLQUFBO0lBRUssYUFBYTs7Ozs7WUFDakIsTUFBTSxPQUFNLGFBQWEsV0FBRSxDQUFDO1FBQzlCLENBQUM7S0FBQTtDQUNGO0FBR1EsMENBQWU7QUFEeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGtCQUFRLENBQUMsQ0FBQyJ9
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RyaXZlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsK0JBQTBEO0FBQzFELGlDQUFxRDtBQUNyRCwwREFBa0M7QUFDbEMsc0RBQTJCO0FBQzNCLDREQUErQjtBQUMvQiw4REFBZ0M7QUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sZUFBZ0IsU0FBUSx3QkFBVTtJQUN0QyxZQUFZLElBQUk7UUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlOzs7OztZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBQSxpQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFNLGFBQWEsWUFBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBQSxZQUFNLEdBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxhQUFPLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFBLHNCQUFnQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLGdCQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0IsOERBQThEO1lBQzlELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUxRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEscUJBQUssRUFDdEIsQ0FBTyxJQUFJLEVBQUUsRUFBRTtnQkFDYixJQUFJO29CQUNGLGdCQUFHLENBQUMsSUFBSSxDQUNOLG9EQUFvRCxJQUFJLFlBQVksQ0FDckUsQ0FBQztvQkFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsb0JBQUssRUFBQyxvQkFBb0IsSUFBSSxZQUFZLENBQUMsQ0FBQztvQkFFOUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7d0JBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7cUJBQzFEO29CQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM5QixnQkFBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRWxELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7cUJBQ25EO29CQUVELE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUFDLE9BQU8sS0FBSyxFQUFFO29CQUNkLGdCQUFHLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDN0QsTUFBTSxLQUFLLENBQUM7aUJBQ2I7WUFDSCxDQUFDLENBQUEsRUFDRDtnQkFDRSxPQUFPLEVBQUUsRUFBRTtnQkFDWCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FDRixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNsQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsZ0JBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDekQsTUFBTSxJQUFBLG1CQUFXLEVBQUM7Z0JBQ2hCLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjthQUNwQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7S0FBQTtJQUVLLGFBQWE7Ozs7O1lBQ2pCLE1BQU0sT0FBTSxhQUFhLFdBQUUsQ0FBQztRQUM5QixDQUFDO0tBQUE7Q0FDRjtBQUdRLDBDQUFlO0FBRHhCLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxrQkFBUSxDQUFDLENBQUMifQ==
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "appium-cdp-driver",
3
- "description": "Appium driver for the filesystem",
3
+ "description": "Appium driver for the CDP",
4
4
  "keywords": [
5
5
  "appium",
6
6
  "chrome-dev-tools"
7
7
  ],
8
- "version": "1.0.0-beta.3",
8
+ "version": "1.0.0",
9
9
  "author": "",
10
10
  "license": "Apache-2.0",
11
11
  "repository": {
12
12
  "type": "git",
13
- "url": "https://github.com/appium/appium-fs-driver.git"
13
+ "url": "https://github.com/appium/appium-cdp-driver.git"
14
14
  },
15
15
  "bugs": {
16
- "url": "https://github.com/appium/appium-fs-driver/issues"
16
+ "url": "https://github.com/appium/appium-cdp-driver/issues"
17
17
  },
18
18
  "main": "./build/driver.js",
19
19
  "bin": {},
@@ -36,7 +36,7 @@
36
36
  "clean": "rimraf package-lock.json && rimraf node_modules && TAIKO_SKIP_CHROMIUM_DOWNLOAD=true npm install",
37
37
  "build": "rimraf build && tsc",
38
38
  "watch": "tsc --watch",
39
- "test": "mocha --require ts-node/register -p ./test/*.spec.js --timeout 260000 ",
39
+ "test": "mocha --require ts-node/register ./test/*.spec.js --timeout 260000 ",
40
40
  "install-driver": "npm run build && appium driver install --source=local $(pwd)",
41
41
  "reinstall-driver": "(appium driver uninstall cdp-driver || exit 0) && npm run install-driver"
42
42
  },
@@ -58,5 +58,8 @@
58
58
  "chrome-remote-interface": "^0.31.3",
59
59
  "get-port": "^5.1.1",
60
60
  "taiko": "https://github.com/getgauge/taiko.git"
61
+ },
62
+ "peerDependencies": {
63
+ "appium": "^2.4.1 || ^3.0.0-beta.0"
61
64
  }
62
65
  }
package/src/adb.js CHANGED
@@ -1,11 +1,17 @@
1
- import { ADB, getSdkRootFromEnv } from "appium-adb";
2
- import { fs } from "@appium/support";
3
- import log from "./logger";
4
- import getPort from "get-port";
1
+ import { ADB, getSdkRootFromEnv } from 'appium-adb';
2
+ import { fs } from '@appium/support';
3
+ import getPort from 'get-port';
5
4
 
6
5
  let adb;
7
6
  const START_APP_WAIT_DURATION = 60000;
8
7
 
8
+ const DEVTOOLS_SOCKET_MAP = {
9
+ chrome: 'chrome_devtools_remote',
10
+ brave: 'chrome_devtools_remote',
11
+ opera: 'com.opera.browser.devtools',
12
+ terrance: 'com.sec.android.app.sbrowser_devtools_remote',
13
+ };
14
+
9
15
  export async function getAdb() {
10
16
  try {
11
17
  if (!adb) {
@@ -19,7 +25,7 @@ export async function getAdb() {
19
25
  export async function requireSdkRoot() {
20
26
  const sdkRoot = getSdkRootFromEnv();
21
27
  const docMsg =
22
- "Read https://developer.android.com/studio/command-line/variables for more details";
28
+ 'Read https://developer.android.com/studio/command-line/variables for more details';
23
29
  if (_.isEmpty(sdkRoot)) {
24
30
  throw new Error(
25
31
  `Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported. ${docMsg}`
@@ -40,12 +46,14 @@ export async function requireSdkRoot() {
40
46
  return sdkRoot;
41
47
  }
42
48
 
43
- export async function adbExec(browser = "chrome") {
49
+ export async function adbExec(browser = 'chrome') {
44
50
  let freePort = await getPort();
51
+ const devtoolsSocket =
52
+ DEVTOOLS_SOCKET_MAP[browser] || `${browser}_devtools_remote`;
45
53
  await adb.adbExec([
46
- "forward",
54
+ 'forward',
47
55
  `tcp:${freePort}`,
48
- `localabstract:${browser}_devtools_remote`,
56
+ `localabstract:${devtoolsSocket}`,
49
57
  ]);
50
58
  return freePort;
51
59
  }
@@ -53,20 +61,35 @@ export async function adbExec(browser = "chrome") {
53
61
  export async function startApplication(browser = 'chrome') {
54
62
  const common = {
55
63
  waitDuration: START_APP_WAIT_DURATION,
56
- optionalIntentArguments: "-d www.appium.io",
64
+ optionalIntentArguments: '-d www.appium.io',
57
65
  };
58
66
  const chrome = {
59
- pkg: "com.android.chrome",
60
- activity: "com.google.android.apps.chrome.Main",
67
+ pkg: 'com.android.chrome',
68
+ activity: 'com.google.android.apps.chrome.Main',
61
69
  };
62
70
 
63
71
  const terrance = {
64
- pkg: "com.sec.android.app.sbrowser",
65
- activity: "com.sec.android.app.sbrowser.SBrowserMainActivity",
72
+ pkg: 'com.sec.android.app.sbrowser',
73
+ activity: 'com.sec.android.app.sbrowser.SBrowserMainActivity',
74
+ };
75
+
76
+ const brave = {
77
+ pkg: 'com.brave.browser',
78
+ activity: 'com.google.android.apps.chrome.Main',
66
79
  };
80
+
81
+ const opera = {
82
+ pkg: 'com.opera.browser',
83
+ activity: 'com.opera.android.BrowserActivity',
84
+ };
85
+
67
86
  if (browser === 'chrome') {
68
- await adb.startApp(Object.assign({}, chrome, common));
69
- } else {
87
+ await adb.startApp(Object.assign({}, chrome, common));
88
+ } else if (browser === 'terrance') {
70
89
  await adb.startApp(Object.assign({}, terrance, common));
90
+ } else if (browser === 'brave') {
91
+ await adb.startApp(Object.assign({}, brave, common));
92
+ } else if (browser === 'opera') {
93
+ await adb.startApp(Object.assign({}, opera, common));
71
94
  }
72
95
  }
@@ -1,4 +1,4 @@
1
- import { click, into, write } from "taiko";
1
+ import {click, evaluate, into, write} from "taiko";
2
2
  import { elementCache } from "./find";
3
3
 
4
4
  let commands = {},
@@ -25,7 +25,7 @@ commands.elementDisplayed = async function elementDisplayed(elementId) {
25
25
 
26
26
  commands.elementEnabled = async function elementEnabled(elementId) {
27
27
  const element = elementCache[elementId];
28
- return !element.isDisabled();
28
+ return !await element.isDisabled();
29
29
  };
30
30
 
31
31
  commands.setValue = async function setValue(value, elementId) {
@@ -38,6 +38,28 @@ commands.clear = async function clear(elementId) {
38
38
  await write("", into(element));
39
39
  };
40
40
 
41
+ commands.getAttribute = async function getAttribute(value, elementId) {
42
+ const element = elementCache[elementId];
43
+ return await element.attribute(value);
44
+ };
45
+
46
+ commands.getElementRect = async function getElementRect(elementId) {
47
+ const element = elementCache[elementId];
48
+ return await evaluate(element, (element) =>
49
+ {
50
+ const {x, y, width, height } = element.getBoundingClientRect();
51
+ return {x, y, width, height }
52
+ });
53
+ }
54
+
55
+ commands.getName = async function getName(elementId) {
56
+ const element = elementCache[elementId];
57
+ return await evaluate(element, (element) =>
58
+ {
59
+ return element.tagName;
60
+ });
61
+ };
62
+
41
63
  Object.assign(extensions, commands, helpers);
42
64
  export { commands, helpers };
43
65
  export default extensions;
@@ -4,9 +4,10 @@ import elementCommands from "./element";
4
4
  import navigationCommands from "./navigation";
5
5
  import documentCommands from "./document";
6
6
  import cookieCommands from "./cookies";
7
+ import screenshotComamnds from "./screencapture"
7
8
 
8
9
  let commands = {};
9
10
 
10
- Object.assign(commands, cookieCommands, documentCommands, navigationCommands, urlCommands, findCommand, elementCommands);
11
+ Object.assign(commands, screenshotComamnds, cookieCommands, documentCommands, navigationCommands, urlCommands, findCommand, elementCommands);
11
12
 
12
13
  export default commands;
@@ -0,0 +1,19 @@
1
+ import { screenshot } from "taiko";
2
+ import { elementCache } from "./find";
3
+
4
+ let commands = {},
5
+ helpers = {},
6
+ extensions = {};
7
+
8
+ commands.getScreenshot = async function getScreenshot() {
9
+ return screenshot({encoding: "base64"});
10
+ };
11
+
12
+ commands.getElementScreenshot = async function getElementScreenshot(elementId) {
13
+ const element = elementCache[elementId];
14
+ return screenshot(element, {encoding: "base64"});
15
+ };
16
+
17
+ Object.assign(extensions, commands, helpers);
18
+ export { commands, helpers };
19
+ export default extensions;
@@ -1,4 +1,4 @@
1
- import { goto, currentURL } from "taiko";
1
+ import { goto, currentURL, reload } from "taiko";
2
2
 
3
3
  let commands = {},
4
4
  helpers = {},
@@ -12,6 +12,10 @@ commands.getUrl = async function getUrl() {
12
12
  return await currentURL();
13
13
  };
14
14
 
15
+ commands.refresh = async function refresh() {
16
+ return await reload();
17
+ };
18
+
15
19
  Object.assign(extensions, commands, helpers);
16
20
  export { commands, helpers };
17
21
  export default extensions;
package/src/driver.js CHANGED
@@ -1,15 +1,15 @@
1
- import { BaseDriver, errors } from "@appium/base-driver";
2
- import { getAdb, adbExec, startApplication } from "./adb";
3
- import { openBrowser, getConfig, goto } from "taiko";
4
- import commands from "./commands";
5
- import log from "./logger";
6
- import fetch from "node-fetch";
7
- import retry from "async-retry";
1
+ import { BaseDriver, errors } from '@appium/base-driver';
2
+ import { getAdb, adbExec, startApplication } from './adb';
3
+ import { openBrowser, getConfig, goto } from 'taiko';
4
+ import commands from './commands';
5
+ import log from './logger';
6
+ import fetch from 'node-fetch';
7
+ import retry from 'async-retry';
8
8
  process.env.LOCAL_PROTOCOL = true;
9
9
  class AppiumCDPDriver extends BaseDriver {
10
10
  constructor(args) {
11
11
  super(args);
12
- this.locatorStrategies = ["xpath", "id"];
12
+ this.locatorStrategies = ['xpath', 'id'];
13
13
  this.desiredCapConstraints = {
14
14
  automationName: {
15
15
  presence: true,
@@ -23,34 +23,55 @@ class AppiumCDPDriver extends BaseDriver {
23
23
  }
24
24
 
25
25
  async createSession(jwpCaps, reqCaps, w3cCaps, otherDriverData) {
26
- console.log(await getConfig("local"));
26
+ console.log(await getConfig('local'));
27
27
  const res = await super.createSession(w3cCaps);
28
- const browser = w3cCaps.alwaysMatch["browserName"];
28
+ const browser = w3cCaps.alwaysMatch['browserName'];
29
29
  await getAdb();
30
30
  const port = await adbExec(browser);
31
31
  await startApplication(browser);
32
- log.info("Browser opened");
32
+ log.info('Browser opened');
33
+ // Wait a bit longer for Opera to initialize its CDP interface
34
+ await new Promise((resolve) => setTimeout(resolve, 3000));
35
+
33
36
  const data = await retry(
34
37
  async (bail) => {
35
- const res = await await fetch(`http://localhost:${port}/json/list`);
36
- const data = await res.json();
37
- if (data.length == 0) {
38
- throw new Error('Debug list is empty');
38
+ try {
39
+ log.info(
40
+ `Attempting to connect to CDP at http://localhost:${port}/json/list`
41
+ );
42
+ const res = await fetch(`http://localhost:${port}/json/list`);
43
+
44
+ if (!res.ok) {
45
+ throw new Error(`HTTP ${res.status}: ${res.statusText}`);
46
+ }
47
+
48
+ const data = await res.json();
49
+ log.info(`CDP response: ${JSON.stringify(data)}`);
50
+
51
+ if (!Array.isArray(data) || data.length === 0) {
52
+ throw new Error('Debug list is empty or invalid');
53
+ }
54
+
55
+ return data;
56
+ } catch (error) {
57
+ log.error(`CDP connection attempt failed: ${error.message}`);
58
+ throw error;
39
59
  }
40
- return data;
41
60
  },
42
61
  {
43
- retries: 5,
44
- factor: 1,
62
+ retries: 10,
63
+ factor: 2,
64
+ minTimeout: 2000,
65
+ maxTimeout: 10000,
45
66
  }
46
67
  );
47
68
  const target = data.find((target) => {
48
- return (target.url).includes("appium.io");
69
+ return target.url.includes('appium.io');
49
70
  });
50
71
  log.info(`Target found: ${target.webSocketDebuggerUrl}`);
51
72
  await openBrowser({
52
73
  port: port,
53
- host: "127.0.0.1",
74
+ host: '127.0.0.1',
54
75
  target: target.webSocketDebuggerUrl,
55
76
  });
56
77
  return res;