Compare commits

...
Author SHA1 Message Date
Jonathan Lipps 717ec38d8c chore: publish
- appium@2.2.2
 - @appium/base-driver@9.4.2
 - @appium/base-plugin@2.2.23
 - @appium/doctor@2.0.28
 - @appium/docutils@0.4.12
 - @appium/driver-test-support@0.4.17
 - @appium/execute-driver-plugin@3.0.20
 - @appium/fake-driver@5.2.11
 - @appium/fake-plugin@3.1.27
 - @appium/images-plugin@2.1.7
 - @appium/opencv@2.1.6
 - @appium/plugin-test-support@0.3.24
 - @appium/schema@0.4.2
 - @appium/support@4.1.9
 - @appium/test-support@3.0.27
 - @appium/types@0.14.2
 - @appium/universal-xml-plugin@1.0.15
2023-11-14 14:30:15 -08:00
Edgars Eglītis d73cfa75d4 ci: run CI only for master branch (#19416) 2023-11-14 23:02:24 +01:00
Dor Blayzer aa5ae9a8ca chore(doctor): Remove deprecated 'ANDROID_SDK_ROOT` (#19406) 2023-11-11 18:46:08 +01:00
renovate[bot] 0419de743b chore(deps): update dependency @types/node to v20.9.0 2023-11-11 13:19:10 +00:00
renovate[bot] 009aa60364 chore(deps): update commitlint monorepo to v18.4.0 2023-11-11 09:17:33 +00:00
Jonathan Lipps b53c0b9674 chore: run prettier on some files (#19403)
Working on these files for the bidi implementation
And want a clean PR to review without all this junk
2023-11-10 15:27:13 +00:00
renovate[bot] 84d96dbae4 fix(support): update teen_process-related packages 2023-11-10 15:26:54 +00:00
renovate[bot] 261cfc8694 fix(doctor): update dependency appium-adb to v11.0.7 2023-11-10 12:44:30 +00:00
renovate[bot] 9b14205288 fix(support): update dependency axios to v1.6.1 2023-11-10 10:52:50 +00:00
Mykola Mokhnach 7124eb6075 fix(appium): Load plugins in the same order that was used for the CLI command (#19388) 2023-11-10 08:16:48 +01:00
renovate[bot] 5ae8df3c36 fix(support): update definitelytyped 2023-11-09 17:15:27 +00:00
renovate[bot] c2f543fc10 fix(doctor): update dependency appium-adb to v11.0.6 2023-11-09 12:36:14 +00:00
renovate[bot] 06797350a9 chore(docutils): update dependency mkdocs-material to v9.4.8 2023-11-09 11:21:26 +00:00
renovate[bot] 7e888d45aa chore(deps): update dependency asyncbox to v3 (#19375)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-09 08:24:08 +01:00
Kazuaki Matsuo b83bd04265 chore(base-driver): remove mobileRotation as no references (#19379)
* chore(base-driver): remove mobileRotation as no references

* docs: remove unused endpoint

* test: fix test
2023-11-06 23:12:11 -08:00
mahomedalid 1ae85d6e14 appium(docs): Add dotnet quickstart documentation (#19371) 2023-11-06 08:15:42 +01:00
renovate[bot] fbb6fd9a27 fix(support): update dependency teen_process to v2.0.75 2023-11-04 16:31:13 +00:00
renovate[bot] ed6c7bd2c0 chore(deps): update dependency eslint to v8.53.0 2023-11-04 10:51:31 +00:00
renovate[bot] 699c49306c fix(support): update dependency axios to v1.6.0 2023-11-03 22:24:50 +00:00
renovate[bot] d44a136e55 fix(execute-driver-plugin): update dependency webdriverio to v8.21.0 2023-11-03 18:04:12 +00:00
renovate[bot] 8e453bed3f fix(support): update dependency teen_process to v2.0.73 2023-11-03 16:48:45 +00:00
renovate[bot] a215a89f68 fix(docutils): update dependency yaml to v2.3.4 2023-11-03 12:18:37 +00:00
renovate[bot] b59acac0e8 chore(deps): update dependency conventional-changelog-conventionalcommits to v7 (#19320)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-03 08:40:41 +01:00
Mykola Mokhnach 98ffc60cd1 chore(appium): Bump asyncbox to v3 (#19364) 2023-11-02 23:03:02 +01:00
renovate[bot] b82f13b893 fix(doctor): update dependency appium-adb to v11.0.5 (#19362)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-02 18:02:18 +01:00
renovate[bot] 398c9779eb chore(docutils): update dependency mkdocs-material to v9.4.7 2023-11-02 16:01:48 +00:00
renovate[bot] 2b28b54ab9 chore(deps): update eslint-related packages to v6.9.1 2023-11-02 12:02:51 +00:00
renovate[bot] 67198eae83 chore(deps): update dependency lerna to v7.4.2 2023-11-02 09:08:26 +00:00
Mykola Mokhnach e70dc4dfb6 fix(appium): Sync package-lock (#19357) 2023-11-01 18:27:57 +01:00
renovate[bot] 98403151f8 fix(support): update definitelytyped (#19326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 17:46:59 +01:00
renovate[bot] 1e99f81416 chore(deps): update commitlint monorepo to v18 (#19347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 17:46:33 +01:00
Edgars Eglītis dd9348af17 chore(deps): update webdriverio to 8.20.4 (#19342) 2023-11-01 17:46:11 +01:00
renovate[bot] 196117bab6 chore(deps): update eslint-related packages to v6.9.0 2023-10-25 11:41:06 +00:00
renovate[bot] 3b5ae2ab17 fix(support): update dependency teen_process to v2.0.67 2023-10-25 06:32:00 +00:00
renovate[bot] 1f79433059 fix(execute-driver-plugin): update dependency webdriverio to v8.20.3 2023-10-24 21:42:37 +00:00
renovate[bot] ee1df47b17 fix(doctor): update dependency appium-adb to v11.0.3 2023-10-24 15:45:57 +00:00
renovate[bot] c7c860bb07 chore(workflows): update actions/setup-node digest to 1a4442c 2023-10-24 09:24:20 +00:00
renovate[bot] db98024203 chore(deps): update dependency eslint-plugin-import to v2.29.0 2023-10-23 15:54:39 +00:00
renovate[bot] 3205b5d06f fix(support): update dependency teen_process to v2.0.66 2023-10-23 09:51:55 +00:00
Mykola Mokhnach 63a0b05e1b fix(images-plugin): Prevent repeatable template modification (#19334) 2023-10-23 08:30:36 +02:00
renovate[bot] 08af8913fd chore(deps): update dependency eslint to v8.52.0 2023-10-22 12:51:54 +00:00
renovate[bot] 332bb59ee3 fix(support): update dependency teen_process to v2.0.64 2023-10-22 09:23:00 +00:00
renovate[bot] fa571925b7 fix(support): update dependency teen_process to v2.0.63 2023-10-21 19:05:22 +00:00
renovate[bot] 77307f2722 chore(deps): update commitlint monorepo to v17.8.1 2023-10-21 10:41:11 +00:00
renovate[bot] 1fbd503a66 fix(support): update dependency teen_process to v2.0.57 2023-10-20 12:48:49 +00:00
renovate[bot] 128b0ae867 chore(deps): update dependency lint-staged to v15.0.2 2023-10-20 10:15:28 +00:00
renovate[bot] 3d0b97cae7 fix(support): update teen_process-related packages 2023-10-20 04:31:31 +00:00
renovate[bot] aad2957624 chore(workflows): update actions/checkout digest to b4ffde6 2023-10-19 21:43:21 +00:00
Jonathan Lipps bd6e3ac0b0 chore: publish
- appium@2.2.1
 - @appium/base-driver@9.4.1
 - @appium/base-plugin@2.2.22
 - @appium/doctor@2.0.27
 - @appium/docutils@0.4.11
 - @appium/driver-test-support@0.4.16
 - @appium/execute-driver-plugin@3.0.19
 - @appium/fake-driver@5.2.10
 - @appium/fake-plugin@3.1.26
 - @appium/images-plugin@2.1.6
 - @appium/opencv@2.1.5
 - @appium/plugin-test-support@0.3.23
 - @appium/schema@0.4.1
 - @appium/support@4.1.8
 - @appium/test-support@3.0.26
 - @appium/types@0.14.1
 - @appium/universal-xml-plugin@1.0.14
2023-10-19 10:05:33 -07:00
Mykola Mokhnach de39013ae5 fix(appium): Make sure type definitions are always in sync across modules (#19323) 2023-10-19 17:22:38 +02:00
renovate[bot] 408885a5b2 fix(doctor): update dependency appium-adb to v11 (#19321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-19 12:52:57 +02:00
renovate[bot] aaa7668ae6 fix(test-support): update dependency sinon to v16.1.3 2023-10-19 09:20:24 +00:00
renovate[bot] a306ce741a fix(support): update definitelytyped 2023-10-18 21:08:27 +00:00
Jonathan Lipps 475198e36b chore: publish
- appium@2.2.0
 - @appium/base-driver@9.4.0
 - @appium/base-plugin@2.2.21
 - @appium/doctor@2.0.26
 - @appium/docutils@0.4.10
 - @appium/driver-test-support@0.4.15
 - @appium/eslint-config-appium@8.0.5
 - @appium/eslint-config-appium-ts@0.3.2
 - @appium/execute-driver-plugin@3.0.18
 - @appium/fake-driver@5.2.9
 - @appium/fake-plugin@3.1.25
 - @appium/images-plugin@2.1.5
 - @appium/opencv@2.1.4
 - @appium/plugin-test-support@0.3.22
 - @appium/schema@0.4.0
 - @appium/support@4.1.7
 - @appium/test-support@3.0.25
 - @appium/tsconfig@0.3.2
 - @appium/types@0.14.0
 - @appium/universal-xml-plugin@1.0.13
2023-10-18 13:35:18 -07:00
Jonathan Lipps 821b4c4ef4 chore: downgrade conventional-changelog-conventionalcommits for lerna compatibility reasons 2023-10-18 13:33:48 -07:00
Jonathan Lipps e6da6b8dbc chore: remove erroneous extra level in lerna config 2023-10-18 13:24:10 -07:00
renovate[bot] ef3165f572 chore(deps): update dependency lerna to v7.4.1 2023-10-18 15:30:51 +00:00
renovate[bot] a3fbbda5fb chore(deps): update dependency lint-staged to v15 (#19303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 16:07:35 +02:00
renovate[bot] 33156712b1 fix(doctor): update dependency appium-adb to v10 (#19308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 16:07:14 +02:00
renovate[bot] 0d8ea1bbbb chore(docutils): update dependency mkdocs-material-extensions to v1.3 2023-10-17 09:37:53 +00:00
renovate[bot] 1a12f54fd8 chore(deps): update eslint-related packages to v6.8.0 2023-10-17 06:21:01 +00:00
Mykola Mokhnach 98f21f1ebc docs(doctor): Update the link to applesimutils (#19305) 2023-10-17 07:33:05 +02:00
renovate[bot] 932da4544e chore(deps): update commitlint monorepo to v17.8.0 2023-10-15 16:52:35 +00:00
renovate[bot] caf600bffd fix(docutils): update dependency yaml to v2.3.3 2023-10-14 16:16:26 +00:00
renovate[bot] d884f086b3 chore(docutils): update dependency mkdocs-material to v9.4.6 2023-10-14 13:54:03 +00:00
renovate[bot] ca3e5d90e4 fix(support): update dependency teen_process to v2.0.50 2023-10-14 10:42:43 +00:00
renovate[bot] 6afaa0f9bc chore(deps): update definitelytyped 2023-10-13 10:02:42 +00:00
renovate[bot] 6e21ea79d4 chore(deps): update dependency midnight-smoker to v7.0.4 2023-10-12 10:16:31 +00:00
renovate[bot] 96b0a44629 fix(types): update definitelytyped 2023-10-11 15:13:06 +00:00
renovate[bot] eebc651f31 fix(support): update dependency teen_process to v2.0.48 2023-10-11 13:53:40 +00:00
renovate[bot] 4a9aedd32d chore(deps): update dependency lerna to v7.3.1 2023-10-11 10:36:41 +00:00
renovate[bot] f52a23c686 fix(execute-driver-plugin): update dependency webdriverio to v8.17.0 (#19277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 21:32:32 +02:00
renovate[bot] d2a9a99418 fix(opencv): update definitelytyped 2023-10-10 16:29:41 +00:00
renovate[bot] 2b59c135d7 chore(docutils): update dependency mkdocs-material to v9.4.5 2023-10-10 12:31:42 +00:00
renovate[bot] 73746879ef chore(deps): update eslint-related packages to v6.7.5 2023-10-10 09:05:47 +00:00
renovate[bot] 0220a9f8e9 fix(doctor): update dependency appium-adb to v9.14.12 2023-10-09 11:13:38 +00:00
renovate[bot] f697cda9af fix(appium): update dependency winston to v3.11.0 2023-10-08 10:13:47 +00:00
renovate[bot] ea731bf117 fix(support): update dependency teen_process to v2.0.45 2023-10-07 19:33:17 +00:00
renovate[bot] 20a10b3297 chore(deps): update dependency eslint to v8.51.0 2023-10-07 15:57:30 +00:00
renovate[bot] 8c7225d4e9 fix(execute-driver-plugin): update dependency webdriverio to v8.16.22 2023-10-07 13:12:31 +00:00
renovate[bot] fa332502c5 chore(deps): update definitelytyped 2023-10-07 09:59:13 +00:00
renovate[bot] 126daeca4e fix(test-support): update dependency sinon to v16.1.0 2023-10-06 15:20:50 +00:00
renovate[bot] e2a670e1c4 fix(support): update dependency teen_process to v2.0.42 2023-10-06 14:19:45 +00:00
renovate[bot] 51c3ebeaba chore(docutils): update dependency mkdocs-material to v9.4.4 2023-10-06 10:00:38 +00:00
renovate[bot] 1a34396339 fix(support): update dependency teen_process to v2.0.41 2023-10-05 09:13:22 +00:00
renovate[bot] 11926d4d39 fix(execute-driver-plugin): update dependency webdriverio to v8.16.20 2023-10-04 09:25:33 +00:00
renovate[bot] 2837bcdeb1 fix(support): update dependency teen_process to v2.0.40 2023-10-03 17:18:56 +00:00
renovate[bot] c013d78572 fix(universal-xml-plugin): update dependency fast-xml-parser to v4.3.2 2023-10-03 15:09:05 +00:00
renovate[bot] 45a9c52ece chore(deps): update eslint-related packages to v6.7.4 2023-10-03 12:55:28 +00:00
renovate[bot] 64ff478786 chore(deps): update definitelytyped 2023-10-03 10:44:56 +00:00
renovate[bot] a7a4a29100 chore(docutils): update dependency mkdocs-material to v9.4.3 2023-10-02 12:36:49 +00:00
renovate[bot] 5d172a58bd fix(execute-driver-plugin): update dependency webdriverio to v8.16.18 2023-10-02 10:42:09 +00:00
renovate[bot] 009bbee47a chore(deps): update dependency eslint-plugin-mocha to v10.2.0 2023-10-01 13:03:23 +00:00
renovate[bot] a32dc11101 fix(support): update dependency teen_process to v2.0.38 2023-10-01 09:35:03 +00:00
renovate[bot] f3614adbde fix(execute-driver-plugin): update dependency webdriverio to v8.16.17 2023-09-30 16:12:47 +00:00
renovate[bot] 49c2f31885 chore(deps): update dependency @commitlint/cli to v17.7.2 2023-09-30 13:12:01 +00:00
renovate[bot] 1c808e9261 chore(deps): update definitelytyped 2023-09-30 09:43:53 +00:00
renovate[bot] 6d894bef6f fix(support): update dependency teen_process to v2.0.37 2023-09-28 21:22:30 +00:00
renovate[bot] 7a06ec5041 fix(driver-test-support): update dependency chai to v4.3.10 2023-09-28 18:23:27 +00:00
renovate[bot] 2d7eed7d81 chore(deps): update dependency @types/node to v18.18.0 2023-09-28 15:01:01 +00:00
renovate[bot] 5e095893ee fix(base-driver): update definitelytyped 2023-09-28 09:04:20 +00:00
Michael 7445db2279 test(universal-xml-plugin): fix getPageSource typo (#19219) 2023-09-27 19:00:29 -07:00
renovate[bot] c28fcefa72 fix(support): update dependency teen_process to v2.0.34 (#19218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-27 11:59:00 +02:00
renovate[bot] d336b51578 fix(support): update dependency glob to v10 (#19185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-27 11:58:46 +02:00
renovate[bot] c6af787011 chore(deps): update dependency rimraf to v5.0.5 (#19216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-27 11:58:26 +02:00
renovate[bot] 3df047d128 fix(support): update dependency axios to v1.5.1 (#19217)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-27 11:58:13 +02:00
Mykola Mokhnach 805f69de35 fix(appium): Fix creation of logging prefixes (#19212) 2023-09-27 11:57:57 +02:00
renovate[bot] c0b6a5afe3 chore(deps): update dependency midnight-smoker to v7.0.3 2023-09-27 09:18:25 +00:00
renovate[bot] 3b44c7d8f5 fix(support): update definitelytyped 2023-09-26 22:11:10 +00:00
renovate[bot] 2281e11028 fix(execute-driver-plugin): update dependency webdriverio to v8.16.15 2023-09-26 18:29:44 +00:00
renovate[bot] 5770cc0d3e chore(deps): update eslint-related packages to v6.7.3 2023-09-26 15:12:59 +00:00
renovate[bot] 5ad76bdb2b chore(deps): update dependency rimraf to v5.0.4 2023-09-26 11:22:31 +00:00
renovate[bot] 7cdb1429a1 fix(support): update dependency teen_process to v2.0.30 2023-09-25 17:09:00 +00:00
renovate[bot] 15a128d4dd chore(docutils): update dependency mkdocs-material to v9.4.2 2023-09-25 13:34:41 +00:00
renovate[bot] 52fb78411b chore(deps): update dependency @types/yargs to v17.0.25 2023-09-25 10:54:36 +00:00
renovate[bot] 05faca8045 chore(deps): update dependency eslint to v8.50.0 2023-09-24 18:47:44 +00:00
renovate[bot] a662b7d90e fix(universal-xml-plugin): update dependency fast-xml-parser to v4.3.1 2023-09-24 17:04:12 +00:00
renovate[bot] 26a6c62512 fix(support): update dependency @types/pluralize to v0.0.31 2023-09-24 13:27:56 +00:00
renovate[bot] 03b2aa6b6e fix(support): update dependency teen_process to v2.0.27 2023-09-24 10:17:14 +00:00
renovate[bot] 595d460ac8 fix(support): update definitelytyped 2023-09-24 00:27:11 +00:00
renovate[bot] 34603c8852 chore(docutils): update dependency mkdocs-material to v9.4.1 2023-09-23 16:30:00 +00:00
renovate[bot] 57daa4114a chore(deps): update dependency eslint-import-resolver-typescript to v3.6.1 2023-09-23 13:01:48 +00:00
renovate[bot] 2d3c1d797d chore(workflows): update actions/checkout digest to 8ade135 2023-09-23 09:28:02 +00:00
renovate[bot] 78f33aee09 chore(docutils): update dependency mkdocs-material to v9.4.0 2023-09-22 12:25:00 +00:00
renovate[bot] 34d978e850 fix(execute-driver-plugin): update dependency webdriverio to v8.16.12 2023-09-22 09:06:20 +00:00
renovate[bot] 8c9cce09c8 fix(universal-xml-plugin): update dependency fast-xml-parser to v4.3.0 2023-09-21 15:54:11 +00:00
renovate[bot] 331171dd8c fix(base-driver): update dependency http-status-codes to v2.3.0 2023-09-21 12:06:33 +00:00
renovate[bot] 19954c4b13 chore(docutils): update dependency mkdocs-material-extensions to v1.2 2023-09-21 09:37:30 +00:00
renovate[bot] bc72c6676a fix(support): update dependency teen_process to v2.0.24 2023-09-20 21:41:59 +00:00
renovate[bot] cef37d3ee3 fix(execute-driver-plugin): update dependency webdriverio to v8.16.11 2023-09-20 19:01:57 +00:00
renovate[bot] d3c7bfeb3a chore(deps): update dependency @types/node to v18.17.18 2023-09-20 15:29:46 +00:00
renovate[bot] 91e34d7153 chore(deps): update dependency ws to v8.14.2 2023-09-20 14:00:02 +00:00
Chris Sawer 1d8d2b0e1a docs: Use load_capabilities to fix for Appium-Python-Client 3.0.0 (#19177) 2023-09-20 12:28:32 +02:00
renovate[bot] 23cba266f2 chore(support): update dependency sharp to v0.32.6 2023-09-19 19:56:24 +00:00
renovate[bot] 3f807e5585 chore(docutils): update dependency mkdocs-material to v9.3.2 2023-09-19 16:06:45 +00:00
renovate[bot] 5862a73fe5 chore(docutils): update dependency mkdocs to v1.5.3 2023-09-19 14:56:44 +00:00
renovate[bot] 8e5704625d chore(deps): update eslint-related packages to v6.7.2 2023-09-19 11:27:11 +00:00
renovate[bot] 1b0459edd6 fix(support): update dependency teen_process to v2.0.23 2023-09-16 19:56:31 +00:00
renovate[bot] b6a76ce91e fix(support): update definitelytyped 2023-09-16 13:25:08 +00:00
renovate[bot] 48be0f83b0 fix(execute-driver-plugin): update dependency webdriverio to v8.16.10 2023-09-16 10:40:39 +00:00
Mykola Mokhnach de02ed87fc fix: Use pathToRegexp to match websocket endpoints (#19162) 2023-09-15 19:09:10 +02:00
renovate[bot] 8dcdab323a chore(workflows): update actions/checkout action to v4 (#19121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 17:03:30 +02:00
renovate[bot] 49b3434c2b fix(test-support): update dependency sinon to v16 (#19161)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 17:03:15 +02:00
renovate[bot] 2ef40febdc fix(support): update dependency teen_process to v2.0.19 2023-09-15 13:38:11 +00:00
renovate[bot] 396f671f99 chore(deps): update dependency @types/node to v18.17.16 2023-09-15 11:08:22 +00:00
renovate[bot] c63a37b905 chore(deps): update dependency lerna to v7.3.0 2023-09-14 21:49:47 +00:00
renovate[bot] 3e7360021d fix(support): update definitelytyped 2023-09-14 20:28:49 +00:00
renovate[bot] c81e99fd80 fix(doctor): update dependency appium-adb to v9.14.11 2023-09-14 15:27:04 +00:00
renovate[bot] 4b09c323d9 fix(execute-driver-plugin): update dependency webdriverio to v8.16.7 2023-09-14 09:50:07 +00:00
renovate[bot] d2f19aab93 fix(support): update dependency @types/teen_process to v2.0.1 2023-09-13 08:27:44 +00:00
renovate[bot] 73aa01786d fix(support): update dependency uuid to v9.0.1 2023-09-12 17:47:34 +00:00
renovate[bot] 809b2daea5 fix(doctor): update dependency appium-adb to v9.14.10 2023-09-12 14:16:14 +00:00
renovate[bot] ff404a09b7 chore(docutils): update dependency mkdocs-material to v9.3.1 2023-09-12 10:18:41 +00:00
renovate[bot] 5b063e4488 chore(deps): update eslint-related packages to v6.7.0 2023-09-12 06:06:21 +00:00
renovate[bot] 3fc87ac669 chore(deps): update dependency eslint to v8.49.0 2023-09-11 15:19:32 +00:00
renovate[bot] ffeebc74b7 fix(support): update dependency teen_process to v2.0.18 2023-09-11 12:12:22 +00:00
renovate[bot] a0c4b84fb7 fix(support): update dependency teen_process to v2.0.13 2023-09-10 12:58:41 +00:00
renovate[bot] 7625218c22 fix(execute-driver-plugin): update dependency webdriverio to v8.16.6 2023-09-10 10:23:24 +00:00
renovate[bot] 8de343d37d chore(deps): update dependency ws to v8.14.1 2023-09-09 20:24:51 +00:00
renovate[bot] 49f16a0949 chore(deps): update dependency conventional-changelog-conventionalcommits to v7.0.2 2023-09-09 15:03:13 +00:00
renovate[bot] 31408cc70a chore(deps): update dependency midnight-smoker to v7.0.2 2023-09-09 14:25:00 +00:00
renovate[bot] ee4dea6928 chore(deps): update dependency @types/node to v18.17.15 2023-09-09 10:00:48 +00:00
renovate[bot] 862225c1d8 fix(execute-driver-plugin): update dependency webdriverio to v8.16.5 2023-09-08 11:33:03 +00:00
Mykola Mokhnach 5926919177 feat(base-driver): Add server support of TLS and SPDY protocols (#19105) 2023-09-08 08:02:56 +02:00
renovate[bot] c87596bb64 chore(deps): update dependency ws to v8.14.0 2023-09-07 11:29:08 +00:00
renovate[bot] 84fefd214c fix(driver-test-support): update dependency @types/lodash to v4.14.198 2023-09-06 11:10:18 +00:00
renovate[bot] 5ec3199259 chore(deps): update eslint-related packages to v6.6.0 2023-09-05 21:45:38 +00:00
renovate[bot] fea8f8537d fix(execute-driver-plugin): update dependency webdriverio to v8.16.4 2023-09-05 18:31:45 +00:00
renovate[bot] 4916bde811 chore(docutils): update dependency mkdocs-material to v9.2.8 2023-09-05 12:45:43 +00:00
renovate[bot] 2714ed0b69 chore(deps): update definitelytyped 2023-09-05 10:30:08 +00:00
renovate[bot] 263bb43086 fix(support): update dependency archiver to v6.0.1 (#19111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-04 13:03:40 +02:00
renovate[bot] d1a4932409 fix(execute-driver-plugin): update dependency webdriverio to v8.16.3 2023-09-04 09:08:53 +00:00
renovate[bot] 2d3c5cd0b7 fix(execute-driver-plugin): update dependency webdriverio to v8.16.2 2023-09-03 17:05:47 +00:00
renovate[bot] a303378231 chore(docutils): update dependency mkdocs-material to v9.2.7 2023-09-03 12:55:56 +00:00
renovate[bot] 8d9ab88939 chore(deps): update dependency @types/node to v18.17.14 2023-09-03 11:06:57 +00:00
renovate[bot] 207700bc82 fix(execute-driver-plugin): update dependency webdriverio to v8.16.0 2023-09-02 18:27:49 +00:00
renovate[bot] 4950772846 chore(deps): update dependency tsd to v0.29.0 2023-09-02 17:23:57 +00:00
renovate[bot] d311efebfb chore(docutils): update dependency mkdocs-material to v9.2.6 2023-09-02 12:47:02 +00:00
renovate[bot] 3882ca9e92 chore(deps): update dependency @types/node to v18.17.13 2023-09-02 10:44:44 +00:00
Mykola Mokhnach e51d260395 tests: Remove forceful npm update 2023-09-02 08:45:24 +02:00
renovate[bot] 3ec80856e7 chore(deps): update dependency midnight-smoker to v7 (#19091)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-31 12:17:32 -07:00
renovate[bot]andJonathan Lipps 65b3787912 fix(tsconfig): update dependency @tsconfig/node14 to v14 (#19082)
* fix(tsconfig): update dependency @tsconfig/node14 to v14

* chore(execute-driver-plugin): use old node module resolution for wdio import

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jonathan Lipps <jlipps@gmail.com>
2023-08-31 12:17:08 -07:00
Mykola Mokhnach 7722767d80 chore(base-driver): Tune the log message for non-recognised capabilities (#19098) 2023-08-31 20:46:14 +02:00
renovate[bot] 6f51456da9 fix(support): update dependency which to v4 (#19095)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-31 19:21:27 +02:00
renovate[bot] 14631177cd chore(deps): update dependency conventional-changelog-conventionalcommits to v7 (#19074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-31 12:25:15 +02:00
renovate[bot] faca49690a fix(support): update dependency glob to v10 (#19094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-31 12:23:29 +02:00
renovate[bot] 81b077fdc9 fix(support): update definitelytyped 2023-08-31 09:53:13 +00:00
renovate[bot] 5a922ea716 chore(deps): update dependency lerna to v7.2.0 2023-08-30 20:17:42 +00:00
renovate[bot] c5d6df7a00 fix(support): update dependency teen_process to v2.0.12 2023-08-30 16:44:34 +00:00
renovate[bot] 545576a740 fix(execute-driver-plugin): update dependency webdriverio to v8.15.10 2023-08-30 12:09:02 +00:00
renovate[bot] 1377c0290f chore(deps): update dependency prettier to v3.0.3 2023-08-30 10:19:46 +00:00
renovate[bot] 737e5e9c38 chore(deps): update eslint-related packages to v6.5.0 2023-08-29 19:12:32 +00:00
renovate[bot] a0f59d0594 fix(support): update dependency @types/semver to v7.5.1 2023-08-29 17:22:42 +00:00
renovate[bot] 1a3d408e23 fix(docutils): update dependency yaml to v2.3.2 2023-08-29 14:46:19 +00:00
renovate[bot] 8819d3ef92 chore(deps): update dependency json-schema-to-typescript to v13.1.1 2023-08-29 09:28:49 +00:00
renovate[bot] 9f700bfdf9 fix(doctor): update dependency appium-adb to v9.14.9 2023-08-29 07:12:38 +00:00
renovate[bot] bc1b56a3c1 fix(support): update dependency teen_process to v2.0.10 2023-08-28 15:58:48 +00:00
renovate[bot] de68a1f388 chore(docutils): update dependency mkdocs-material to v9.2.5 2023-08-28 12:37:47 +00:00
renovate[bot] 66fb651a18 chore(deps): update dependency @types/node to v18.17.12 2023-08-28 10:38:57 +00:00
renovate[bot] 08913cddde fix(support): update dependency axios to v1.5.0 2023-08-27 18:56:03 +00:00
renovate[bot] b0b68334c5 chore(deps): update dependency json-schema-to-typescript to v13.1.0 2023-08-27 16:06:29 +00:00
renovate[bot] 427bc8eb0c fix(execute-driver-plugin): update dependency webdriverio to v8.15.9 2023-08-27 12:50:55 +00:00
renovate[bot] 7cc0c47679 chore(docutils): update dependency mkdocs-material to v9.2.4 2023-08-27 10:45:22 +00:00
renovate[bot] fe7ed5d91f chore(deps): update dependency eslint to v8.48.0 2023-08-26 17:14:37 +00:00
renovate[bot] 6c7f3ef670 fix(support): update dependency teen_process to v2.0.9 2023-08-26 12:21:18 +00:00
renovate[bot] b510fad303 fix(execute-driver-plugin): update dependency webdriverio to v8.15.8 2023-08-26 10:35:46 +00:00
renovate[bot] 89595c3915 chore(deps): update dependency midnight-smoker to v6 (#19046)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 13:56:28 -07:00
renovate[bot]andMykola Mokhnach 827ec98a8a chore(eslint-config-appium-ts): update eslint-related packages (major) (#19048)
* chore(eslint-config-appium-ts): update eslint-related packages

* chore(eslint-config-appium-ts): update eslint-related packages

* Tune the config

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Mykola Mokhnach <mokhnach@gmail.com>
2023-08-25 19:07:15 +02:00
renovate[bot]andMykola Mokhnach 641da6ddd5 chore(deps): update dependency lerna to v7 (#19019)
* chore(deps): update dependency lerna to v7

* update lerna config

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Mykola Mokhnach <mokhnach@gmail.com>
2023-08-25 18:33:44 +02:00
renovate[bot] d85b2161b5 fix(driver-test-support): update dependency chai to v4.3.8 (#19059)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 16:31:29 +02:00
renovate[bot] f8039a70ca fix(doctor): update dependency appium-adb to v9.14.7 (#19058)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 16:31:11 +02:00
renovate[bot] ae59d0b218 chore(deps): update dependency @types/node to v18.17.11 2023-08-25 12:51:42 +00:00
renovate[bot] 8599c2a0b3 chore(workflows): update actions/checkout digest to f43a0e5 2023-08-25 11:14:46 +00:00
renovate[bot] 72a806bec7 fix(images-plugin): update dependency lru-cache to v10 (#19050) 2023-08-25 10:42:28 +02:00
renovate[bot] a3245dcf2b fix(support): update dependency archiver to v6 (#19051)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 14:57:01 +02:00
renovate[bot] 73b092ba11 chore(deps): update dependency prettier to v3 (#19047)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 14:56:31 +02:00
renovate[bot] f1d1b7d6a0 chore(deps): update dependency @types/node to v18.17.9 2023-08-24 06:15:40 +00:00
renovate[bot] d21b9e6a90 chore(deps): update dependency lint-staged to v14 (#19029)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 07:37:54 +02:00
renovate[bot] 0830fd8257 fix(execute-driver-plugin): update dependency webdriverio to v8.15.6 2023-08-23 18:18:04 +00:00
Jonathan Lipps a01a91d737 chore: publish
- appium@2.1.3
 - @appium/base-driver@9.3.20
 - @appium/base-plugin@2.2.20
 - @appium/docutils@0.4.9
 - @appium/fake-plugin@3.1.24
2023-08-23 10:47:19 -07:00
renovate[bot] 210b468a92 chore(deps): update dependency midnight-smoker to v5 (#19042)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-23 19:23:28 +02:00
Mykola Mokhnach 315a5e6cc7 fix(base-driver): Avoid RangeError while caching the response data (#19043) 2023-08-23 19:20:55 +02:00
Kazuaki Matsuo 4851721295 chore: use the same typescript version in docutils (#19036) 2023-08-23 14:30:21 +02:00
hijack-x abcf0d451f fix(base-driver): fix the LRUCache.dispose callback param order (#19037) 2023-08-23 14:12:24 +02:00
renovate[bot] 5aae2190bf chore(docutils): update dependency mkdocs-material to v9.2.3 2023-08-23 11:40:34 +00:00
renovate[bot] eabcbfbff7 chore(deps): update definitelytyped 2023-08-23 07:30:40 +00:00
Jonathan Lipps 524447ee05 chore: publish
- appium@2.1.2
 - @appium/base-driver@9.3.19
 - @appium/base-plugin@2.2.19
 - @appium/doctor@2.0.25
 - @appium/docutils@0.4.8
 - @appium/driver-test-support@0.4.14
 - @appium/execute-driver-plugin@3.0.17
 - @appium/fake-plugin@3.1.23
 - @appium/plugin-test-support@0.3.21
 - @appium/support@4.1.6
 - @appium/test-support@3.0.24
 - @appium/tsconfig@0.3.1
 - @appium/types@0.13.4
 - @appium/universal-xml-plugin@1.0.12
2023-08-22 11:55:13 -07:00
Jonathan Lipps b2560b5c1d fix(universal-xml-plugin): actually export plugin using correct CJS syntax (#19032) 2023-08-22 11:27:31 -07:00
renovate[bot]andJonathan Lipps b608db91a8 fix(execute-driver-plugin): update dependency webdriverio to v8 (#18095)
* fix(execute-driver-plugin): update dependency webdriverio to v8

* fix(execute-driver-plugin): upgrade wdio usage to v8

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jonathan Lipps <jlipps@gmail.com>
2023-08-22 11:26:47 -07:00
renovate[bot] b900c60dac chore(docutils): update dependency mkdocs-material to v9.2.2 2023-08-22 15:16:24 +00:00
renovate[bot] 7e47adf59d chore(deps): update dependency @types/node to v18.17.7 2023-08-22 14:42:21 +00:00
renovate[bot] 4e4eaad6b6 fix(execute-driver-plugin): update dependency webdriverio to v7.32.4 2023-08-22 09:32:19 +00:00
renovate[bot] bc8cd52693 chore(deps): update eslint-related packages 2023-08-21 20:04:37 +00:00
Jonathan Lipps 820428b769 chore: publish
- appium@2.1.1
 - @appium/base-driver@9.3.18
 - @appium/base-plugin@2.2.18
 - @appium/doctor@2.0.24
 - @appium/docutils@0.4.7
 - @appium/driver-test-support@0.4.13
 - @appium/fake-driver@5.2.8
 - @appium/fake-plugin@3.1.22
 - @appium/images-plugin@2.1.4
 - @appium/opencv@2.1.3
 - @appium/support@4.1.5
 - @appium/test-support@3.0.23
 - @appium/universal-xml-plugin@1.0.11
2023-08-21 09:54:56 -07:00
renovate[bot] 034a51b686 chore(deps): update dependency lint-staged to v13.3.0 (#19017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-21 14:40:32 +02:00
renovate[bot] f2cff24685 fix(universal-xml-plugin): update dependency xpath to v0.0.33 (#18952) 2023-08-21 14:40:14 +02:00
Mykola Mokhnach 53bfc68eee fix(base-driver): Fix possible NPE while cleaning up the state listener (#19020) 2023-08-21 13:56:55 +02:00
renovate[bot] dce45bdf83 chore(deps): update commitlint monorepo 2023-08-21 09:51:28 +00:00
renovate[bot] e73e47de18 fix(support): update dependency archiver to v5.3.2 2023-08-20 18:58:21 +00:00
renovate[bot] a080b72920 fix(driver-test-support): update dependency @types/lodash to v4.14.197 2023-08-20 16:55:18 +00:00
renovate[bot] c8e9059711 chore(support): update dependency sharp to v0.32.5 2023-08-20 12:38:08 +00:00
renovate[bot] d5f3a288c2 fix(doctor): update dependency appium-adb to v9.14.5 2023-08-20 09:37:10 +00:00
renovate[bot] 998e2586a7 chore(deps): update dependency conventional-changelog-conventionalcommits to v6 (#18963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-19 18:10:15 +02:00
renovate[bot]andMykola Mokhnach 78a22b2a1c chore(deps): update dependency @types/node to v18.17.6 (#18953)
* chore(deps): update dependency @types/node to v18.17.6

* Add ignore

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Mykola Mokhnach <mokhnach@gmail.com>
2023-08-19 18:09:57 +02:00
renovate[bot] a5876c8f26 chore(deps): update dependency eslint-plugin-import to v2.28.1 2023-08-19 13:28:47 +00:00
renovate[bot] 4ef0c49b24 chore(workflows): update actions/setup-node digest to 5e21ff4 2023-08-19 09:04:55 +00:00
renovate[bot] c18b43f2bd chore(deps): update dependency cpy-cli to v5 (#18964)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-19 08:56:39 +02:00
Mykola Mokhnach 2f69e6db2a chore(base-driver): Improve bad parameters error message (#19002) 2023-08-19 08:27:31 +02:00
Mykola Mokhnach ed8e83c76c fix(base-driver): Respect basic auth credentials if provided (#19000) 2023-08-18 18:46:03 +02:00
108 changed files with 12283 additions and 9426 deletions
+7 -13
View File
@@ -1,6 +1,8 @@
name: Appium Build
on:
push:
branches:
- master
# this list of paths could potentially impact the build
paths:
- '**/tsconfig*.json'
@@ -20,6 +22,8 @@ on:
- '!**/sample-code/**'
- '!packages/*/docs/**'
pull_request:
branches:
- master
paths:
- '**/tsconfig*.json'
- 'packages/base-driver/static/**/*'
@@ -66,22 +70,12 @@ jobs:
# - macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3
uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install latest npm (win)
if: ${{ matrix.os == 'windows-latest' }}
# for some reason there's a bug in upgrading npm on win, have to install a specific version first
# https://github.com/actions/setup-node/issues/623
run: |
npm install -g npm@8.3.1
npm install -g npm@latest
- name: Install latest npm (non-win)
if: ${{ matrix.os != 'windows-latest' }}
run: npm install -g npm
- name: Install dependencies
uses: bahmutov/npm-install@1a235c31658a322a3b024444759650ee6345c26d # tag=v1
with:
@@ -94,7 +88,7 @@ jobs:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Install dependencies
uses: bahmutov/npm-install@1a235c31658a322a3b024444759650ee6345c26d # tag=v1
with:
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Cleanup
run: |
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3
uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3
with:
node-version: ${{ matrix.node-version }}
- name: Install Appium
+5 -1
View File
@@ -2,6 +2,8 @@ name: Build Docs
on:
pull_request:
branches:
- master
paths:
- '**/typedoc.json'
- '**/tsconfig*.json'
@@ -16,6 +18,8 @@ on:
- '!**/test/**'
- '!**/sample-code/**'
push:
branches:
- master
paths:
- '**/typedoc.json'
- '**/tsconfig*.json'
@@ -35,7 +39,7 @@ jobs:
name: Docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Install dependencies (Node.js)
uses: bahmutov/npm-install@1a235c31658a322a3b024444759650ee6345c26d # tag=v1
with:
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
name: Run FOSSA Analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
ref: master
- name: Install dependencies
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- run: |
git config user.name github-actions
git config user.email github-actions@github.com
+5 -1
View File
@@ -1,11 +1,15 @@
name: Validate Renovate Configs
on:
push:
branches:
- master
paths:
- '.github/workflows/renovate.yml' # this file
- '.renovaterc.json'
- 'renovate/default.json'
pull_request:
branches:
- master
paths:
- '.github/workflows/renovate.yml' # this file
- '.renovaterc.json'
@@ -19,7 +23,7 @@ jobs:
name: Check Renovate Configs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Validate Renovate Config
uses: rinchsan/renovate-config-validator@1ea1e8514f6a33fdd71c40b0a5fa3512b9e7b936 # tag=v0
with:
+1 -4
View File
@@ -14,13 +14,10 @@
"version": {
"conventionalCommits": true,
"createRelease": "github",
"version": {
"allowBranch": "master"
}
"allowBranch": "master"
}
},
"ignoreChanges": ["**/test/**", "**/*.md"],
"useNx": false,
"useWorkspaces": true,
"version": "independent"
}
+10307 -8840
View File
File diff suppressed because it is too large Load Diff
+36 -36
View File
@@ -85,68 +85,68 @@
},
"devDependencies": {
"@colors/colors": "1.6.0",
"@commitlint/cli": "17.6.7",
"@commitlint/config-conventional": "17.6.7",
"@tsconfig/node14": "1.0.3",
"@types/chai": "4.3.5",
"@types/chai-as-promised": "7.1.5",
"@types/diff": "5.0.3",
"@types/mocha": "10.0.1",
"@types/node": "18.16.20",
"@types/semver": "7.5.0",
"@types/sinon": "10.0.16",
"@types/sinon-chai": "3.2.9",
"@types/source-map-support": "0.5.6",
"@types/teen_process": "2.0.0",
"@types/ws": "8.5.5",
"@types/yargs": "17.0.24",
"@typescript-eslint/eslint-plugin": "5.62.0",
"@typescript-eslint/parser": "5.62.0",
"asyncbox": "2.9.4",
"chai": "4.3.7",
"@commitlint/cli": "18.4.0",
"@commitlint/config-conventional": "18.4.0",
"@tsconfig/node14": "14.1.0",
"@types/chai": "4.3.10",
"@types/chai-as-promised": "7.1.8",
"@types/diff": "5.0.8",
"@types/mocha": "10.0.4",
"@types/node": "20.9.0",
"@types/semver": "7.5.5",
"@types/sinon": "10.0.20",
"@types/sinon-chai": "3.2.12",
"@types/source-map-support": "0.5.10",
"@types/teen_process": "2.0.3",
"@types/ws": "8.5.9",
"@types/yargs": "17.0.31",
"@typescript-eslint/eslint-plugin": "6.9.1",
"@typescript-eslint/parser": "6.9.1",
"asyncbox": "3.0.0",
"chai": "4.3.10",
"chai-as-promised": "7.1.1",
"chai-webdriverio-async": "2.7.0",
"conventional-changelog-conventionalcommits": "5.0.0",
"cpy-cli": "4.2.0",
"eslint": "8.46.0",
"eslint-config-prettier": "8.10.0",
"conventional-changelog-conventionalcommits": "7.0.2",
"cpy-cli": "5.0.0",
"eslint": "8.53.0",
"eslint-config-prettier": "9.0.0",
"eslint-find-rules": "4.1.0",
"eslint-import-resolver-typescript": "3.5.5",
"eslint-plugin-import": "2.28.0",
"eslint-plugin-mocha": "10.1.0",
"eslint-import-resolver-typescript": "3.6.1",
"eslint-plugin-import": "2.29.0",
"eslint-plugin-mocha": "10.2.0",
"eslint-plugin-promise": "6.1.1",
"fancy-log": "2.0.0",
"finalhandler": "1.2.0",
"get-port": "5.1.1",
"handlebars": "4.7.8",
"husky": "8.0.3",
"json-schema-to-typescript": "13.0.2",
"lerna": "6.6.2",
"lint-staged": "13.2.3",
"json-schema-to-typescript": "13.1.1",
"lerna": "7.4.2",
"lint-staged": "15.0.2",
"log-symbols": "4.1.0",
"midnight-smoker": "2.0.4",
"midnight-smoker": "7.0.4",
"mjpeg-consumer": "2.0.0",
"mjpeg-server": "0.3.1",
"mocha": "10.2.0",
"mocha-chai-jest-snapshot": "1.1.4",
"npm-run-all": "4.1.5",
"prettier": "2.8.8",
"prettier": "3.0.3",
"rewiremock": "3.14.5",
"rimraf": "5.0.1",
"rimraf": "5.0.5",
"serve-static": "1.15.0",
"sinon": "15.2.0",
"sinon": "16.1.3",
"sinon-chai": "3.7.0",
"sync-monorepo-packages": "1.0.2",
"through2": "4.0.2",
"ts-node": "10.9.1",
"tsd": "0.28.1",
"tsd": "0.29.0",
"typedoc": "0.23.28",
"typedoc-plugin-markdown": "3.14.0",
"typedoc-plugin-resolve-crossmodule-references": "0.3.3",
"typescript": "5.0.4",
"validate.js": "0.13.1",
"webdriverio": "7.32.3",
"ws": "8.13.0",
"webdriverio": "8.21.0",
"ws": "8.14.2",
"yaml-js": "0.3.1"
},
"engines": {
+102
View File
@@ -3,6 +3,108 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.2.2](https://github.com/appium/appium/compare/appium@2.2.1...appium@2.2.2) (2023-11-14)
### Bug Fixes
* **appium:** Load plugins in the same order that was used for the CLI command ([#19388](https://github.com/appium/appium/issues/19388)) ([7124eb6](https://github.com/appium/appium/commit/7124eb6075be0fabd83e9023a47b5a8f4c181a52))
* **docutils:** update dependency yaml to v2.3.4 ([a215a89](https://github.com/appium/appium/commit/a215a89f684c50da24d669d60a73fb6268b05c7f))
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
* **support:** update dependency axios to v1.6.0 ([699c493](https://github.com/appium/appium/commit/699c49306c38e222d618a9611482b06a3e6806aa))
* **support:** update dependency axios to v1.6.1 ([9b14205](https://github.com/appium/appium/commit/9b14205288ef09fd4a1144fc93c82b2bb2ed2ec0))
* **support:** update dependency teen_process to v2.0.57 ([1fbd503](https://github.com/appium/appium/commit/1fbd503a66b965a9b32bbb6702062861a8480333))
* **support:** update dependency teen_process to v2.0.63 ([fa57192](https://github.com/appium/appium/commit/fa571925b7ac980cc99c8d23f659420eacd8546c))
* **support:** update dependency teen_process to v2.0.64 ([332bb59](https://github.com/appium/appium/commit/332bb59ee3fdd14c03f6b3c4fd6587a30319d568))
* **support:** update dependency teen_process to v2.0.66 ([3205b5d](https://github.com/appium/appium/commit/3205b5d06f073f1e5c7735c6e36ad08fdf091182))
* **support:** update dependency teen_process to v2.0.67 ([3b5ae2a](https://github.com/appium/appium/commit/3b5ae2ab17c74c9890b53c081aec146152f11c7a))
* **support:** update dependency teen_process to v2.0.73 ([8e453be](https://github.com/appium/appium/commit/8e453bed3f440c1dcf82f016f7d4431365b9cdff))
* **support:** update dependency teen_process to v2.0.75 ([fbb6fd9](https://github.com/appium/appium/commit/fbb6fd9a2780eb00c15584abeaf644a1fcdecb4d))
* **support:** update teen_process-related packages ([84d96db](https://github.com/appium/appium/commit/84d96dbae45dfe56218d32330f8ff2d26b750fb7))
* **support:** update teen_process-related packages ([3d0b97c](https://github.com/appium/appium/commit/3d0b97cae76c616da0aea5b92cebcd38d59263b7))
## [2.2.1](https://github.com/appium/appium/compare/appium@2.2.0...appium@2.2.1) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [2.2.0](https://github.com/appium/appium/compare/appium@2.1.3...appium@2.2.0) (2023-10-18)
### Features
* **base-driver:** Add server support of TLS and SPDY protocols ([#19105](https://github.com/appium/appium/issues/19105)) ([5926919](https://github.com/appium/appium/commit/5926919177e3df675723c80d800f933fdbda5824))
### Bug Fixes
* **appium:** Fix creation of logging prefixes ([#19212](https://github.com/appium/appium/issues/19212)) ([805f69d](https://github.com/appium/appium/commit/805f69de354ebf0b1e8ffeb64c85833b5d533b4c))
* **appium:** update dependency winston to v3.11.0 ([f697cda](https://github.com/appium/appium/commit/f697cda9af2b61344b55b5af0f2bfc1fd034334b))
* **docutils:** update dependency yaml to v2.3.2 ([1a3d408](https://github.com/appium/appium/commit/1a3d408e239e4a9a7070923a90aca70df1dda908))
* **docutils:** update dependency yaml to v2.3.3 ([caf600b](https://github.com/appium/appium/commit/caf600bffd5f25971d0270e9990b2640a671e366))
* **images-plugin:** update dependency lru-cache to v10 ([#19050](https://github.com/appium/appium/issues/19050)) ([72a806b](https://github.com/appium/appium/commit/72a806bec7c3a80747192d24dfd9d8286a751810))
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([3b44c7d](https://github.com/appium/appium/commit/3b44c7d8f5b89f9357dfe6bb56b54799bbe0a921))
* **support:** update definitelytyped ([595d460](https://github.com/appium/appium/commit/595d460ac8dc41d310f9e4f653acbad3c7fd50b9))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
* **support:** update definitelytyped ([3e73600](https://github.com/appium/appium/commit/3e7360021dba0f8e8967094476fe92646ba5e35b))
* **support:** update dependency @types/semver to v7.5.1 ([a0f59d0](https://github.com/appium/appium/commit/a0f59d05945e627602407d1d42e7a3a58861b11f))
* **support:** update dependency @types/teen_process to v2.0.1 ([d2f19aa](https://github.com/appium/appium/commit/d2f19aab935cc6ec00a51f042b5f02674a772198))
* **support:** update dependency axios to v1.5.0 ([08913cd](https://github.com/appium/appium/commit/08913cddde295f616f0fb376cc2cb71a9409a253))
* **support:** update dependency axios to v1.5.1 ([#19217](https://github.com/appium/appium/issues/19217)) ([3df047d](https://github.com/appium/appium/commit/3df047d128d5d032826c8f5fb605b019078b717d))
* **support:** update dependency teen_process to v2.0.10 ([bc1b56a](https://github.com/appium/appium/commit/bc1b56a3c162ed8686d3d7956c30eb1f7682b1a7))
* **support:** update dependency teen_process to v2.0.12 ([c5d6df7](https://github.com/appium/appium/commit/c5d6df7a000d64e8591a56ce5ef65baa2071a36b))
* **support:** update dependency teen_process to v2.0.13 ([a0c4b84](https://github.com/appium/appium/commit/a0c4b84fb7d3977b7a4ca0a07fadd49ee355791a))
* **support:** update dependency teen_process to v2.0.18 ([ffeebc7](https://github.com/appium/appium/commit/ffeebc74b72e5eadf658325e67708ae6ed5b8346))
* **support:** update dependency teen_process to v2.0.19 ([2ef40fe](https://github.com/appium/appium/commit/2ef40febdc717f54ea618ecfe1058b858fe2daf9))
* **support:** update dependency teen_process to v2.0.23 ([1b0459e](https://github.com/appium/appium/commit/1b0459edd656514d8706aab8e21cd4d40de2ec5d))
* **support:** update dependency teen_process to v2.0.24 ([bc72c66](https://github.com/appium/appium/commit/bc72c6676a5412b60e74bb143a223738ce059977))
* **support:** update dependency teen_process to v2.0.27 ([03b2aa6](https://github.com/appium/appium/commit/03b2aa6b6e45fa0ea24c4691b039255bc4399733))
* **support:** update dependency teen_process to v2.0.30 ([7cdb142](https://github.com/appium/appium/commit/7cdb1429a1104ad3699547f2a2dd9b237135891a))
* **support:** update dependency teen_process to v2.0.34 ([#19218](https://github.com/appium/appium/issues/19218)) ([c28fcef](https://github.com/appium/appium/commit/c28fcefa725fbce5a0464e57946051e3cb023d85))
* **support:** update dependency teen_process to v2.0.37 ([6d894be](https://github.com/appium/appium/commit/6d894bef6f377ebfdffdeb1adde7a72624844414))
* **support:** update dependency teen_process to v2.0.38 ([a32dc11](https://github.com/appium/appium/commit/a32dc1110125d0f1fac9c66c17f1309145a634c7))
* **support:** update dependency teen_process to v2.0.40 ([2837bcd](https://github.com/appium/appium/commit/2837bcdeb19532fe973a2902db5c8d730252d962))
* **support:** update dependency teen_process to v2.0.41 ([1a34396](https://github.com/appium/appium/commit/1a34396339f71d40353d323feaf78afcf2269fc9))
* **support:** update dependency teen_process to v2.0.42 ([e2a670e](https://github.com/appium/appium/commit/e2a670e1c4a0f061b0bfb08a6b534d9deb7bdd9c))
* **support:** update dependency teen_process to v2.0.45 ([ea731bf](https://github.com/appium/appium/commit/ea731bf117d680496fce453ac42cfee7f05ada60))
* **support:** update dependency teen_process to v2.0.48 ([eebc651](https://github.com/appium/appium/commit/eebc651f31c282baa7e77a6384d3ee8efc0072d6))
* **support:** update dependency teen_process to v2.0.50 ([ca3e5d9](https://github.com/appium/appium/commit/ca3e5d90e4c51fc1dda32154e1d77e65cb44fb54))
* **support:** update dependency teen_process to v2.0.9 ([6c7f3ef](https://github.com/appium/appium/commit/6c7f3ef670d441bdc4b693948a19dcbdc54e4764))
## [2.1.3](https://github.com/appium/appium/compare/appium@2.1.2...appium@2.1.3) (2023-08-23)
**Note:** Version bump only for package appium
## [2.1.2](https://github.com/appium/appium/compare/appium@2.1.1...appium@2.1.2) (2023-08-22)
**Note:** Version bump only for package appium
## [2.1.1](https://github.com/appium/appium/compare/appium@2.1.0...appium@2.1.1) (2023-08-21)
**Note:** Version bump only for package appium
## [2.1.0](https://github.com/appium/appium/compare/appium@2.0.1...appium@2.1.0) (2023-08-17)
+29
View File
@@ -0,0 +1,29 @@
---
title: Starting the Server with SSL/TLS/SPDY support
---
## Command Line Arguments
Since version 2.2 of the server there is a possibility to start it with SSL/TLS support. In order to enable secure connections to the server you need to provide the following command line arguments:
```bashs
appium server --ssl-cert-path=/path/to/cert.pem --ssl-key-path=/path/to/key.pem
```
Both arguments must be provided and should contain paths to a valid [X509 PEM](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/) certificate and its corresponding private key.
After the server is started use the `https` protocol and a client supporting SSL/TLS or [SPDY](https://en.wikipedia.org/wiki/SPDY) to communicate to it.
### Supported Features
Once a secure server socket is established it supports the following protocols: `['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1', 'http/1.0']`. See [the SPDY node module documentation](https://www.npmjs.com/package/spdy) to get more details about its features. All insecure client connections will be rejected by the server.
### Self-Signed Certificates
Use the following command in order to generate a self-signed certificate/key pair:
```bash
openssl req -nodes -new -x509 -keyout key.pem -out cert.pem -subj "/C=US/ST=State/L=City/O=company/OU=Com/CN=www.testserver.local"
```
Feel free to change the value of `-subj` in the command above with your matching details. The server should work just fine with a self-signed certificate, although you need to take care about a proper client setup, e.g. make sure it does not reject unauthorized certificates.
@@ -0,0 +1,102 @@
---
title: Write a Test (dotnet)
---
The [Appium dotnet Client](https://github.com/appium/dotnet-client/) is
an official Appium client in C#. This driver is an extension of the Selenium C# client. It has all the functionalities of the regular driver, but add Appium-specific methods on top of this. The driver is available on the public NuGet Gallery as [Appium.WebDriver](https://www.nuget.org/packages/Appium.WebDriver/).
Now, we get inside the directory and create a new [NUnit](https://nunit.org/) project. We will also add the references to the Appium.Net driver, and other dependencies.
```bash
cd dotnet-client
dotnet new nunit --name appiumtest
cd appiumtest
# This will install the latest 5.x version
dotnet add package Appium.WebDriver --prerelease
dotnet add package Newtonsoft.Json --version 13.0.3
```
Once this is done, your project should have a placeholder file `UnitTest1.cs`. We will replace the code to include the OpenQA namespaces, an initialization of the driver, and the actual test.
```C# title="UnitTest1.cs"
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Appium.Enums;
namespace appiumtest;
public class Tests
{
private AndroidDriver _driver;
[OneTimeSetUp]
public void SetUp()
{
var serverUri = new Uri(Environment.GetEnvironmentVariable("APPIUM_HOST") ?? "http://127.0.0.1:4723/");
var driverOptions = new AppiumOptions() {
AutomationName = AutomationName.AndroidUIAutomator2,
PlatformName = "Android",
DeviceName = "Android Emulator",
};
driverOptions.AddAdditionalAppiumOption("appPackage", "com.android.settings");
driverOptions.AddAdditionalAppiumOption("appActivity", ".Settings");
// NoReset assumes the app com.google.android is preinstalled on the emulator
driverOptions.AddAdditionalAppiumOption("noReset", true);
_driver = new AndroidDriver(serverUri, driverOptions, TimeSpan.FromSeconds(180));
_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
}
[OneTimeTearDown]
public void TearDown()
{
_driver.Dispose();
}
[Test]
public void TestBattery()
{
_driver.StartActivity("com.android.settings", ".Settings");
_driver.FindElement(By.XPath("//*[@text='Battery']")).Click();
}
}
```
!!! note
It's not within the scope of this guide to give a complete run-down on the dotnet client
library or everything that's happening here, so we'll leave the code itself unexplained in
detail for now. You may want to read up particularly on Appium
[Capabilities](../guides/caps.md) in addition to familiarizing yourself with the
[dotnet client driver documentation](https://github.com/appium/dotnet-client/) for a fuller explanation
of the various API commands you see and what their purpose is.
Basically, this code is doing the following:
1. Defining a set of "Capabilities" (parameters) to send to the Appium server so Appium knows what
kind of thing you want to automate. Some of these parameters can be overriden using environment variables.
1. Starting an Appium session on the built-in Android settings app.
1. Finding the "Battery" list item and clicking it.
1. Ending the Appium session.
That's it! Let's give it a try. Before you run the test, make sure that you have an Appium server
running in another terminal session, otherwise you'll get an error about not being able to connect
to one. Then, you can execute the script:
```bash
dotnet test
# Example output:
# Starting test execution, please wait...
# A total of 1 test files matched the specified pattern.
# Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 323 ms - appiumtest.dll (net7.0)
```
If all goes well, you'll see the Settings app open up and navigate to the "Battery" view in the emulator before the app closes again.
Congratulations, you've started your Appium journey! Read on for some next steps to explore.
@@ -23,7 +23,7 @@ According to the driver, in addition to a working Appium server, we also need to
- Set an environment variable pointing to the directory on disk where the Android tools are
installed. You can usually find the path to this directory in the Android Studio SDK manager. It
will contain the `platform-tools` and other directories. We need to define and persist the
environment variable as `ANDROID_HOME` (or alternatively `ANDROID_SDK_ROOT`).
environment variable as `ANDROID_HOME`.
- Use the Android SDK manager to download whichever Android platform we want to automate (for
example, API level 30)
- Install the Java JDK (for the most recent Android API levels, JDK 9 is required, otherwise JDK
+1
View File
@@ -24,6 +24,7 @@ nav:
- quickstart/test-py.md
- quickstart/test-java.md
- quickstart/test-rb.md
- quickstart/test-dotnet.md
- quickstart/next-steps.md
- CLI Reference:
- cli/index.md
+31 -30
View File
@@ -159,12 +159,13 @@ class AppiumDriver extends DriverCore {
// https://www.w3.org/TR/webdriver/#dfn-status
const statusObj = this._isShuttingDown
? {
ready: false,
message: 'The server is shutting down',
} : {
ready: true,
message: 'The server is ready to accept new connections',
};
ready: false,
message: 'The server is shutting down',
}
: {
ready: true,
message: 'The server is ready to accept new connections',
};
return {
...statusObj,
build: _.clone(getBuildInfo()),
@@ -193,18 +194,18 @@ class AppiumDriver extends DriverCore {
this.log.info(
driverVersion
? `Appium v${APPIUM_VER} creating new ${driverName} (v${driverVersion}) session`
: `Appium v${APPIUM_VER} creating new ${driverName} session`
: `Appium v${APPIUM_VER} creating new ${driverName} session`,
);
this.log.info(`Checking BaseDriver versions for Appium and ${driverName}`);
this.log.info(
AppiumDriver.baseVersion
? `Appium's BaseDriver version is ${AppiumDriver.baseVersion}`
: `Could not determine Appium's BaseDriver version`
: `Could not determine Appium's BaseDriver version`,
);
this.log.info(
driverBaseVersion
? `${driverName}'s BaseDriver version is ${driverBaseVersion}`
: `Could not determine ${driverName}'s BaseDriver version`
: `Could not determine ${driverName}'s BaseDriver version`,
);
}
@@ -280,7 +281,7 @@ class AppiumDriver extends DriverCore {
jsonwpCaps,
promoteAppiumOptions(/** @type {W3CAppiumDriverCaps} */ (w3cCapabilities)),
this.desiredCapConstraints,
defaultCapabilities ? promoteAppiumOptionsForObject(defaultCapabilities) : undefined
defaultCapabilities ? promoteAppiumOptionsForObject(defaultCapabilities) : undefined,
);
const {desiredCaps, processedJsonwpCapabilities, processedW3CCapabilities} =
@@ -324,7 +325,7 @@ class AppiumDriver extends DriverCore {
this.log.info(
`Applying relaxed security to '${InnerDriver.name}' as per ` +
`server command line argument. All insecure features will be ` +
`enabled unless explicitly disabled by --deny-insecure`
`enabled unless explicitly disabled by --deny-insecure`,
);
driverInstance.relaxedSecurityEnabled = true;
}
@@ -365,7 +366,7 @@ class AppiumDriver extends DriverCore {
await pendingDriversGuard.acquire(AppiumDriver.name, () => {
this.pendingDrivers[InnerDriver.name] = this.pendingDrivers[InnerDriver.name] || [];
otherPendingDriversData = _.compact(
this.pendingDrivers[InnerDriver.name].map((drv) => drv.driverData)
this.pendingDrivers[InnerDriver.name].map((drv) => drv.driverData),
);
this.pendingDrivers[InnerDriver.name].push(driverInstance);
});
@@ -375,7 +376,7 @@ class AppiumDriver extends DriverCore {
processedJsonwpCapabilities,
reqCaps,
processedW3CCapabilities,
[...runningDriversData, ...otherPendingDriversData]
[...runningDriversData, ...otherPendingDriversData],
);
protocol = driverInstance.protocol;
this.sessions[innerSessionId] = driverInstance;
@@ -389,7 +390,7 @@ class AppiumDriver extends DriverCore {
this.log.info(
`New ${InnerDriver.name} session created successfully, session ` +
`${innerSessionId} added to master session list`
`${innerSessionId} added to master session list`,
);
// set the New Command Timeout for the inner driver
@@ -399,13 +400,13 @@ class AppiumDriver extends DriverCore {
if (driverInstance.isW3CProtocol() && !_.isEmpty(w3cSettings)) {
this.log.info(
`Applying the initial values to Appium settings parsed from W3C caps: ` +
JSON.stringify(w3cSettings)
JSON.stringify(w3cSettings),
);
await driverInstance.updateSettings(w3cSettings);
} else if (driverInstance.isMjsonwpProtocol() && !_.isEmpty(jwpSettings)) {
this.log.info(
`Applying the initial values to Appium settings parsed from MJSONWP caps: ` +
JSON.stringify(jwpSettings)
JSON.stringify(jwpSettings),
);
await driverInstance.updateSettings(jwpSettings);
}
@@ -435,13 +436,13 @@ class AppiumDriver extends DriverCore {
for (const plugin of this.sessionPlugins[innerSessionId]) {
if (_.isFunction(plugin.onUnexpectedShutdown)) {
this.log.debug(
`Plugin ${plugin.name} defines an unexpected shutdown handler; calling it now`
`Plugin ${plugin.name} defines an unexpected shutdown handler; calling it now`,
);
try {
plugin.onUnexpectedShutdown(driver, cause);
} catch (e) {
this.log.warn(
`Got an error when running plugin ${plugin.name} shutdown handler: ${e}`
`Got an error when running plugin ${plugin.name} shutdown handler: ${e}`,
);
}
} else {
@@ -460,7 +461,7 @@ class AppiumDriver extends DriverCore {
} else {
this.log.warn(
`Failed to attach the unexpected shutdown listener. ` +
`Is 'onUnexpectedShutdown' method available for '${driver.constructor.name}'?`
`Is 'onUnexpectedShutdown' method available for '${driver.constructor.name}'?`,
);
}
}
@@ -476,13 +477,13 @@ class AppiumDriver extends DriverCore {
const data = _.compact(
_.values(this.sessions)
.filter((s) => s.constructor.name === InnerDriver.name)
.map((s) => s.driverData)
.map((s) => s.driverData),
);
for (const datum of data) {
if (!datum) {
throw new Error(
`Problem getting session data for driver type ` +
`${InnerDriver.name}; does it implement 'get driverData'?`
`${InnerDriver.name}; does it implement 'get driverData'?`,
);
}
}
@@ -503,7 +504,7 @@ class AppiumDriver extends DriverCore {
const curConstructorName = this.sessions[sessionId].constructor.name;
otherSessionsData = _.toPairs(this.sessions)
.filter(
([key, value]) => value.constructor.name === curConstructorName && key !== sessionId
([key, value]) => value.constructor.name === curConstructorName && key !== sessionId,
)
.map(([, value]) => value.driverData);
const dstSession = this.sessions[sessionId];
@@ -545,7 +546,7 @@ class AppiumDriver extends DriverCore {
this.log.debug(`Cleaning up ${util.pluralize('active session', sessionsCount, true)}`);
const cleanupPromises = force
? _.values(this.sessions).map((drv) =>
drv.startUnexpectedShutdown(reason && new Error(reason))
drv.startUnexpectedShutdown(reason && new Error(reason)),
)
: _.keys(this.sessions).map((id) => this.deleteSession(id));
for (const cleanupPromise of cleanupPromises) {
@@ -591,7 +592,7 @@ class AppiumDriver extends DriverCore {
// to handle a given command, a plugin should either implement that command as a plugin
// instance method or it should implement a generic 'handle' method
return this.pluginsForSession(sessionId).filter(
(p) => _.isFunction(p[cmd]) || _.isFunction(p.handle)
(p) => _.isFunction(p[cmd]) || _.isFunction(p.handle),
);
}
@@ -667,7 +668,7 @@ class AppiumDriver extends DriverCore {
// newCommandTimeout will be cleared. So we do it here as well.
if (plugins.length && dstSession) {
this.log.debug(
'Clearing new command timeout pre-emptively since plugin(s) will handle this command'
'Clearing new command timeout pre-emptively since plugin(s) will handle this command',
);
await dstSession.clearNewCommandTimeout();
}
@@ -704,7 +705,7 @@ class AppiumDriver extends DriverCore {
return await dstSession.proxyCommand(
reqForProxy.originalUrl,
reqForProxy.method,
reqForProxy.body
reqForProxy.body,
);
}
@@ -748,7 +749,7 @@ class AppiumDriver extends DriverCore {
) {
this.log.debug(
'Restarting new command timeout via umbrella driver since plugin did not ' +
'allow default handler to execute'
'allow default handler to execute',
);
await dstSession.startNewCommandTimeout();
}
@@ -760,7 +761,7 @@ class AppiumDriver extends DriverCore {
const sessionId = _.first(res.value);
this.log.info(
`Promoting ${this.sessionlessPlugins.length} sessionless plugins to be attached ` +
`to session ID ${sessionId}`
`to session ID ${sessionId}`,
);
this.sessionPlugins[sessionId] = this.sessionlessPlugins;
this.sessionlessPlugins = [];
@@ -812,7 +813,7 @@ class AppiumDriver extends DriverCore {
this.log.info(
`Command '${cmd}' was *not* handled by the following behaviours or plugins, even ` +
`though they were registered to handle it: ${JSON.stringify(didntHandle)}. The ` +
`command *was* handled by these: ${JSON.stringify(didHandle)}.`
`command *was* handled by these: ${JSON.stringify(didHandle)}.`,
);
}
}
@@ -885,7 +886,7 @@ export class NoDriverProxyCommandError extends Error {
`The default behavior for this command was to proxy, but the driver ` +
`did not have the 'proxyCommand' method defined. To fully support ` +
`plugins, drivers should have 'proxyCommand' set to a jwpProxy object's ` +
`'command()' method, in addition to the normal 'proxyReqRes'`
`'command()' method, in addition to the normal 'proxyReqRes'`,
);
}
}
+2 -2
View File
@@ -30,7 +30,7 @@ export const KNOWN_PLUGINS = Object.freeze(
'execute-driver': '@appium/execute-driver-plugin',
'relaxed-caps': '@appium/relaxed-caps-plugin',
'universal-xml': '@appium/universal-xml-plugin',
})
}),
);
// This is a map of driver names to npm packages representing those drivers.
@@ -46,7 +46,7 @@ export const KNOWN_DRIVERS = Object.freeze(
safari: 'appium-safari-driver',
gecko: 'appium-geckodriver',
chromium: 'appium-chromium-driver',
})
}),
);
/**
+22 -6
View File
@@ -38,14 +38,30 @@ export async function loadExtensions(appiumHome) {
* @returns {PluginNameMap} Mapping of PluginClass to name
*/
export function getActivePlugins(pluginConfig, usePlugins = []) {
/** @type {string[]} */
let filteredPluginNames = [];
if (usePlugins.length === 1 && usePlugins[0] === USE_ALL_PLUGINS) {
filteredPluginNames = _.keys(pluginConfig.installedExtensions);
} else {
// It is important to load plugins in the same order that was used while enumerating them
for (const pluginName of usePlugins) {
if (pluginName in pluginConfig.installedExtensions) {
filteredPluginNames.push(pluginName);
} else if (pluginName === USE_ALL_PLUGINS) {
throw new Error(
`The reserved plugin name '${pluginName}' cannot be combined with other names.`
);
} else {
throw new Error(
`Could not load the plugin '${pluginName}' because it is not installed. ` +
`Only the following plugins are available: ${_.keys(pluginConfig.installedExtensions)}`
);
}
}
}
return new Map(
_.compact(
Object.keys(pluginConfig.installedExtensions)
.filter(
(pluginName) =>
_.includes(usePlugins, pluginName) ||
(usePlugins.length === 1 && usePlugins[0] === USE_ALL_PLUGINS)
)
filteredPluginNames
.map((pluginName) => {
try {
log.info(`Attempting to load plugin ${pluginName}...`);
+2 -1
View File
@@ -1,5 +1,6 @@
import {logger} from '@appium/support';
let log = logger.getLogger('Appium');
export const APPIUM_LOGGER_NAME = 'Appium';
let log = logger.getLogger(APPIUM_LOGGER_NAME);
export default log;
+17 -28
View File
@@ -1,6 +1,7 @@
import npmlog from 'npmlog';
import {createLogger, format, transports} from 'winston';
import {fs, logger} from '@appium/support';
import { APPIUM_LOGGER_NAME } from './logger';
import _ from 'lodash';
// set up distributed logging before everything else
@@ -64,8 +65,7 @@ const stripColorFormat = format(function stripColor(info) {
function createConsoleTransport(args, logLvl) {
return new transports.Console({
// `name` is unsupported per winston's type declarations
// @ts-expect-error
// @ts-expect-error The 'name' property should exist
name: 'console',
handleExceptions: true,
exitOnError: false,
@@ -73,14 +73,6 @@ function createConsoleTransport(args, logLvl) {
level: logLvl,
stderrLevels: ['error'],
format: format.combine(
format(function adjustDebug(info) {
// prepend debug marker, and shift to `info` log level
if (info.level === 'debug') {
info.level = 'info';
info.message = `[debug] ${info.message}`;
}
return info;
})(),
timestampFormat,
args.logNoColors ? stripColorFormat : colorizeFormat,
format.printf(function printInfo(info) {
@@ -92,7 +84,7 @@ function createConsoleTransport(args, logLvl) {
function createFileTransport(args, logLvl) {
return new transports.File({
// @ts-expect-error
// @ts-expect-error The 'name' property should exist
name: 'file',
filename: args.logFile,
maxFiles: 1,
@@ -121,7 +113,7 @@ function createHttpTransport(args, logLvl) {
}
return new transports.Http({
// @ts-expect-error
// @ts-expect-error The 'name' property should exist
name: 'http',
host,
port,
@@ -215,22 +207,19 @@ async function init(args) {
});
// Capture logs emitted via npmlog and pass them through winston
npmlog.on('log', (logObj) => {
const winstonLevel = npmToWinstonLevels[logObj.level] || 'info';
let msg = logObj.message;
if (logObj.prefix) {
const prefix = `[${logObj.prefix}]`;
if (args.logNoColors) {
msg = `${prefix} ${msg}`;
} if (prefix === '[Appium]') {
msg = `${prefix.magenta} ${msg}`;
} else {
msg = `${getColorizedPrefix(prefix)} ${msg}`;
}
log[winstonLevel](msg);
if (args.logHandler && _.isFunction(args.logHandler)) {
args.logHandler(logObj.level, msg);
}
npmlog.on('log', ({level, message, prefix}) => {
const winstonLevel = npmToWinstonLevels[level] || 'info';
let msg = message;
if (prefix) {
const decoratedPrefix = `[${prefix}]`;
const toColorizedDecoratedPrefix = () => prefix === APPIUM_LOGGER_NAME
? decoratedPrefix.magenta
: getColorizedPrefix(decoratedPrefix);
msg = `${args.logNoColors ? decoratedPrefix : toColorizedDecoratedPrefix()} ${msg}`;
}
log[winstonLevel](msg);
if (args.logHandler && _.isFunction(args.logHandler)) {
args.logHandler(level, msg);
}
});
}
+21 -20
View File
@@ -92,7 +92,7 @@ function logNonDefaultArgsWarning(args) {
function logDefaultCapabilitiesWarning(caps) {
logger.info(
'Default capabilities, which will be added to each request ' +
'unless overridden by desired capabilities:'
'unless overridden by desired capabilities:',
);
inspect(caps);
}
@@ -144,7 +144,7 @@ function getExtraMethodMap(driverClasses, pluginClasses) {
...map,
...(klass.newMethodMap ?? {}),
}),
{}
{},
);
}
@@ -173,12 +173,12 @@ async function prepareAppiumHome(name, appiumHome) {
throw new Error(
`The path '${appiumHome}' provided in the ${name} must point ` +
`to a valid folder writeable for the current user account '${os.userInfo().username}'. ` +
`Original error: ${err.message}`
`Original error: ${err.message}`,
);
}
if (!stat.isDirectory()) {
throw new Error(
`The path '${appiumHome}' provided in the ${name} must point to a valid folder`
`The path '${appiumHome}' provided in the ${name} must point to a valid folder`,
);
}
try {
@@ -187,7 +187,7 @@ async function prepareAppiumHome(name, appiumHome) {
throw new Error(
`The folder path '${appiumHome}' provided in the ${name} must be ` +
`writeable for the current user account '${os.userInfo().username}. ` +
`Original error: ${e.message}`
`Original error: ${e.message}`,
);
}
return appiumHome;
@@ -250,7 +250,7 @@ async function init(args) {
throw new Error(
`Errors in config file ${configResult.filepath}:\n ${
configResult.reason ?? configResult.errors
}`
}`,
);
}
@@ -274,23 +274,23 @@ async function init(args) {
if (serverArgs.logFilters) {
const {issues, rules} = await logFactory.loadSecureValuesPreprocessingRules(
serverArgs.logFilters
serverArgs.logFilters,
);
if (!_.isEmpty(issues)) {
throw new Error(
`The log filtering rules config '${serverArgs.logFilters}' has issues: ` +
JSON.stringify(issues, null, 2)
JSON.stringify(issues, null, 2),
);
}
if (_.isEmpty(rules)) {
logger.warn(
`Found no log filtering rules in '${serverArgs.logFilters}'. Is that expected?`
`Found no log filtering rules in '${serverArgs.logFilters}'. Is that expected?`,
);
} else {
logger.info(
`Loaded ${util.pluralize('filtering rule', rules.length, true)} from '${
serverArgs.logFilters
}'`
}'`,
);
}
}
@@ -298,7 +298,7 @@ async function init(args) {
const appiumDriver = new AppiumDriver(
/** @type {import('@appium/types').DriverOpts<import('./appium').AppiumDriverConstraints>} */ (
serverArgs
)
),
);
// set the config on the umbrella driver so it can match drivers to caps
appiumDriver.driverConfig = driverConfig;
@@ -342,14 +342,12 @@ function logServerAddress(url) {
const interfaces = fetchInterfaces(urlObj.hostname === V4_BROADCAST_IP ? 4 : 6);
const toLabel = (/** @type {os.NetworkInterfaceInfo} */ iface) => {
const href = urlObj.href.replace(urlObj.hostname, iface.address);
return iface.internal
? `${href} (only accessible from the same host)`
: href;
return iface.internal ? `${href} (only accessible from the same host)` : href;
};
logger.info(
`You can provide the following ${interfaces.length === 1 ? 'URL' : 'URLs'} ` +
`in your client code to connect to this server:\n` +
interfaces.map((iface) => `\t${toLabel(iface)}`).join('\n')
`in your client code to connect to this server:\n` +
interfaces.map((iface) => `\t${toLabel(iface)}`).join('\n'),
);
}
@@ -406,7 +404,7 @@ async function main(args) {
} catch (err) {
logger.error(
`Could not configure Appium server. It's possible that a driver or plugin tried ` +
`to update the server and failed. Original error: ${err.message}`
`to update the server and failed. Original error: ${err.message}`,
);
logger.debug(err.stack);
return process.exit(1);
@@ -416,7 +414,7 @@ async function main(args) {
logger.warn(
'You have enabled CORS requests from any host. Be careful not ' +
'to visit sites which could maliciously try to start Appium ' +
'sessions on your machine'
'sessions on your machine',
);
}
appiumDriver.server = server;
@@ -428,7 +426,7 @@ async function main(args) {
parsedArgs.nodeconfig,
parsedArgs.address,
parsedArgs.port,
parsedArgs.basePath
parsedArgs.basePath,
);
}
} catch (err) {
@@ -450,8 +448,11 @@ async function main(args) {
});
}
const protocol = 'secure' in server && server.secure ? 'https' : 'http';
const address = net.isIPv6(parsedArgs.address) ? `[${parsedArgs.address}]` : parsedArgs.address;
logServerAddress(`http://${address}:${parsedArgs.port}${normalizeBasePath(parsedArgs.basePath)}`);
logServerAddress(
`${protocol}://${address}:${parsedArgs.port}${normalizeBasePath(parsedArgs.basePath)}`,
);
driverConfig.print();
pluginConfig.print([...pluginClasses.values()]);
+17 -17
View File
@@ -1,6 +1,6 @@
{
"name": "appium",
"version": "2.1.0",
"version": "2.2.2",
"description": "Automation for Apps.",
"keywords": [
"automation",
@@ -60,25 +60,25 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-driver": "^9.3.17",
"@appium/base-plugin": "^2.2.17",
"@appium/docutils": "^0.4.6",
"@appium/schema": "^0.3.1",
"@appium/support": "^4.1.4",
"@appium/types": "^0.13.3",
"@appium/base-driver": "^9.4.2",
"@appium/base-plugin": "^2.2.23",
"@appium/docutils": "^0.4.12",
"@appium/schema": "^0.4.2",
"@appium/support": "^4.1.9",
"@appium/types": "^0.14.2",
"@sidvind/better-ajv-errors": "2.1.0",
"@types/argparse": "2.0.10",
"@types/bluebird": "3.5.38",
"@types/fancy-log": "2.0.0",
"@types/semver": "7.5.0",
"@types/teen_process": "2.0.0",
"@types/argparse": "2.0.13",
"@types/bluebird": "3.5.42",
"@types/fancy-log": "2.0.2",
"@types/semver": "7.5.5",
"@types/teen_process": "2.0.3",
"@types/wrap-ansi": "3.0.0",
"ajv": "8.12.0",
"ajv-formats": "2.1.1",
"argparse": "2.0.1",
"async-lock": "1.4.0",
"asyncbox": "2.9.4",
"axios": "1.4.0",
"asyncbox": "3.0.0",
"axios": "1.6.1",
"bluebird": "3.7.2",
"cross-env": "7.0.3",
"find-up": "5.0.0",
@@ -90,11 +90,11 @@
"resolve-from": "5.0.0",
"semver": "7.5.4",
"source-map-support": "0.5.21",
"teen_process": "2.0.4",
"teen_process": "2.0.84",
"type-fest": "3.13.1",
"winston": "3.10.0",
"winston": "3.11.0",
"wrap-ansi": "7.0.0",
"yaml": "2.3.1"
"yaml": "2.3.4"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -1,5 +1,6 @@
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
capabilities = dict(
@@ -16,7 +17,7 @@ appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(appium_server_url, capabilities)
self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))
def tearDown(self) -> None:
if self.driver:
+8 -8
View File
@@ -73,7 +73,7 @@ describe('FakeDriver via HTTP', function () {
suppressOutput: true,
showInstalled: true,
},
driverConfig
driverConfig,
);
if (!_.has(driverList, 'fake')) {
await runExtensionCommand(
@@ -83,7 +83,7 @@ describe('FakeDriver via HTTP', function () {
installType: INSTALL_TYPE_LOCAL,
subcommand: DRIVER_TYPE,
},
driverConfig
driverConfig,
);
}
@@ -123,7 +123,7 @@ describe('FakeDriver via HTTP', function () {
// arg got through.
(await axios.post(`http://${TEST_HOST}:${port}/fakedriverCliArgs`)).data.should.have.property(
'appiumHome',
appiumHome
appiumHome,
);
});
});
@@ -233,7 +233,7 @@ describe('FakeDriver via HTTP', function () {
{
'appium:newCommandTimeout': 0.25,
},
caps
caps,
);
let driver = await wdio({...wdOpts, capabilities: localCaps});
should.exist(driver.sessionId);
@@ -249,7 +249,7 @@ describe('FakeDriver via HTTP', function () {
{
'appium:newCommandTimeout': 0.25,
},
caps
caps,
);
let driver = await wdio({...wdOpts, capabilities: localCaps});
should.exist(driver.sessionId);
@@ -496,7 +496,7 @@ describe('FakeDriver via HTTP', function () {
}
});
it('should log a single deprecation warning if a deprecated method is used and not overridden by a newMethodMap', async function () {
it.skip('should log a single deprecation warning if a deprecated method is used and not overridden by a newMethodMap', async function () {
let driver = await wdio({...wdOpts, capabilities: caps});
try {
driver.addCommand(
@@ -506,7 +506,7 @@ describe('FakeDriver via HTTP', function () {
description: 'Call a deprecated command',
parameters: [],
ref: '',
})
}),
);
driver.addCommand(
'doubleClick',
@@ -515,7 +515,7 @@ describe('FakeDriver via HTTP', function () {
description: 'Global double click',
parameters: [],
ref: '',
})
}),
);
await driver
.executeScript('fake: getDeprecatedCommandsCalled', [])
+12 -44
View File
@@ -107,55 +107,23 @@ describe('FakePlugin w/ FakeDriver via HTTP', function () {
});
describe('without plugin registered', function () {
/** @type {AppiumServer} */
let server;
before(async function () {
it('should reject server creation if plugin is not activated', async function () {
const args = {
appiumHome,
port,
address: TEST_HOST,
usePlugins: ['other1', 'other2'],
};
server = /** @type {AppiumServer} */ (await appiumServer(args));
await appiumServer(args).should.eventually.be.rejected;
});
after(async function () {
if (server) {
await server.close();
}
});
it('should not update the server if plugin is not activated', async function () {
await axios.post(`http://${TEST_HOST}:${port}/fake`).should.eventually.be.rejectedWith(/404/);
});
it('should not update method map if plugin is not activated', async function () {
const driver = await wdio(wdOpts);
const {sessionId} = driver;
try {
await axios
.post(`${testServerBaseSessionUrl}/${sessionId}/fake_data`, {
data: {fake: 'data'},
})
.should.eventually.be.rejectedWith(/404/);
} finally {
await driver.deleteSession();
}
});
it('should not handle commands if plugin is not activated', async function () {
const driver = await wdio(wdOpts);
const {sessionId} = driver;
try {
const el = (
await axios.post(`${testServerBaseSessionUrl}/${sessionId}/element`, {
using: 'xpath',
value: '//MockWebView',
})
).data.value;
el.should.not.have.property('fake');
} finally {
await driver.deleteSession();
}
it('should reject server creation if reserved plugin name is provided with other names', async function () {
const args = {
appiumHome,
port,
address: TEST_HOST,
usePlugins: ['fake', 'all'],
};
await appiumServer(args).should.eventually.be.rejected;
});
});
@@ -167,7 +135,7 @@ describe('FakePlugin w/ FakeDriver via HTTP', function () {
let usePlugins;
before(async function () {
// then start server if we need to
usePlugins = registrationType === 'explicit' ? ['fake', 'p2', 'p3'] : ['all'];
usePlugins = registrationType === 'explicit' ? ['fake'] : ['all'];
const args = {
appiumHome,
port,
@@ -358,7 +326,7 @@ describe('FakePlugin w/ FakeDriver via HTTP', function () {
/** @type {AppiumServer} */
let server;
/** @type {import('webdriverio').Browser<'async'>} */
/** @type {import('webdriverio').Browser} */
let driver;
before(async function () {
@@ -303,7 +303,7 @@ describe('schema', function () {
});
it('should flatten a schema', function () {
expect(flattenSchema()).to.eql(flattenedSchemaFixture);
expect(flattenSchema().length).to.be.greaterThanOrEqual(flattenedSchemaFixture.length);
});
});
@@ -362,7 +362,7 @@ describe('schema', function () {
});
it('should flatten a schema', function () {
expect(flattenSchema()).to.eql(expected);
expect(flattenSchema().length).to.be.greaterThanOrEqual(expected.length);
});
});
});
+75
View File
@@ -3,6 +3,81 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [9.4.2](https://github.com/appium/appium/compare/@appium/base-driver@9.4.1...@appium/base-driver@9.4.2) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
* **support:** update dependency axios to v1.6.0 ([699c493](https://github.com/appium/appium/commit/699c49306c38e222d618a9611482b06a3e6806aa))
* **support:** update dependency axios to v1.6.1 ([9b14205](https://github.com/appium/appium/commit/9b14205288ef09fd4a1144fc93c82b2bb2ed2ec0))
## [9.4.1](https://github.com/appium/appium/compare/@appium/base-driver@9.4.0...@appium/base-driver@9.4.1) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [9.4.0](https://github.com/appium/appium/compare/@appium/base-driver@9.3.20...@appium/base-driver@9.4.0) (2023-10-18)
### Features
* **base-driver:** Add server support of TLS and SPDY protocols ([#19105](https://github.com/appium/appium/issues/19105)) ([5926919](https://github.com/appium/appium/commit/5926919177e3df675723c80d800f933fdbda5824))
### Bug Fixes
* **base-driver:** update definitelytyped ([5e09589](https://github.com/appium/appium/commit/5e095893ee8f65cb8744d2cd6c6abd70f402fa55))
* **base-driver:** update dependency http-status-codes to v2.3.0 ([331171d](https://github.com/appium/appium/commit/331171dd8c511aba15e1b5b24329b30224e3e6ac))
* **driver-test-support:** update dependency @types/lodash to v4.14.198 ([84fefd2](https://github.com/appium/appium/commit/84fefd214c40408cbbcd145723b5d8dbeec665af))
* **images-plugin:** update dependency lru-cache to v10 ([#19050](https://github.com/appium/appium/issues/19050)) ([72a806b](https://github.com/appium/appium/commit/72a806bec7c3a80747192d24dfd9d8286a751810))
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([3b44c7d](https://github.com/appium/appium/commit/3b44c7d8f5b89f9357dfe6bb56b54799bbe0a921))
* **support:** update definitelytyped ([595d460](https://github.com/appium/appium/commit/595d460ac8dc41d310f9e4f653acbad3c7fd50b9))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
* **support:** update dependency axios to v1.5.0 ([08913cd](https://github.com/appium/appium/commit/08913cddde295f616f0fb376cc2cb71a9409a253))
* **support:** update dependency axios to v1.5.1 ([#19217](https://github.com/appium/appium/issues/19217)) ([3df047d](https://github.com/appium/appium/commit/3df047d128d5d032826c8f5fb605b019078b717d))
* **types:** update definitelytyped ([96b0a44](https://github.com/appium/appium/commit/96b0a44629c451102c44541a8d5b9e7be972f1ea))
* Use pathToRegexp to match websocket endpoints ([#19162](https://github.com/appium/appium/issues/19162)) ([de02ed8](https://github.com/appium/appium/commit/de02ed87fc665ec9c6e563a634634307c3f21e44))
## [9.3.20](https://github.com/appium/appium/compare/@appium/base-driver@9.3.19...@appium/base-driver@9.3.20) (2023-08-23)
### Bug Fixes
* **base-driver:** Avoid RangeError while caching the response data ([#19043](https://github.com/appium/appium/issues/19043)) ([315a5e6](https://github.com/appium/appium/commit/315a5e6cc75d53d5fbbdae598dc4523ab85b7cb1))
* **base-driver:** fix the LRUCache.dispose callback param order ([#19037](https://github.com/appium/appium/issues/19037)) ([abcf0d4](https://github.com/appium/appium/commit/abcf0d451f47f5c7c285f0988693c4bef9c29024))
## [9.3.19](https://github.com/appium/appium/compare/@appium/base-driver@9.3.18...@appium/base-driver@9.3.19) (2023-08-22)
**Note:** Version bump only for package @appium/base-driver
## [9.3.18](https://github.com/appium/appium/compare/@appium/base-driver@9.3.17...@appium/base-driver@9.3.18) (2023-08-21)
### Bug Fixes
* **base-driver:** Fix possible NPE while cleaning up the state listener ([#19020](https://github.com/appium/appium/issues/19020)) ([53bfc68](https://github.com/appium/appium/commit/53bfc68eee5766ca8c6851c424c89d6b123d602e))
* **base-driver:** Respect basic auth credentials if provided ([#19000](https://github.com/appium/appium/issues/19000)) ([ed8e83c](https://github.com/appium/appium/commit/ed8e83c76c5b660e619833515c2ea2ec29082e18))
* **driver-test-support:** update dependency @types/lodash to v4.14.197 ([a080b72](https://github.com/appium/appium/commit/a080b729208b4e3c352456f0f230b63b0b7ee9ee))
## [9.3.17](https://github.com/appium/appium/compare/@appium/base-driver@9.3.16...@appium/base-driver@9.3.17) (2023-08-17)
@@ -116,7 +116,6 @@ POST | `session/{sessionId}/appium/getPerformanceData` | returns the
POST | `session/{sessionId}/appium/device/press_keycode` | Press a particular key code on the device.
POST | `session/{sessionId}/appium/device/long_press_keycode` | Press and hold a particular key code on the device.
POST | `session/{sessionId}/appium/device/keyevent` | Send a key code to the device.
POST | `session/{sessionId}/appium/device/rotate` | Rotate the device in three dimensions.
GET | `session/{sessionId}/appium/device/current_activity` | Retrieve the current activity running on the device.
GET | `session/{sessionId}/appium/device/current_package` | Retrieve the current package running on the device.
POST | `session/{sessionId}/appium/device/install_app` | Install the given app onto the device.
@@ -355,7 +355,7 @@ export class BaseDriver<
const extraCaps = _.difference(_.keys(caps), _.keys(this._desiredCapConstraints));
if (extraCaps.length) {
this.log.warn(
`The following capabilities were provided, but are not ` + `recognized by Appium:`
`The following provided capabilities were not recognized by this driver:`
);
for (const cap of extraCaps) {
this.log.warn(` ${cap}`);
+20 -8
View File
@@ -3,7 +3,7 @@ import path from 'path';
import url from 'url';
import logger from './logger';
import {tempDir, fs, util, zip, timing, node} from '@appium/support';
import LRU from 'lru-cache';
import { LRUCache } from 'lru-cache';
import AsyncLock from 'async-lock';
import axios from 'axios';
import B from 'bluebird';
@@ -20,11 +20,12 @@ const DEFAULT_REQ_HEADERS = Object.freeze({
'user-agent': `Appium (BaseDriver v${BASEDRIVER_VER})`,
});
const AVG_DOWNLOAD_SPEED_MEASUREMENT_THRESHOLD_SEC = 2;
const APPLICATIONS_CACHE = new LRU({
const APPLICATIONS_CACHE = new LRUCache({
max: MAX_CACHED_APPS,
ttl: CACHED_APPS_MAX_AGE, // expire after 24 hours
updateAgeOnGet: true,
dispose: (app, {fullPath}) => {
// @ts-ignore The fullPath property exists
dispose: ({fullPath}, app) => {
logger.info(
`The application '${app}' cached at '${fullPath}' has ` +
`expired after ${CACHED_APPS_MAX_AGE}ms`
@@ -45,7 +46,9 @@ process.on('exit', () => {
return;
}
const appPaths = [...APPLICATIONS_CACHE.values()].map(({fullPath}) => fullPath);
const appPaths = [...APPLICATIONS_CACHE.values()]
// @ts-ignore The fullPath property exists
.map(({fullPath}) => fullPath);
logger.debug(
`Performing cleanup of ${appPaths.length} cached ` +
util.pluralize('application', appPaths.length)
@@ -140,6 +143,8 @@ async function configureApp(
const {protocol, pathname} = url.parse(newApp);
const isUrl = protocol === null ? false : ['http:', 'https:'].includes(protocol);
/** @type {import('@appium/types').CachedAppInfo|undefined} */
// @ts-ignore We know the returned type
const cachedAppInfo = APPLICATIONS_CACHE.get(app);
if (cachedAppInfo) {
logger.debug(`Cached app data: ${JSON.stringify(cachedAppInfo, null, 2)}`);
@@ -279,7 +284,7 @@ async function configureApp(
if (isPackageAFile && shouldUnzipApp && !_.isFunction(onPostProcess)) {
const archivePath = newApp;
if (packageHash === cachedAppInfo?.packageHash) {
const {fullPath} = cachedAppInfo;
const fullPath = cachedAppInfo?.fullPath;
if (await isAppIntegrityOk(fullPath, cachedAppInfo?.integrity)) {
if (archivePath !== app) {
await fs.rimraf(archivePath);
@@ -362,12 +367,19 @@ async function configureApp(
* @returns {Promise<RemoteAppData>}
*/
async function queryAppLink(appLink, reqHeaders) {
const {href} = url.parse(appLink);
const {href, auth} = url.parse(appLink);
const axiosUrl = auth ? href.replace(`${auth}@`, '') : href;
/** @type {import('axios').AxiosBasicCredentials|undefined} */
const axiosAuth = auth ? {
username: auth.substring(0, auth.indexOf(':')),
password: auth.substring(auth.indexOf(':') + 1),
} : undefined;
/**
* @type {import('axios').RawAxiosRequestConfig}
*/
const requestOpts = {
url: href,
url: axiosUrl,
auth: axiosAuth,
responseType: 'stream',
timeout: APP_DOWNLOAD_TIMEOUT_MS,
validateStatus: (status) =>
@@ -382,7 +394,7 @@ async function queryAppLink(appLink, reqHeaders) {
status,
};
} catch (err) {
throw new Error(`Cannot download the app from ${href}: ${err.message}`);
throw new Error(`Cannot download the app from ${axiosUrl}: ${err.message}`);
}
}
+87 -37
View File
@@ -1,19 +1,29 @@
import log from './logger';
import LRU from 'lru-cache';
import { LRUCache } from 'lru-cache';
import _ from 'lodash';
import {EventEmitter} from 'events';
const IDEMPOTENT_RESPONSES = new LRU({
const IDEMPOTENT_RESPONSES = new LRUCache({
max: 64,
ttl: 30 * 60 * 1000,
updateAgeOnGet: true,
updateAgeOnHas: true,
dispose: (key, {responseStateListener}) => {
responseStateListener.removeAllListeners();
// @ts-ignore The value must contain responseStateListener
dispose: ({responseStateListener}) => {
responseStateListener?.removeAllListeners();
}
});
const MONITORED_METHODS = ['POST', 'PATCH'];
const IDEMPOTENCY_KEY_HEADER = 'x-idempotency-key';
const MAX_CACHED_PAYLOAD_SIZE_BYTES = 1 * 1024 * 1024; // 1 MiB
/**
* @typedef {Object} CachedResponse
* @property {string} method
* @property {string} path
* @property {Buffer?} response
* @property {EventEmitter|null|undefined} responseStateListener
*/
/**
*
@@ -33,25 +43,34 @@ function cacheResponse(key, req, res) {
response: null,
responseStateListener,
});
const originalSocketWriter = res.socket.write.bind(res.socket);
let response = '';
const socket = res.socket;
const originalSocketWriter = socket.write.bind(socket);
const responseRef = new WeakRef(res);
let responseChunks = [];
let responseSize = 0;
let errorMessage = null;
const patchedWriter = (chunk, encoding, next) => {
if (_.isString(chunk)) {
response += chunk;
} else if (_.isFunction(chunk.toString)) {
response += chunk.toString(_.isString(encoding) ? encoding : undefined);
if (errorMessage || !responseRef.deref()) {
responseChunks = [];
responseSize = 0;
return originalSocketWriter(chunk, encoding, next);
}
const buf = Buffer.from(chunk, encoding);
responseChunks.push(buf);
responseSize += buf.length;
if (responseSize > MAX_CACHED_PAYLOAD_SIZE_BYTES) {
errorMessage = `The actual response size exceeds ` +
`the maximum allowed limit of ${MAX_CACHED_PAYLOAD_SIZE_BYTES} bytes`;
}
return originalSocketWriter(chunk, encoding, next);
};
res.socket.write = patchedWriter;
let httpErrorMessage = null;
let isResponseFullySent = false;
res.once('error', (e) => { httpErrorMessage = e.message; });
req.once('error', (e) => { httpErrorMessage = e.message; });
res.once('finish', () => { isResponseFullySent = true; });
res.once('close', () => {
if (res.socket?.write === patchedWriter) {
res.socket.write = originalSocketWriter;
socket.write = patchedWriter;
let didEmitReady = false;
res.once('error', (e) => {
errorMessage = e.message;
if (socket.write === patchedWriter) {
socket.write = originalSocketWriter;
}
if (!IDEMPOTENT_RESPONSES.has(key)) {
@@ -59,24 +78,57 @@ function cacheResponse(key, req, res) {
`Could not cache the response identified by '${key}'. ` +
`Cache consistency has been damaged`
);
} else if (httpErrorMessage) {
log.info(`Could not cache the response identified by '${key}': ${httpErrorMessage}`);
IDEMPOTENT_RESPONSES.delete(key);
} else if (!isResponseFullySent) {
log.info(
`Could not cache the response identified by '${key}', ` +
`because it has not been completed`
);
log.info('Does the client terminate connections too early?');
} else {
log.info(`Could not cache the response identified by '${key}': ${errorMessage}`);
IDEMPOTENT_RESPONSES.delete(key);
}
responseChunks = [];
responseSize = 0;
if (!didEmitReady) {
responseStateListener.emit('ready', null);
didEmitReady = true;
}
});
res.once('finish', () => {
if (socket.write === patchedWriter) {
socket.write = originalSocketWriter;
}
if (!IDEMPOTENT_RESPONSES.has(key)) {
log.info(
`Could not cache the response identified by '${key}'. ` +
`Cache consistency has been damaged`
);
} else if (errorMessage) {
log.info(`Could not cache the response identified by '${key}': ${errorMessage}`);
IDEMPOTENT_RESPONSES.delete(key);
}
/** @type {CachedResponse|undefined} */
// @ts-ignore The returned type is ok
const value = IDEMPOTENT_RESPONSES.get(key);
if (value) {
value.response = Buffer.from(response, 'utf8');
responseStateListener.emit('ready', value.response);
} else {
responseStateListener.emit('ready', null);
value.response = Buffer.concat(responseChunks);
}
responseChunks = [];
responseSize = 0;
if (!didEmitReady) {
responseStateListener.emit('ready', value?.response ?? null);
didEmitReady = true;
}
});
res.once('close', () => {
if (socket.write === patchedWriter) {
socket.write = originalSocketWriter;
}
if (!didEmitReady) {
/** @type {CachedResponse|undefined} */
// @ts-ignore The returned type is ok
const value = IDEMPOTENT_RESPONSES.get(key);
responseStateListener.emit('ready', value?.response ?? null);
didEmitReady = true;
}
});
}
@@ -87,7 +139,7 @@ function cacheResponse(key, req, res) {
*/
async function handleIdempotency(req, res, next) {
const keyOrArr = req.headers[IDEMPOTENCY_KEY_HEADER];
if (!keyOrArr) {
if (_.isEmpty(keyOrArr) || !keyOrArr) {
return next();
}
@@ -105,10 +157,8 @@ async function handleIdempotency(req, res, next) {
}
const {
method,
path,
response,
responseStateListener,
// @ts-ignore We have asserted the presence of the key above
method, path, response, responseStateListener,
} = IDEMPOTENT_RESPONSES.get(key);
if (req.method !== method || req.path !== path) {
log.warn(`Got two different requests with the same idempotency key '${key}'`);
+42 -3
View File
@@ -27,9 +27,49 @@ import {
import B from 'bluebird';
import {DEFAULT_BASE_PATH} from '../constants';
import {EventEmitter} from 'events';
import {fs} from '@appium/support';
const KEEP_ALIVE_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
/**
*
* @param {import('express').Express} app
* @param {Partial<import('@appium/types').ServerArgs>} [cliArgs]
* @returns {Promise<http.Server>}
*/
async function createServer (app, cliArgs) {
const {sslCertificatePath, sslKeyPath} = cliArgs ?? {};
if (!sslCertificatePath && !sslKeyPath) {
return http.createServer(app);
}
if (!sslCertificatePath || !sslKeyPath) {
throw new Error(`Both certificate path and key path must be provided to enable TLS`);
}
const certKey = [sslCertificatePath, sslKeyPath];
const zipped = _.zip(
await B.all(certKey.map((p) => fs.exists(p))),
['certificate', 'key'],
certKey,
);
for (const [exists, desc, p] of zipped) {
if (!exists) {
throw new Error(`The provided SSL ${desc} at '${p}' does not exist or is not accessible`);
}
}
const [cert, key] = await B.all(certKey.map((p) => fs.readFile(p, 'utf8')));
log.debug('Enabling TLS/SPDY on the server using the provided certificate');
// eslint-disable-next-line @typescript-eslint/no-var-requires
return require('spdy').createServer({
cert,
key,
spdy: {
plain: false,
ssl: true,
}
}, app);
}
/**
*
* @param {ServerOpts} opts
@@ -48,9 +88,9 @@ async function server(opts) {
keepAliveTimeout = KEEP_ALIVE_TIMEOUT_MS,
} = opts;
// create the actual http server
const app = express();
const httpServer = http.createServer(app);
const httpServer = await createServer(app, cliArgs);
return await new B(async (resolve, reject) => {
// we put an async function as the promise constructor because we want some things to happen in
// serial (application of plugin updates, for example). But we still need to use a promise here
@@ -118,7 +158,6 @@ function configureServer({
} else {
app.use(allowCrossDomainAsyncExecute(basePath));
}
// @ts-ignore
app.use(handleIdempotency);
app.use(fixPythonContentType(basePath));
app.use(defaultToJSONContentType);
@@ -2,6 +2,7 @@
import _ from 'lodash';
import {URL} from 'url';
import B from 'bluebird';
import { pathToRegexp } from 'path-to-regexp';
const DEFAULT_WS_PATHNAME_PREFIX = '/ws';
@@ -16,12 +17,12 @@ async function addWebSocketHandler(handlerPathname, handlerServer) {
this.on('upgrade', (request, socket, head) => {
let currentPathname;
try {
currentPathname = new URL(/** @type {string} */ (request.url)).pathname;
currentPathname = new URL(request.url ?? '').pathname;
} catch {
currentPathname = request.url;
currentPathname = request.url ?? '';
}
for (const [pathname, wsServer] of _.toPairs(this.webSocketsMapping)) {
if (currentPathname === pathname) {
if (pathToRegexp(pathname).test(currentPathname)) {
wsServer.handleUpgrade(request, socket, head, (ws) => {
wsServer.emit('connection', ws, request);
});
+69 -45
View File
@@ -53,7 +53,7 @@ export class NoSuchDriverError extends ProtocolError {
message || 'A session is either terminated or not started',
NoSuchDriverError.code(),
NoSuchDriverError.w3cStatus(),
NoSuchDriverError.error()
NoSuchDriverError.error(),
);
}
}
@@ -77,7 +77,7 @@ export class NoSuchElementError extends ProtocolError {
'An element could not be located on the page using the given ' + 'search parameters.',
NoSuchElementError.code(),
NoSuchElementError.w3cStatus(),
NoSuchElementError.error()
NoSuchElementError.error(),
);
}
}
@@ -103,7 +103,7 @@ export class NoSuchFrameError extends ProtocolError {
'the frame could not be found.',
NoSuchFrameError.code(),
NoSuchFrameError.w3cStatus(),
NoSuchFrameError.error()
NoSuchFrameError.error(),
);
}
}
@@ -130,7 +130,7 @@ export class UnknownCommandError extends ProtocolError {
'resource.',
UnknownCommandError.code(),
UnknownCommandError.w3cStatus(),
UnknownCommandError.error()
UnknownCommandError.error(),
);
}
}
@@ -156,7 +156,7 @@ export class StaleElementReferenceError extends ProtocolError {
'longer attached to the DOM.',
StaleElementReferenceError.code(),
StaleElementReferenceError.w3cStatus(),
StaleElementReferenceError.error()
StaleElementReferenceError.error(),
);
}
}
@@ -181,7 +181,7 @@ export class ElementNotVisibleError extends ProtocolError {
'not visible on the page.',
ElementNotVisibleError.code(),
ElementNotVisibleError.w3cStatus(),
ElementNotVisibleError.error()
ElementNotVisibleError.error(),
);
}
}
@@ -207,7 +207,7 @@ export class InvalidElementStateError extends ProtocolError {
'in an invalid state (e.g. attempting to click a disabled element).',
InvalidElementStateError.code(),
InvalidElementStateError.w3cStatus(),
InvalidElementStateError.error()
InvalidElementStateError.error(),
);
}
}
@@ -252,7 +252,7 @@ export class UnknownMethodError extends ProtocolError {
'The requested command matched a known URL but did not match an method for that URL',
UnknownMethodError.code(),
UnknownMethodError.w3cStatus(),
UnknownMethodError.error()
UnknownMethodError.error(),
);
}
}
@@ -275,7 +275,7 @@ export class UnsupportedOperationError extends ProtocolError {
message || 'A server-side error occurred. Command cannot be supported.',
UnsupportedOperationError.code(),
UnsupportedOperationError.w3cStatus(),
UnsupportedOperationError.error()
UnsupportedOperationError.error(),
);
}
}
@@ -298,7 +298,7 @@ export class ElementIsNotSelectableError extends ProtocolError {
message || 'An attempt was made to select an element that cannot be selected.',
ElementIsNotSelectableError.code(),
ElementIsNotSelectableError.w3cStatus(),
ElementIsNotSelectableError.error()
ElementIsNotSelectableError.error(),
);
}
}
@@ -323,7 +323,7 @@ export class ElementClickInterceptedError extends ProtocolError {
'the events is obscuring the element that was requested clicked',
ElementClickInterceptedError.code(),
ElementClickInterceptedError.w3cStatus(),
ElementClickInterceptedError.error()
ElementClickInterceptedError.error(),
);
}
}
@@ -347,7 +347,7 @@ export class ElementNotInteractableError extends ProtocolError {
'A command could not be completed because the element is not pointer- or keyboard interactable',
ElementNotInteractableError.code(),
ElementNotInteractableError.w3cStatus(),
ElementNotInteractableError.error()
ElementNotInteractableError.error(),
);
}
}
@@ -365,7 +365,7 @@ export class InsecureCertificateError extends ProtocolError {
'Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate',
ElementIsNotSelectableError.code(),
null,
InsecureCertificateError.error()
InsecureCertificateError.error(),
);
}
}
@@ -388,7 +388,7 @@ export class JavaScriptError extends ProtocolError {
message || 'An error occurred while executing user supplied JavaScript.',
JavaScriptError.code(),
JavaScriptError.w3cStatus(),
JavaScriptError.error()
JavaScriptError.error(),
);
}
}
@@ -411,7 +411,7 @@ export class XPathLookupError extends ProtocolError {
message || 'An error occurred while searching for an element by XPath.',
XPathLookupError.code(),
XPathLookupError.w3cStatus(),
XPathLookupError.error()
XPathLookupError.error(),
);
}
}
@@ -434,7 +434,7 @@ export class TimeoutError extends ProtocolError {
message || 'An operation did not complete before its timeout expired.',
TimeoutError.code(),
TimeoutError.w3cStatus(),
TimeoutError.error()
TimeoutError.error(),
);
}
}
@@ -459,7 +459,7 @@ export class NoSuchWindowError extends ProtocolError {
'because the window could not be found.',
NoSuchWindowError.code(),
NoSuchWindowError.w3cStatus(),
NoSuchWindowError.error()
NoSuchWindowError.error(),
);
}
}
@@ -482,7 +482,7 @@ export class InvalidArgumentError extends ProtocolError {
err || 'The arguments passed to the command are either invalid or malformed',
InvalidArgumentError.code(),
InvalidArgumentError.w3cStatus(),
InvalidArgumentError.error()
InvalidArgumentError.error(),
);
}
}
@@ -507,7 +507,7 @@ export class InvalidCookieDomainError extends ProtocolError {
'domain than the current page.',
InvalidCookieDomainError.code(),
InvalidCookieDomainError.w3cStatus(),
InvalidCookieDomainError.error()
InvalidCookieDomainError.error(),
);
}
}
@@ -531,7 +531,7 @@ export class NoSuchCookieError extends ProtocolError {
'No cookie matching the given path name was found amongst the associated cookies of the current browsing context’s active document',
NoSuchCookieError.code(),
NoSuchCookieError.w3cStatus(),
NoSuchCookieError.error()
NoSuchCookieError.error(),
);
}
}
@@ -554,7 +554,7 @@ export class UnableToSetCookieError extends ProtocolError {
err || "A request to set a cookie's value could not be satisfied.",
UnableToSetCookieError.code(),
UnableToSetCookieError.w3cStatus(),
UnableToSetCookieError.error()
UnableToSetCookieError.error(),
);
}
}
@@ -577,7 +577,7 @@ export class UnexpectedAlertOpenError extends ProtocolError {
message || 'A modal dialog was open, blocking this operation',
UnexpectedAlertOpenError.code(),
UnexpectedAlertOpenError.w3cStatus(),
UnexpectedAlertOpenError.error()
UnexpectedAlertOpenError.error(),
);
}
}
@@ -601,7 +601,7 @@ export class NoAlertOpenError extends ProtocolError {
message || 'An attempt was made to operate on a modal dialog when one ' + 'was not open.',
NoAlertOpenError.code(),
NoAlertOpenError.w3cStatus(),
NoAlertOpenError.error()
NoAlertOpenError.error(),
);
}
}
@@ -626,7 +626,7 @@ export class ScriptTimeoutError extends ProtocolError {
err || 'A script did not complete before its timeout expired.',
ScriptTimeoutError.code(),
ScriptTimeoutError.w3cStatus(),
ScriptTimeoutError.error()
ScriptTimeoutError.error(),
);
}
}
@@ -649,7 +649,7 @@ export class InvalidElementCoordinatesError extends ProtocolError {
err || 'The coordinates provided to an interactions operation are invalid.',
InvalidElementCoordinatesError.code(),
InvalidElementCoordinatesError.w3cStatus(),
InvalidElementCoordinatesError.error()
InvalidElementCoordinatesError.error(),
);
}
}
@@ -674,7 +674,7 @@ export class IMENotAvailableError extends ProtocolError {
message || 'IME was not available.',
IMENotAvailableError.code(),
IMENotAvailableError.w3cStatus(),
IMENotAvailableError.error()
IMENotAvailableError.error(),
);
}
}
@@ -697,7 +697,7 @@ export class IMEEngineActivationFailedError extends ProtocolError {
err || 'An IME engine could not be started.',
IMEEngineActivationFailedError.code(),
IMEEngineActivationFailedError.w3cStatus(),
IMEEngineActivationFailedError.error()
IMEEngineActivationFailedError.error(),
);
}
}
@@ -720,7 +720,7 @@ export class InvalidSelectorError extends ProtocolError {
err || 'Argument was an invalid selector (e.g. XPath/CSS).',
InvalidSelectorError.code(),
InvalidSelectorError.w3cStatus(),
InvalidSelectorError.error()
InvalidSelectorError.error(),
);
}
}
@@ -745,7 +745,7 @@ export class SessionNotCreatedError extends ProtocolError {
message,
SessionNotCreatedError.code(),
SessionNotCreatedError.w3cStatus(),
SessionNotCreatedError.error()
SessionNotCreatedError.error(),
);
}
}
@@ -768,7 +768,7 @@ export class MoveTargetOutOfBoundsError extends ProtocolError {
err || 'Target provided for a move action is out of bounds.',
MoveTargetOutOfBoundsError.code(),
MoveTargetOutOfBoundsError.w3cStatus(),
MoveTargetOutOfBoundsError.error()
MoveTargetOutOfBoundsError.error(),
);
}
}
@@ -797,7 +797,7 @@ export class InvalidContextError extends ProtocolError {
constructor(message) {
super(
message || 'That command could not be executed in the current context.',
InvalidContextError.code()
InvalidContextError.code(),
);
}
}
@@ -838,29 +838,53 @@ export class UnableToCaptureScreen extends ProtocolError {
err || 'A screen capture was made impossible',
UnableToCaptureScreen.code(),
UnableToCaptureScreen.w3cStatus(),
UnableToCaptureScreen.error()
UnableToCaptureScreen.error(),
);
}
}
function generateBadParametersMessage(requiredParams, actualParams) {
const toArray = (/** @type {any} */ x) => (_.isArray(x) ? x : []);
const requiredParamNames = toArray(requiredParams?.required);
const actualParamNames = toArray(actualParams);
const missingRequiredParamNames = _.difference(requiredParamNames, actualParamNames);
/** @type {string[]} */
const resultLines = [];
resultLines.push(
_.isEmpty(missingRequiredParamNames)
? // This should not happen
'Some of the provided parameters are not known'
: `The following required parameter${
missingRequiredParamNames.length === 1 ? ' is ' : 's are '
}` + `missing: ${JSON.stringify(missingRequiredParamNames)}`,
);
if (!_.isEmpty(requiredParamNames)) {
resultLines.push(`Known required parameters are: ${JSON.stringify(requiredParamNames)}`);
}
const optionalParamNames = _.difference(toArray(requiredParams?.optional), ['sessionId', 'id']);
if (!_.isEmpty(optionalParamNames)) {
resultLines.push(`Known optional parameters are: ${JSON.stringify(optionalParamNames)}`);
}
resultLines.push(
`You have provided${
_.isEmpty(actualParamNames) ? ' none' : ': ' + JSON.stringify(actualParams)
}`,
);
return resultLines.join('\n');
}
// Equivalent to W3C InvalidArgumentError
export class BadParametersError extends ES6Error {
static error() {
return 'invalid argument';
}
constructor(requiredParams, actualParams, errMessage) {
let message;
if (!errMessage) {
message =
`Parameters were incorrect. We wanted ` +
`${JSON.stringify(requiredParams)} and you ` +
`sent ${JSON.stringify(actualParams)}`;
} else {
message = `Parameters were incorrect. You sent ${JSON.stringify(
actualParams
)}, ${errMessage}`;
}
super(message);
super(
errMessage
? `Parameters were incorrect. You sent ${JSON.stringify(actualParams)}, ${errMessage}`
: generateBadParametersMessage(requiredParams, actualParams),
);
this.w3cStatus = HTTPStatusCodes.BAD_REQUEST;
}
}
@@ -909,7 +933,7 @@ export class ProxyRequestError extends ES6Error {
return errorFromW3CJsonCode(
this.w3c.error,
this.w3c.message || this.message,
this.w3c.stacktrace
this.w3c.stacktrace,
);
}
return new UnknownError(this.message);
@@ -19,7 +19,7 @@ const CREATE_SESSION_COMMAND = 'createSession';
const DELETE_SESSION_COMMAND = 'deleteSession';
const GET_STATUS_COMMAND = 'getStatus';
/** type {Set<string>} */
/** @type {Set<string>} */
const deprecatedCommandsLogged = new Set();
function determineProtocol(createSessionArgs) {
@@ -568,16 +568,6 @@ const METHOD_MAP = /** @type {const} */ ({
deprecated: true,
},
},
'/session/:sessionId/appium/device/rotate': {
POST: {
command: 'mobileRotation',
payloadParams: {
required: ['x', 'y', 'radius', 'rotation', 'touchCount', 'duration'],
optional: ['element'],
},
deprecated: true,
},
},
'/session/:sessionId/appium/device/current_activity': {
GET: {command: 'getCurrentActivity', deprecated: true},
},
+17 -13
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/base-driver",
"version": "9.3.17",
"version": "9.4.2",
"description": "Base driver class for Appium drivers",
"keywords": [
"automation",
@@ -44,32 +44,36 @@
"test:types": "tsd"
},
"dependencies": {
"@appium/support": "^4.1.4",
"@appium/types": "^0.13.3",
"@appium/support": "^4.1.9",
"@appium/types": "^0.14.2",
"@colors/colors": "1.6.0",
"@types/async-lock": "1.4.0",
"@types/bluebird": "3.5.38",
"@types/express": "4.17.17",
"@types/lodash": "4.14.196",
"@types/method-override": "0.0.32",
"@types/serve-favicon": "2.5.4",
"@types/async-lock": "1.4.2",
"@types/bluebird": "3.5.42",
"@types/express": "4.17.21",
"@types/lodash": "4.14.201",
"@types/method-override": "0.0.35",
"@types/serve-favicon": "2.5.7",
"async-lock": "1.4.0",
"asyncbox": "2.9.4",
"axios": "1.4.0",
"asyncbox": "3.0.0",
"axios": "1.6.1",
"bluebird": "3.7.2",
"body-parser": "1.20.2",
"es6-error": "4.1.1",
"express": "4.18.2",
"http-status-codes": "2.2.0",
"http-status-codes": "2.3.0",
"lodash": "4.17.21",
"lru-cache": "7.18.3",
"lru-cache": "10.0.1",
"method-override": "3.0.0",
"morgan": "1.10.0",
"path-to-regexp": "6.2.1",
"serve-favicon": "2.5.0",
"source-map-support": "0.5.21",
"type-fest": "3.13.1",
"validate.js": "0.13.1"
},
"optionalDependencies": {
"spdy": "4.0.2"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
"npm": ">=8"
@@ -3,8 +3,19 @@ import axios from 'axios';
import {createSandbox} from 'sinon';
import B from 'bluebird';
import _ from 'lodash';
import { exec } from 'teen_process';
import https from 'node:https';
import {TEST_HOST, getTestPort} from '@appium/driver-test-support';
async function generateCertificate (certPath, keyPath) {
await exec('openssl', [
'req', '-nodes', '-new', '-x509',
'-keyout', keyPath,
'-out', certPath,
'-subj', '/C=US/ST=State/L=City/O=company/OU=Com/CN=www.testserver.local',
]);
}
describe('server', function () {
let hwServer;
let port;
@@ -96,6 +107,61 @@ describe('server', function () {
});
});
describe('tls server', function () {
let hwServer;
let port;
let certPath = 'certificate.cert';
let keyPath = 'certificate.key';
const looseClient = axios.create({
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
});
before(async function () {
try {
await generateCertificate(certPath, keyPath);
} catch (e) {
if (process.env.CI) {
throw e;
}
return this.skip();
}
port = await getTestPort(true);
function configureRoutes(app) {
app.get('/', (req, res) => {
res.header['content-type'] = 'text/html';
res.status(200).send('Hello World!');
});
}
hwServer = await server({
routeConfiguringFunction: configureRoutes,
cliArgs: {
sslCertificatePath: certPath,
sslKeyPath: keyPath,
},
port,
});
});
after(async function () {
await hwServer.close();
});
it('should start up with our middleware', async function () {
const {data} = await looseClient.get(`https://${TEST_HOST}:${port}/`);
data.should.eql('Hello World!');
});
it('should throw if untrusted', async function () {
await axios.get(`https://${TEST_HOST}:${port}/`).should.eventually.be.rejected;
});
it('should throw if not secure', async function () {
await axios.get(`http://${TEST_HOST}:${port}/`).should.eventually.be.rejected;
});
});
describe('server plugins', function () {
let hwServer;
let port;
@@ -428,7 +428,7 @@ describe('Protocol', function () {
status.should.equal(400);
const {error: w3cError, message, stacktrace} = data.value;
message.should.match(/Parameters were incorrect/);
message.should.match(/following required parameter/);
stacktrace.should.match(/protocol.js/);
w3cError.should.be.a.string;
w3cError.should.equal(errors.InvalidArgumentError.error());
@@ -35,7 +35,7 @@ describe('Protocol', function () {
}
let hash = shasum.digest('hex').substring(0, 8);
// Modify the hash whenever the protocol has intentionally been modified.
hash.should.equal('484810b0');
hash.should.equal('6e93ad90');
});
});
+48
View File
@@ -3,6 +3,54 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.2.23](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.22...@appium/base-plugin@2.2.23) (2023-11-14)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.22](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.21...@appium/base-plugin@2.2.22) (2023-10-19)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.21](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.20...@appium/base-plugin@2.2.21) (2023-10-18)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.20](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.19...@appium/base-plugin@2.2.20) (2023-08-23)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.19](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.18...@appium/base-plugin@2.2.19) (2023-08-22)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.18](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.17...@appium/base-plugin@2.2.18) (2023-08-21)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.17](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.16...@appium/base-plugin@2.2.17) (2023-08-17)
**Note:** Version bump only for package @appium/base-plugin
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/base-plugin",
"version": "2.2.17",
"version": "2.2.23",
"description": "The base plugin used to create Appium 2.0 plugins",
"keywords": [
"automation",
@@ -40,8 +40,8 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-driver": "^9.3.17",
"@appium/support": "^4.1.4"
"@appium/base-driver": "^9.4.2",
"@appium/support": "^4.1.9"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
+85
View File
@@ -3,6 +3,91 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.0.28](https://github.com/appium/appium/compare/@appium/doctor@2.0.27...@appium/doctor@2.0.28) (2023-11-14)
### Bug Fixes
* **doctor:** update dependency appium-adb to v11.0.3 ([ee1df47](https://github.com/appium/appium/commit/ee1df47b172009717b81cce7b3465219791b1f97))
* **doctor:** update dependency appium-adb to v11.0.5 ([#19362](https://github.com/appium/appium/issues/19362)) ([b82f13b](https://github.com/appium/appium/commit/b82f13b893c44bcaf9908a9ebe96d3bb51c1f6b3))
* **doctor:** update dependency appium-adb to v11.0.6 ([c2f543f](https://github.com/appium/appium/commit/c2f543fc1009067141bc6cf50a2d0e47f1a455b2))
* **doctor:** update dependency appium-adb to v11.0.7 ([261cfc8](https://github.com/appium/appium/commit/261cfc8694f9eeab774712e67bbf46e72615efa7))
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
* **support:** update dependency teen_process to v2.0.57 ([1fbd503](https://github.com/appium/appium/commit/1fbd503a66b965a9b32bbb6702062861a8480333))
* **support:** update dependency teen_process to v2.0.63 ([fa57192](https://github.com/appium/appium/commit/fa571925b7ac980cc99c8d23f659420eacd8546c))
* **support:** update dependency teen_process to v2.0.64 ([332bb59](https://github.com/appium/appium/commit/332bb59ee3fdd14c03f6b3c4fd6587a30319d568))
* **support:** update dependency teen_process to v2.0.66 ([3205b5d](https://github.com/appium/appium/commit/3205b5d06f073f1e5c7735c6e36ad08fdf091182))
* **support:** update dependency teen_process to v2.0.67 ([3b5ae2a](https://github.com/appium/appium/commit/3b5ae2ab17c74c9890b53c081aec146152f11c7a))
* **support:** update dependency teen_process to v2.0.73 ([8e453be](https://github.com/appium/appium/commit/8e453bed3f440c1dcf82f016f7d4431365b9cdff))
* **support:** update dependency teen_process to v2.0.75 ([fbb6fd9](https://github.com/appium/appium/commit/fbb6fd9a2780eb00c15584abeaf644a1fcdecb4d))
* **support:** update teen_process-related packages ([84d96db](https://github.com/appium/appium/commit/84d96dbae45dfe56218d32330f8ff2d26b750fb7))
* **support:** update teen_process-related packages ([3d0b97c](https://github.com/appium/appium/commit/3d0b97cae76c616da0aea5b92cebcd38d59263b7))
## [2.0.27](https://github.com/appium/appium/compare/@appium/doctor@2.0.26...@appium/doctor@2.0.27) (2023-10-19)
### Bug Fixes
* **doctor:** update dependency appium-adb to v11 ([#19321](https://github.com/appium/appium/issues/19321)) ([408885a](https://github.com/appium/appium/commit/408885a5b28f8691dbbb3716f3c1a409d662275b))
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [2.0.26](https://github.com/appium/appium/compare/@appium/doctor@2.0.25...@appium/doctor@2.0.26) (2023-10-18)
### Bug Fixes
* **doctor:** update dependency appium-adb to v10 ([#19308](https://github.com/appium/appium/issues/19308)) ([3315671](https://github.com/appium/appium/commit/33156712b142b1cb2ffdcf1cfdf65f5b504e7751))
* **doctor:** update dependency appium-adb to v9.14.10 ([809b2da](https://github.com/appium/appium/commit/809b2daea5304942c849b7015f0a74447fb7b57c))
* **doctor:** update dependency appium-adb to v9.14.11 ([c81e99f](https://github.com/appium/appium/commit/c81e99fd80739d97b3dc2099a43cc66245035bc5))
* **doctor:** update dependency appium-adb to v9.14.12 ([0220a9f](https://github.com/appium/appium/commit/0220a9f8e9a890f84031cfeaea026fceb0a303e9))
* **doctor:** update dependency appium-adb to v9.14.7 ([#19058](https://github.com/appium/appium/issues/19058)) ([f8039a7](https://github.com/appium/appium/commit/f8039a70ca851dcc120a2b217e14e3e3b922ba21))
* **doctor:** update dependency appium-adb to v9.14.9 ([9f700bf](https://github.com/appium/appium/commit/9f700bfdf9e09de3cea9f81029fadef84b8e956b))
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
* **support:** update dependency @types/teen_process to v2.0.1 ([d2f19aa](https://github.com/appium/appium/commit/d2f19aab935cc6ec00a51f042b5f02674a772198))
* **support:** update dependency teen_process to v2.0.10 ([bc1b56a](https://github.com/appium/appium/commit/bc1b56a3c162ed8686d3d7956c30eb1f7682b1a7))
* **support:** update dependency teen_process to v2.0.12 ([c5d6df7](https://github.com/appium/appium/commit/c5d6df7a000d64e8591a56ce5ef65baa2071a36b))
* **support:** update dependency teen_process to v2.0.13 ([a0c4b84](https://github.com/appium/appium/commit/a0c4b84fb7d3977b7a4ca0a07fadd49ee355791a))
* **support:** update dependency teen_process to v2.0.18 ([ffeebc7](https://github.com/appium/appium/commit/ffeebc74b72e5eadf658325e67708ae6ed5b8346))
* **support:** update dependency teen_process to v2.0.19 ([2ef40fe](https://github.com/appium/appium/commit/2ef40febdc717f54ea618ecfe1058b858fe2daf9))
* **support:** update dependency teen_process to v2.0.23 ([1b0459e](https://github.com/appium/appium/commit/1b0459edd656514d8706aab8e21cd4d40de2ec5d))
* **support:** update dependency teen_process to v2.0.24 ([bc72c66](https://github.com/appium/appium/commit/bc72c6676a5412b60e74bb143a223738ce059977))
* **support:** update dependency teen_process to v2.0.27 ([03b2aa6](https://github.com/appium/appium/commit/03b2aa6b6e45fa0ea24c4691b039255bc4399733))
* **support:** update dependency teen_process to v2.0.30 ([7cdb142](https://github.com/appium/appium/commit/7cdb1429a1104ad3699547f2a2dd9b237135891a))
* **support:** update dependency teen_process to v2.0.34 ([#19218](https://github.com/appium/appium/issues/19218)) ([c28fcef](https://github.com/appium/appium/commit/c28fcefa725fbce5a0464e57946051e3cb023d85))
* **support:** update dependency teen_process to v2.0.37 ([6d894be](https://github.com/appium/appium/commit/6d894bef6f377ebfdffdeb1adde7a72624844414))
* **support:** update dependency teen_process to v2.0.38 ([a32dc11](https://github.com/appium/appium/commit/a32dc1110125d0f1fac9c66c17f1309145a634c7))
* **support:** update dependency teen_process to v2.0.40 ([2837bcd](https://github.com/appium/appium/commit/2837bcdeb19532fe973a2902db5c8d730252d962))
* **support:** update dependency teen_process to v2.0.41 ([1a34396](https://github.com/appium/appium/commit/1a34396339f71d40353d323feaf78afcf2269fc9))
* **support:** update dependency teen_process to v2.0.42 ([e2a670e](https://github.com/appium/appium/commit/e2a670e1c4a0f061b0bfb08a6b534d9deb7bdd9c))
* **support:** update dependency teen_process to v2.0.45 ([ea731bf](https://github.com/appium/appium/commit/ea731bf117d680496fce453ac42cfee7f05ada60))
* **support:** update dependency teen_process to v2.0.48 ([eebc651](https://github.com/appium/appium/commit/eebc651f31c282baa7e77a6384d3ee8efc0072d6))
* **support:** update dependency teen_process to v2.0.50 ([ca3e5d9](https://github.com/appium/appium/commit/ca3e5d90e4c51fc1dda32154e1d77e65cb44fb54))
* **support:** update dependency teen_process to v2.0.9 ([6c7f3ef](https://github.com/appium/appium/commit/6c7f3ef670d441bdc4b693948a19dcbdc54e4764))
## [2.0.25](https://github.com/appium/appium/compare/@appium/doctor@2.0.24...@appium/doctor@2.0.25) (2023-08-22)
**Note:** Version bump only for package @appium/doctor
## [2.0.24](https://github.com/appium/appium/compare/@appium/doctor@2.0.23...@appium/doctor@2.0.24) (2023-08-21)
### Bug Fixes
* **doctor:** update dependency appium-adb to v9.14.5 ([d5f3a28](https://github.com/appium/appium/commit/d5f3a288c2497d4020b7eabc667814744e69ac48))
## [2.0.23](https://github.com/appium/appium/compare/@appium/doctor@2.0.22...@appium/doctor@2.0.23) (2023-08-17)
+1 -1
View File
@@ -52,7 +52,7 @@ class AndroidToolCheck extends DoctorCheck {
const sdkRoot = getSdkRootFromEnv();
if (!sdkRoot) {
return nok(
`${listOfTools} could not be found because ANDROID_HOME or ANDROID_SDK_ROOT is NOT set!`
`${listOfTools} could not be found because ANDROID_HOME is NOT set!`
);
}
-1
View File
@@ -3,7 +3,6 @@ import {exec} from 'teen_process';
import {DoctorCheck} from './doctor';
import NodeDetector from './node-detector';
import {util, env} from '@appium/support';
import {EOL} from 'os';
import '@colors/colors';
/**
+1 -1
View File
@@ -155,7 +155,7 @@ class OptionalApplesimutilsCommandCheck extends DoctorCheck {
async fix() {
return `Why ${
'applesimutils'.bold
} is needed and how to install it: http://appium.io/docs/en/drivers/ios-xcuitest/`;
} is needed and how to install it: https://github.com/appium/appium-xcuitest-driver/blob/master/docs/execute-methods.md#mobile-setpermission`;
}
}
checks.push(new OptionalApplesimutilsCommandCheck());
+6 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/doctor",
"version": "2.0.23",
"version": "2.0.28",
"description": "Test environment for fitness to run Appium",
"keywords": [
"automation",
@@ -44,16 +44,16 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/support": "^4.1.4",
"@appium/support": "^4.1.9",
"@colors/colors": "1.6.0",
"@types/bluebird": "3.5.38",
"@types/teen_process": "2.0.0",
"appium-adb": "9.14.4",
"@types/bluebird": "3.5.42",
"@types/teen_process": "2.0.3",
"appium-adb": "11.0.7",
"bluebird": "3.7.2",
"inquirer": "8.2.6",
"lodash": "4.17.21",
"source-map-support": "0.5.21",
"teen_process": "2.0.4",
"teen_process": "2.0.84",
"yargs": "17.7.2"
},
"engines": {
+1 -1
View File
@@ -92,7 +92,7 @@ describe('android', function () {
(await check.diagnose()).should.deep.equal({
ok: false,
optional: false,
message: `adb, emulator, ${apkAnalyzerFilename} could not be found because ANDROID_HOME or ANDROID_SDK_ROOT is NOT set!`,
message: `adb, emulator, ${apkAnalyzerFilename} could not be found because ANDROID_HOME is NOT set!`,
});
});
it('diagnose - failure - path not valid', async function () {
+1 -1
View File
@@ -346,7 +346,7 @@ describe('ios', function () {
});
it('fix', async function () {
removeColors(await check.fix()).should.equal(
'Why applesimutils is needed and how to install it: http://appium.io/docs/en/drivers/ios-xcuitest/'
'Why applesimutils is needed and how to install it: https://github.com/appium/appium-xcuitest-driver/blob/master/docs/execute-methods.md#mobile-setpermission'
);
});
})
+81
View File
@@ -3,6 +3,87 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.4.12](https://github.com/appium/appium/compare/@appium/docutils@0.4.11...@appium/docutils@0.4.12) (2023-11-14)
### Bug Fixes
* **docutils:** update dependency yaml to v2.3.4 ([a215a89](https://github.com/appium/appium/commit/a215a89f684c50da24d669d60a73fb6268b05c7f))
* **support:** update definitelytyped ([#19326](https://github.com/appium/appium/issues/19326)) ([9840315](https://github.com/appium/appium/commit/98403151f86665d723bf887e907825bbc4cc2d3d))
* **support:** update dependency teen_process to v2.0.57 ([1fbd503](https://github.com/appium/appium/commit/1fbd503a66b965a9b32bbb6702062861a8480333))
* **support:** update dependency teen_process to v2.0.63 ([fa57192](https://github.com/appium/appium/commit/fa571925b7ac980cc99c8d23f659420eacd8546c))
* **support:** update dependency teen_process to v2.0.64 ([332bb59](https://github.com/appium/appium/commit/332bb59ee3fdd14c03f6b3c4fd6587a30319d568))
* **support:** update dependency teen_process to v2.0.66 ([3205b5d](https://github.com/appium/appium/commit/3205b5d06f073f1e5c7735c6e36ad08fdf091182))
* **support:** update dependency teen_process to v2.0.67 ([3b5ae2a](https://github.com/appium/appium/commit/3b5ae2ab17c74c9890b53c081aec146152f11c7a))
* **support:** update dependency teen_process to v2.0.73 ([8e453be](https://github.com/appium/appium/commit/8e453bed3f440c1dcf82f016f7d4431365b9cdff))
* **support:** update dependency teen_process to v2.0.75 ([fbb6fd9](https://github.com/appium/appium/commit/fbb6fd9a2780eb00c15584abeaf644a1fcdecb4d))
* **support:** update teen_process-related packages ([84d96db](https://github.com/appium/appium/commit/84d96dbae45dfe56218d32330f8ff2d26b750fb7))
* **support:** update teen_process-related packages ([3d0b97c](https://github.com/appium/appium/commit/3d0b97cae76c616da0aea5b92cebcd38d59263b7))
## [0.4.11](https://github.com/appium/appium/compare/@appium/docutils@0.4.10...@appium/docutils@0.4.11) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
## [0.4.10](https://github.com/appium/appium/compare/@appium/docutils@0.4.9...@appium/docutils@0.4.10) (2023-10-18)
### Bug Fixes
* **docutils:** update dependency yaml to v2.3.2 ([1a3d408](https://github.com/appium/appium/commit/1a3d408e239e4a9a7070923a90aca70df1dda908))
* **docutils:** update dependency yaml to v2.3.3 ([caf600b](https://github.com/appium/appium/commit/caf600bffd5f25971d0270e9990b2640a671e366))
* **support:** update dependency teen_process to v2.0.10 ([bc1b56a](https://github.com/appium/appium/commit/bc1b56a3c162ed8686d3d7956c30eb1f7682b1a7))
* **support:** update dependency teen_process to v2.0.12 ([c5d6df7](https://github.com/appium/appium/commit/c5d6df7a000d64e8591a56ce5ef65baa2071a36b))
* **support:** update dependency teen_process to v2.0.13 ([a0c4b84](https://github.com/appium/appium/commit/a0c4b84fb7d3977b7a4ca0a07fadd49ee355791a))
* **support:** update dependency teen_process to v2.0.18 ([ffeebc7](https://github.com/appium/appium/commit/ffeebc74b72e5eadf658325e67708ae6ed5b8346))
* **support:** update dependency teen_process to v2.0.19 ([2ef40fe](https://github.com/appium/appium/commit/2ef40febdc717f54ea618ecfe1058b858fe2daf9))
* **support:** update dependency teen_process to v2.0.23 ([1b0459e](https://github.com/appium/appium/commit/1b0459edd656514d8706aab8e21cd4d40de2ec5d))
* **support:** update dependency teen_process to v2.0.24 ([bc72c66](https://github.com/appium/appium/commit/bc72c6676a5412b60e74bb143a223738ce059977))
* **support:** update dependency teen_process to v2.0.27 ([03b2aa6](https://github.com/appium/appium/commit/03b2aa6b6e45fa0ea24c4691b039255bc4399733))
* **support:** update dependency teen_process to v2.0.30 ([7cdb142](https://github.com/appium/appium/commit/7cdb1429a1104ad3699547f2a2dd9b237135891a))
* **support:** update dependency teen_process to v2.0.34 ([#19218](https://github.com/appium/appium/issues/19218)) ([c28fcef](https://github.com/appium/appium/commit/c28fcefa725fbce5a0464e57946051e3cb023d85))
* **support:** update dependency teen_process to v2.0.37 ([6d894be](https://github.com/appium/appium/commit/6d894bef6f377ebfdffdeb1adde7a72624844414))
* **support:** update dependency teen_process to v2.0.38 ([a32dc11](https://github.com/appium/appium/commit/a32dc1110125d0f1fac9c66c17f1309145a634c7))
* **support:** update dependency teen_process to v2.0.40 ([2837bcd](https://github.com/appium/appium/commit/2837bcdeb19532fe973a2902db5c8d730252d962))
* **support:** update dependency teen_process to v2.0.41 ([1a34396](https://github.com/appium/appium/commit/1a34396339f71d40353d323feaf78afcf2269fc9))
* **support:** update dependency teen_process to v2.0.42 ([e2a670e](https://github.com/appium/appium/commit/e2a670e1c4a0f061b0bfb08a6b534d9deb7bdd9c))
* **support:** update dependency teen_process to v2.0.45 ([ea731bf](https://github.com/appium/appium/commit/ea731bf117d680496fce453ac42cfee7f05ada60))
* **support:** update dependency teen_process to v2.0.48 ([eebc651](https://github.com/appium/appium/commit/eebc651f31c282baa7e77a6384d3ee8efc0072d6))
* **support:** update dependency teen_process to v2.0.50 ([ca3e5d9](https://github.com/appium/appium/commit/ca3e5d90e4c51fc1dda32154e1d77e65cb44fb54))
* **support:** update dependency teen_process to v2.0.9 ([6c7f3ef](https://github.com/appium/appium/commit/6c7f3ef670d441bdc4b693948a19dcbdc54e4764))
## [0.4.9](https://github.com/appium/appium/compare/@appium/docutils@0.4.8...@appium/docutils@0.4.9) (2023-08-23)
**Note:** Version bump only for package @appium/docutils
## [0.4.8](https://github.com/appium/appium/compare/@appium/docutils@0.4.7...@appium/docutils@0.4.8) (2023-08-22)
**Note:** Version bump only for package @appium/docutils
## [0.4.7](https://github.com/appium/appium/compare/@appium/docutils@0.4.6...@appium/docutils@0.4.7) (2023-08-21)
**Note:** Version bump only for package @appium/docutils
## [0.4.6](https://github.com/appium/appium/compare/@appium/docutils@0.4.5...@appium/docutils@0.4.6) (2023-08-17)
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/docutils",
"version": "0.4.6",
"version": "0.4.12",
"description": "Documentation generation utilities for Appium and related projects",
"keywords": [
"automation",
@@ -49,11 +49,11 @@
"start": "node ./build/lib/cli/index.js"
},
"dependencies": {
"@appium/support": "^4.1.4",
"@appium/tsconfig": "^0.3.0",
"@appium/typedoc-plugin-appium": "^0.6.6",
"@appium/support": "^4.1.9",
"@appium/tsconfig": "^0.x",
"@appium/typedoc-plugin-appium": "^0.x",
"@sliphua/lilconfig-ts-loader": "3.2.2",
"@types/which": "3.0.0",
"@types/which": "3.0.1",
"chalk": "4.1.2",
"consola": "2.15.3",
"diff": "5.1.0",
@@ -67,13 +67,13 @@
"read-pkg": "5.2.0",
"semver": "7.5.4",
"source-map-support": "0.5.21",
"teen_process": "2.0.4",
"teen_process": "2.0.84",
"type-fest": "3.13.1",
"typedoc": "0.23.28",
"typedoc-plugin-markdown": "3.14.0",
"typedoc-plugin-resolve-crossmodule-references": "0.3.3",
"typescript": "4.9.5",
"yaml": "2.3.1",
"typescript": "5.0.4",
"yaml": "2.3.4",
"yargs": "17.7.2",
"yargs-parser": "21.1.1"
},
+3 -3
View File
@@ -1,4 +1,4 @@
mkdocs==1.5.2
mkdocs-material==9.1.21
mkdocs-material-extensions==1.1.1
mkdocs==1.5.3
mkdocs-material==9.4.8
mkdocs-material-extensions==1.3
mike==1.1.2
+55
View File
@@ -3,6 +3,61 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.4.17](https://github.com/appium/appium/compare/@appium/driver-test-support@0.4.16...@appium/driver-test-support@0.4.17) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
* **support:** update dependency axios to v1.6.0 ([699c493](https://github.com/appium/appium/commit/699c49306c38e222d618a9611482b06a3e6806aa))
* **support:** update dependency axios to v1.6.1 ([9b14205](https://github.com/appium/appium/commit/9b14205288ef09fd4a1144fc93c82b2bb2ed2ec0))
## [0.4.16](https://github.com/appium/appium/compare/@appium/driver-test-support@0.4.15...@appium/driver-test-support@0.4.16) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
* **test-support:** update dependency sinon to v16.1.3 ([aaa7668](https://github.com/appium/appium/commit/aaa7668ae6d58f1ac6a5af957b9b214ee71c6a48))
## [0.4.15](https://github.com/appium/appium/compare/@appium/driver-test-support@0.4.14...@appium/driver-test-support@0.4.15) (2023-10-18)
### Bug Fixes
* **driver-test-support:** update dependency @types/lodash to v4.14.198 ([84fefd2](https://github.com/appium/appium/commit/84fefd214c40408cbbcd145723b5d8dbeec665af))
* **driver-test-support:** update dependency chai to v4.3.10 ([7a06ec5](https://github.com/appium/appium/commit/7a06ec5041e0ca4f6bf1ed9c771cb722dd707dc4))
* **driver-test-support:** update dependency chai to v4.3.8 ([#19059](https://github.com/appium/appium/issues/19059)) ([d85b216](https://github.com/appium/appium/commit/d85b2161b5b8ac8654e25c2f357de50a7068d8e1))
* **support:** update definitelytyped ([595d460](https://github.com/appium/appium/commit/595d460ac8dc41d310f9e4f653acbad3c7fd50b9))
* **support:** update dependency axios to v1.5.0 ([08913cd](https://github.com/appium/appium/commit/08913cddde295f616f0fb376cc2cb71a9409a253))
* **support:** update dependency axios to v1.5.1 ([#19217](https://github.com/appium/appium/issues/19217)) ([3df047d](https://github.com/appium/appium/commit/3df047d128d5d032826c8f5fb605b019078b717d))
* **test-support:** update dependency sinon to v16 ([#19161](https://github.com/appium/appium/issues/19161)) ([49b3434](https://github.com/appium/appium/commit/49b3434c2bc324b5dc9f8204242c12f04b5252af))
* **test-support:** update dependency sinon to v16.1.0 ([126daec](https://github.com/appium/appium/commit/126daeca4e600b75cf37f9fc15a1b6e563058b3c))
## [0.4.14](https://github.com/appium/appium/compare/@appium/driver-test-support@0.4.13...@appium/driver-test-support@0.4.14) (2023-08-22)
**Note:** Version bump only for package @appium/driver-test-support
## [0.4.13](https://github.com/appium/appium/compare/@appium/driver-test-support@0.4.12...@appium/driver-test-support@0.4.13) (2023-08-21)
### Bug Fixes
* **driver-test-support:** update dependency @types/lodash to v4.14.197 ([a080b72](https://github.com/appium/appium/commit/a080b729208b4e3c352456f0f230b63b0b7ee9ee))
## [0.4.12](https://github.com/appium/appium/compare/@appium/driver-test-support@0.4.11...@appium/driver-test-support@0.4.12) (2023-08-17)
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/driver-test-support",
"version": "0.4.12",
"version": "0.4.17",
"description": "Test utilities for Appium drivers",
"keywords": [
"automation",
@@ -41,15 +41,15 @@
},
"types": "./build/lib/index.d.ts",
"dependencies": {
"@appium/types": "^0.13.3",
"@types/lodash": "4.14.196",
"@types/stoppable": "1.1.1",
"axios": "1.4.0",
"@appium/types": "^0.14.2",
"@types/lodash": "4.14.201",
"@types/stoppable": "1.1.3",
"axios": "1.6.1",
"bluebird": "3.7.2",
"chai": "4.3.7",
"chai": "4.3.10",
"get-port": "5.1.1",
"lodash": "4.17.21",
"sinon": "15.2.0",
"sinon": "16.1.3",
"source-map-support": "0.5.21",
"stoppable": "1.1.0",
"type-fest": "3.13.1"
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.3.2](https://github.com/appium/appium/compare/@appium/eslint-config-appium-ts@0.3.1...@appium/eslint-config-appium-ts@0.3.2) (2023-10-18)
**Note:** Version bump only for package @appium/eslint-config-appium-ts
## [0.3.1](https://github.com/appium/appium/compare/@appium/eslint-config-appium-ts@0.3.0...@appium/eslint-config-appium-ts@0.3.1) (2023-04-03)
**Note:** Version bump only for package @appium/eslint-config-appium-ts
+4 -1
View File
@@ -58,7 +58,10 @@ module.exports = {
* want to be replaced with `import()` (I am not sure if there's a rule about that?). **If this check fails**, disable the rule for the particular line.
*/
'@typescript-eslint/no-var-requires': 'error',
// 'no-unused-vars': 'off',
/**
* Sometimes we want unused variables to be present in base class method declarations.
*/
'@typescript-eslint/no-unused-vars': 'warn',
/**
* Allow native `Promise`s. **This overrides `@appium/eslint-config-appium`.**
* @remarks Originally, this was so that we could use [bluebird](https://npm.im/bluebird)
@@ -1,6 +1,6 @@
{
"name": "@appium/eslint-config-appium-ts",
"version": "0.3.1",
"version": "0.3.2",
"description": "Shared ESLint config for Appium projects (TypeScript version)",
"keywords": [
"eslint",
@@ -29,10 +29,10 @@
},
"peerDependencies": {
"@appium/eslint-config-appium": "^8.0.0",
"@typescript-eslint/eslint-plugin": "^5.5.0",
"@typescript-eslint/parser": "^5.5.0",
"@typescript-eslint/eslint-plugin": "^5.5.0 || ^6.0.0",
"@typescript-eslint/parser": "^5.5.0 || ^6.0.0",
"eslint": "^8.21.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-prettier": "^8.5.0 || ^9.0.0",
"eslint-import-resolver-typescript": "^3.5.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-mocha": "^10.1.0",
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.0.5](https://github.com/appium/appium/compare/@appium/eslint-config-appium@8.0.4...@appium/eslint-config-appium@8.0.5) (2023-10-18)
**Note:** Version bump only for package @appium/eslint-config-appium
## [8.0.4](https://github.com/appium/appium/compare/@appium/eslint-config-appium@8.0.3...@appium/eslint-config-appium@8.0.4) (2023-07-03)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/eslint-config-appium",
"version": "8.0.4",
"version": "8.0.5",
"description": "Shared ESLint config for Appium projects",
"keywords": [
"eslint",
@@ -31,7 +31,7 @@
},
"peerDependencies": {
"eslint": "^8.21.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-prettier": "^8.5.0 || ^9.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-mocha": "^10.1.0",
"eslint-plugin-promise": "^6.0.0"
@@ -3,6 +3,67 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.0.20](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.19...@appium/execute-driver-plugin@3.0.20) (2023-11-14)
### Bug Fixes
* **execute-driver-plugin:** update dependency webdriverio to v8.20.3 ([1f79433](https://github.com/appium/appium/commit/1f79433059749f91f6e212745863e577f7456d73))
* **execute-driver-plugin:** update dependency webdriverio to v8.21.0 ([d44a136](https://github.com/appium/appium/commit/d44a136e55f8f2c6070ad1f3e3e010ebd5522a84))
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
## [3.0.19](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.18...@appium/execute-driver-plugin@3.0.19) (2023-10-19)
### Bug Fixes
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [3.0.18](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.17...@appium/execute-driver-plugin@3.0.18) (2023-10-18)
### Bug Fixes
* **execute-driver-plugin:** update dependency webdriverio to v8.15.10 ([545576a](https://github.com/appium/appium/commit/545576a740265284e154a9dcc82a225d3cd3481f))
* **execute-driver-plugin:** update dependency webdriverio to v8.15.6 ([0830fd8](https://github.com/appium/appium/commit/0830fd8257b0d4674ea5af45689a7a5a2610ee74))
* **execute-driver-plugin:** update dependency webdriverio to v8.15.8 ([b510fad](https://github.com/appium/appium/commit/b510fad303472e6de6a656f40b7d87bd64e62685))
* **execute-driver-plugin:** update dependency webdriverio to v8.15.9 ([427bc8e](https://github.com/appium/appium/commit/427bc8eb0c374ecd4d53eb4fdad4b32c2bfffd00))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.0 ([207700b](https://github.com/appium/appium/commit/207700bc829b8aa19bc46b0952e7b2f890ea8c90))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.10 ([48be0f8](https://github.com/appium/appium/commit/48be0f83b05f465f9e422496dbac7e63767fa5f5))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.11 ([cef37d3](https://github.com/appium/appium/commit/cef37d3ee3aba2d93773d159f58d895e5fd6c17e))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.12 ([34d978e](https://github.com/appium/appium/commit/34d978e8504ac5e7f3b302641272676c7e0949ef))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.15 ([2281e11](https://github.com/appium/appium/commit/2281e1102826e4c03eb98f6d8b5b0630bd7ed795))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.17 ([f3614ad](https://github.com/appium/appium/commit/f3614adbde76c4ab98fd1dbfa9207fdfe84c7377))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.18 ([5d172a5](https://github.com/appium/appium/commit/5d172a58bd40a66f605ab3eaaf55d54dd895fb22))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.2 ([2d3c5cd](https://github.com/appium/appium/commit/2d3c5cd0b721074e6f7bbadc958bb8d27e9254ac))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.20 ([11926d4](https://github.com/appium/appium/commit/11926d4d39c521b88502f3fab770d8917f3f9144))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.22 ([8c7225d](https://github.com/appium/appium/commit/8c7225d4e94a0042ebf56ca9d758205c2f1a4083))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.3 ([d1a4932](https://github.com/appium/appium/commit/d1a493240973e41645a43a44f3cebe82d514b5b2))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.4 ([fea8f85](https://github.com/appium/appium/commit/fea8f8537defd16053fba5623dace4f27a8aaa1f))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.5 ([862225c](https://github.com/appium/appium/commit/862225c1d8473e175aa793bda943056359369338))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.6 ([7625218](https://github.com/appium/appium/commit/7625218c221c45b6179fc1dcf2103045e4c22718))
* **execute-driver-plugin:** update dependency webdriverio to v8.16.7 ([4b09c32](https://github.com/appium/appium/commit/4b09c323d9da65f0631d150e2a402c791ec36f3d))
* **execute-driver-plugin:** update dependency webdriverio to v8.17.0 ([#19277](https://github.com/appium/appium/issues/19277)) ([f52a23c](https://github.com/appium/appium/commit/f52a23c6866b7352e1eb53ed6e737d22c81ccc34))
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
* **tsconfig:** update dependency @tsconfig/node14 to v14 ([#19082](https://github.com/appium/appium/issues/19082)) ([65b3787](https://github.com/appium/appium/commit/65b3787912a4948fb1ed48e8095299bc9ba95844))
## [3.0.17](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.16...@appium/execute-driver-plugin@3.0.17) (2023-08-22)
### Bug Fixes
* **execute-driver-plugin:** update dependency webdriverio to v7.32.4 ([4e4eaad](https://github.com/appium/appium/commit/4e4eaad6b68386e900427aafd9afd19f43033bda))
* **execute-driver-plugin:** update dependency webdriverio to v8 ([#18095](https://github.com/appium/appium/issues/18095)) ([b608db9](https://github.com/appium/appium/commit/b608db91a8ef0e3cad43ce3e14b625bf9234d383))
## [3.0.16](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.15...@appium/execute-driver-plugin@3.0.16) (2023-08-17)
@@ -89,7 +89,7 @@ function coerceScriptResult(obj) {
} catch (e) {
log.warn(
'Could not convert executeDriverScript to safe response!' +
`Result was: ${JSON.stringify(obj)}. Will make it null`
`Result was: ${JSON.stringify(obj)}. Will make it null`,
);
return null;
}
+8 -6
View File
@@ -67,12 +67,14 @@ export default class ExecuteDriverPlugin extends BasePlugin {
const driverOpts = {
sessionId: driver.sessionId,
// Appium probably won't be behind ssl locally; if it ever is, might need to update this to
// provide a user configurable parameter
protocol: 'http',
hostname: driver.serverHost,
port: driver.serverPort,
path: driver.serverPath,
options: {
// Appium probably won't be behind ssl locally; if it ever is, might need to update this to
// provide a user configurable parameter
protocol: 'http',
hostname: driver.serverHost,
port: driver.serverPort,
path: driver.serverPath,
},
isW3C: true,
isMobile: true,
capabilities: driver.caps,
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/execute-driver-plugin",
"version": "3.0.16",
"version": "3.0.20",
"description": "Plugin for batching and executing driver commands with Appiums",
"keywords": [
"automation",
@@ -38,12 +38,12 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@types/bluebird": "3.5.38",
"@types/bluebird": "3.5.42",
"bluebird": "3.7.2",
"lodash": "4.17.21",
"source-map-support": "0.5.21",
"vm2": "3.9.19",
"webdriverio": "7.32.3"
"webdriverio": "8.21.0"
},
"peerDependencies": {
"appium": "^2.0.0-beta.35"
@@ -67,7 +67,7 @@ describe('ExecuteDriverPlugin', function () {
it('should not work unless the allowInsecure feature flag is set', async function () {
driver = await wdio({...WDIO_OPTS, port: this.port});
await driver
.driverScript(basicScript)
.executeDriverScript(basicScript)
.should.be.rejectedWith(/allow-insecure.+execute_driver_script/i);
});
});
@@ -91,7 +91,7 @@ describe('ExecuteDriverPlugin', function () {
return [timeouts, status];
`;
const expectedTimeouts = {command: 60000, implicit: 0};
const {result, logs} = await driver.driverScript(script);
const {result, logs} = await driver.executeDriverScript(script);
result[0].should.eql(expectedTimeouts);
result[1].build.should.exist;
result[1].build.version.should.exist;
@@ -100,14 +100,14 @@ describe('ExecuteDriverPlugin', function () {
it('should fail with any script type other than webdriverio currently', async function () {
const script = `return 'foo'`;
await driver.driverScript(script, 'wd').should.be.rejectedWith(/webdriverio/);
await driver.executeDriverScript(script, 'wd').should.be.rejectedWith(/webdriverio/);
});
it('should execute a webdriverio script that returns elements correctly', async function () {
const script = `
return await driver.$("#Button1");
`;
const {result} = await driver.driverScript(script);
const {result} = await driver.executeDriverScript(script);
result.should.eql({
[W3C_ELEMENT_KEY]: '1',
[MJSONWP_ELEMENT_KEY]: '1',
@@ -119,7 +119,7 @@ describe('ExecuteDriverPlugin', function () {
const el = await driver.$("#Button1");
return {element: el, elements: [el, el]};
`;
const {result} = await driver.driverScript(script);
const {result} = await driver.executeDriverScript(script);
const elObj = {
[W3C_ELEMENT_KEY]: '1',
[MJSONWP_ELEMENT_KEY]: '1',
@@ -135,7 +135,7 @@ describe('ExecuteDriverPlugin', function () {
console.error("baz");
return null;
`;
const {logs} = await driver.driverScript(script);
const {logs} = await driver.executeDriverScript(script);
logs.should.eql({log: ['foo', 'foo2'], warn: ['bar'], error: ['baz']});
});
@@ -143,7 +143,7 @@ describe('ExecuteDriverPlugin', function () {
const script = `
return typeof driver.lock;
`;
const {result} = await driver.driverScript(script);
const {result} = await driver.executeDriverScript(script);
result.should.eql('function');
});
@@ -151,7 +151,7 @@ describe('ExecuteDriverPlugin', function () {
const script = `
return await driver.$("~notfound");
`;
const {result} = await driver.driverScript(script);
const {result} = await driver.executeDriverScript(script);
result.error.error.should.equal('no such element');
result.error.message.should.match(/element could not be located/);
result.error.stacktrace.should.includes('NoSuchElementError:');
@@ -164,7 +164,7 @@ describe('ExecuteDriverPlugin', function () {
return {;
`;
await driver
.driverScript(script)
.executeDriverScript(script)
.should.be.rejectedWith(/Could not execute driver script.+Unexpected token/);
});
@@ -174,7 +174,7 @@ describe('ExecuteDriverPlugin', function () {
return true;
`;
await driver
.driverScript(script, 'webdriverio', 50)
.executeDriverScript(script, 'webdriverio', 50)
.should.be.rejectedWith(/.+50.+timeout.+/);
});
});
+2 -1
View File
@@ -1,7 +1,8 @@
{
"compilerOptions": {
"outDir": "build",
"checkJs": true
"checkJs": true,
"moduleResolution": "node10"
},
"extends": "@appium/tsconfig/tsconfig.plugin.json",
"include": ["lib"]
+38
View File
@@ -3,6 +3,44 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [5.2.11](https://github.com/appium/appium/compare/@appium/fake-driver@5.2.10...@appium/fake-driver@5.2.11) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
## [5.2.10](https://github.com/appium/appium/compare/@appium/fake-driver@5.2.9...@appium/fake-driver@5.2.10) (2023-10-19)
### Bug Fixes
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [5.2.9](https://github.com/appium/appium/compare/@appium/fake-driver@5.2.8...@appium/fake-driver@5.2.9) (2023-10-18)
### Bug Fixes
* **images-plugin:** update dependency lru-cache to v10 ([#19050](https://github.com/appium/appium/issues/19050)) ([72a806b](https://github.com/appium/appium/commit/72a806bec7c3a80747192d24dfd9d8286a751810))
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
## [5.2.8](https://github.com/appium/appium/compare/@appium/fake-driver@5.2.7...@appium/fake-driver@5.2.8) (2023-08-21)
### Bug Fixes
* **universal-xml-plugin:** update dependency xpath to v0.0.33 ([#18952](https://github.com/appium/appium/issues/18952)) ([f2cff24](https://github.com/appium/appium/commit/f2cff24685e96578f17549454de7b7931c13df83))
## [5.2.7](https://github.com/appium/appium/compare/@appium/fake-driver@5.2.6...@appium/fake-driver@5.2.7) (2023-08-17)
@@ -73,7 +73,7 @@ const ContextsMixin: FakeDriverContextsMixin = {
this.appModel.deactivateFrame();
} else {
const nodes = this.appModel.xpathQuery(`//iframe[@id="${frameId}"]`);
if (!nodes.length) {
if (!_.isArray(nodes) || _.isEmpty(nodes)) {
throw new errors.NoSuchFrameError();
}
this.appModel.activateFrame(nodes[0]);
@@ -71,7 +71,6 @@ import './general';
//rest.post('/wd/hub/session/:sessionId?/appium/device/press_keycode', controller.pressKeyCode);
//rest.post('/wd/hub/session/:sessionId?/appium/device/long_press_keycode', controller.longPressKeyCode);
//rest.post('/wd/hub/session/:sessionId?/appium/device/keyevent', controller.keyevent);
//rest.post('/wd/hub/session/:sessionId?/appium/device/rotate', controller.mobileRotation);
//rest.get('/wd/hub/session/:sessionId?/appium/device/current_activity', controller.getCurrentActivity);
//rest.post('/wd/hub/session/:sessionId?/appium/device/install_app', controller.installApp);
//rest.post('/wd/hub/session/:sessionId?/appium/device/remove_app', controller.removeApp);
+4 -4
View File
@@ -1,6 +1,5 @@
import B from 'bluebird';
import {BaseDriver, errors} from 'appium/driver';
import {deprecatedCommandsLogged} from '@appium/base-driver/build/lib/protocol/protocol';
import {FakeApp} from './fake-app';
const FAKE_DRIVER_CONSTRAINTS = /** @type {const} */ ({
@@ -56,7 +55,7 @@ export class FakeDriver extends BaseDriver {
constructor(
opts = /** @type {import('@appium/types').InitialOpts} */ ({}),
shouldValidateCaps = true
shouldValidateCaps = true,
) {
super(opts, shouldValidateCaps);
this.curContext = 'NATIVE_APP';
@@ -114,7 +113,7 @@ export class FakeDriver extends BaseDriver {
if (d.isUnique) {
throw new errors.SessionNotCreatedError(
'Cannot start session; another ' +
'unique session is in progress that requires all resources'
'unique session is in progress that requires all resources',
);
}
}
@@ -167,7 +166,8 @@ export class FakeDriver extends BaseDriver {
*/
async getDeprecatedCommandsCalled() {
await B.delay(1);
return Array.from(deprecatedCommandsLogged);
// TODO: Properly get deprecatedCommandsLogged list from the base-driver
return [];
}
/**
+10 -3
View File
@@ -4,6 +4,7 @@ import path from 'path';
import XMLDom from '@xmldom/xmldom';
import xpath from 'xpath';
import log from './logger';
import _ from 'lodash';
import {FakeElement} from './fake-element';
const SCREENSHOT = path.join(__dirname, 'screen.png');
@@ -28,7 +29,7 @@ export class FakeApp {
get title() {
let nodes = this.xpathQuery('//title');
if (nodes.length < 1) {
if (!_.isArray(nodes) || nodes.length < 1) {
throw new Error('No title!');
}
const node = /** @type {Node} */ (nodes[0]);
@@ -75,6 +76,11 @@ export class FakeApp {
setDims() {
const nodes = this.xpathQuery('//app');
if (!_.isArray(nodes)) {
throw new Error(
'Cannot fetch app dimensions because no corresponding node has benn found in the source'
);
}
const app = new FakeElement(nodes[0], this);
this._width = parseInt(app.nodeAttrs.width, 10);
this._height = parseInt(app.nodeAttrs.height, 10);
@@ -93,7 +99,8 @@ export class FakeApp {
}
getWebviews() {
return this.xpathQuery('//MockWebView/*[1]').map((n) => new FakeWebView(n));
const nodes = this.xpathQuery('//MockWebView/*[1]');
return _.isArray(nodes) ? nodes.map((n) => new FakeWebView(n)) : [];
}
activateWebview(wv) {
@@ -153,7 +160,7 @@ export class FakeApp {
showAlert(alertId) {
let nodes = this.xpathQuery(`//alert[@id="${alertId}"]`);
if (nodes.length < 1) {
if (!_.isArray(nodes) || _.isEmpty(nodes)) {
throw new Error(`Alert ${alertId} doesn't exist!`);
}
this.activeAlert = new FakeElement(nodes[0], this);
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/fake-driver",
"version": "5.2.7",
"version": "5.2.11",
"description": "Mock driver used internally by Appium for testing. Ignore",
"keywords": [
"automation",
@@ -46,13 +46,13 @@
"test:unit": "mocha --timeout 10s --slow 5s \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@types/bluebird": "3.5.38",
"@types/bluebird": "3.5.42",
"@xmldom/xmldom": "0.8.10",
"asyncbox": "2.9.4",
"asyncbox": "3.0.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
"source-map-support": "0.5.21",
"xpath": "0.0.32"
"xpath": "0.0.33"
},
"peerDependencies": {
"appium": "^2.0.0-beta.35"
@@ -131,7 +131,7 @@ function generalTests() {
it('should throw an error if a required overload param is missing', async function () {
await driver
.executeScript('fake: addition', [{num3: 4}])
.should.be.rejectedWith(/Parameters were incorrect/);
.should.be.rejectedWith(/required parameters are missing/);
});
it('should throw an error if sending in wrong types of params', async function () {
+52
View File
@@ -3,6 +3,58 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.1.27](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.26...@appium/fake-plugin@3.1.27) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
## [3.1.26](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.25...@appium/fake-plugin@3.1.26) (2023-10-19)
### Bug Fixes
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [3.1.25](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.24...@appium/fake-plugin@3.1.25) (2023-10-18)
### Bug Fixes
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
## [3.1.24](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.23...@appium/fake-plugin@3.1.24) (2023-08-23)
**Note:** Version bump only for package @appium/fake-plugin
## [3.1.23](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.22...@appium/fake-plugin@3.1.23) (2023-08-22)
**Note:** Version bump only for package @appium/fake-plugin
## [3.1.22](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.21...@appium/fake-plugin@3.1.22) (2023-08-21)
**Note:** Version bump only for package @appium/fake-plugin
## [3.1.21](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.20...@appium/fake-plugin@3.1.21) (2023-08-17)
**Note:** Version bump only for package @appium/fake-plugin
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/fake-plugin",
"version": "3.1.21",
"version": "3.1.27",
"description": "A fake Appium 2.0 plugin",
"keywords": [
"automation",
@@ -39,9 +39,9 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-plugin": "^2.2.17",
"@appium/support": "^4.1.4",
"@types/bluebird": "3.5.38",
"@appium/base-plugin": "^2.2.23",
"@appium/support": "^4.1.9",
"@types/bluebird": "3.5.42",
"bluebird": "3.7.2",
"lodash": "4.17.21",
"source-map-support": "0.5.21"
+34
View File
@@ -3,6 +3,40 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.1.7](https://github.com/appium/appium/compare/@appium/images-plugin@2.1.6...@appium/images-plugin@2.1.7) (2023-11-14)
### Bug Fixes
* **images-plugin:** Prevent repeatable template modification ([#19334](https://github.com/appium/appium/issues/19334)) ([63a0b05](https://github.com/appium/appium/commit/63a0b05e1b99d8879ac928ca91111d3c62745133))
## [2.1.6](https://github.com/appium/appium/compare/@appium/images-plugin@2.1.5...@appium/images-plugin@2.1.6) (2023-10-19)
**Note:** Version bump only for package @appium/images-plugin
## [2.1.5](https://github.com/appium/appium/compare/@appium/images-plugin@2.1.4...@appium/images-plugin@2.1.5) (2023-10-18)
### Bug Fixes
* **images-plugin:** update dependency lru-cache to v10 ([#19050](https://github.com/appium/appium/issues/19050)) ([72a806b](https://github.com/appium/appium/commit/72a806bec7c3a80747192d24dfd9d8286a751810))
## [2.1.4](https://github.com/appium/appium/compare/@appium/images-plugin@2.1.3...@appium/images-plugin@2.1.4) (2023-08-21)
**Note:** Version bump only for package @appium/images-plugin
## [2.1.3](https://github.com/appium/appium/compare/@appium/images-plugin@2.1.2...@appium/images-plugin@2.1.3) (2023-08-17)
**Note:** Version bump only for package @appium/images-plugin
+34 -24
View File
@@ -3,6 +3,14 @@ import {errors} from 'appium/driver';
import {getImagesMatches, getImagesSimilarity, getImageOccurrence} from '@appium/opencv';
import {MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE} from './constants';
/**
* @typedef {{visualization: string|null|undefined}} Visualized
* @typedef {import('@appium/opencv').MatchingResult & Visualized} MatchingResult
* @typedef {import('@appium/opencv').OccurrenceResult & Visualized} OccurrenceResult
* @typedef {import('@appium/opencv').SimilarityResult & Visualized} SimilarityResult
* @typedef {MatchingResult|OccurrenceResult|SimilarityResult|SimilarityResult[]} ComparisonResult
*/
/**
* Performs images comparison using OpenCV framework features.
* It is expected that both OpenCV framework and opencv4nodejs
@@ -14,43 +22,48 @@ import {MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE} from './c
* All image formats, that OpenCV library itself accepts, are supported.
* @param {string|Buffer} secondImage - Base64-encoded image file.
* All image formats, that OpenCV library itself accepts, are supported.
* @param {object} [options] - The content of this dictionary depends
* @param {import('@appium/opencv').MatchingOptions
* |import('@appium/opencv').SimilarityOptions
* |import('@appium/opencv').OccurrenceOptions} [options={}] - The content of this dictionary depends
* on the actual `mode` value. See the documentation on `@appium/support`
* module for more details.
* @returns {Promise<object|object[]>} The content of the resulting dictionary depends
* @returns {Promise<ComparisonResult>} The content of the resulting dictionary depends
* on the actual `mode` and `options` values. See the documentation on
* `@appium/support` module for more details.
* @throws {Error} If required OpenCV modules are not installed or
* if `mode` value is incorrect or if there was an unexpected issue while
* matching the images.
*/
/**
* @type {import('@appium/types').PluginCommand<[string, string, string, object|undefined], Promise<OccurrenceResult>>}
*/
async function compareImages(mode, firstImage, secondImage, options = {}) {
const img1 = Buffer.isBuffer(firstImage) ? firstImage : Buffer.from(firstImage, 'base64');
const img2 = Buffer.isBuffer(secondImage) ? secondImage : Buffer.from(secondImage, 'base64');
let result = null;
let result;
switch (_.toLower(mode)) {
case MATCH_FEATURES_MODE.toLowerCase():
try {
result = await getImagesMatches(img1, img2, options);
result = await getImagesMatches(
img1, img2, /** @type {import('@appium/opencv').MatchingOptions} */(options)
);
} catch (err) {
// might throw if no matches
result = {count: 0};
result = /** @type {import('@appium/opencv').MatchingResult} */({count: 0});
}
break;
case GET_SIMILARITY_MODE.toLowerCase():
result = await getImagesSimilarity(img1, img2, options);
result = await getImagesSimilarity(
img1, img2, /** @type {import('@appium/opencv').SimilarityOptions} */(options));
break;
case MATCH_TEMPLATE_MODE.toLowerCase():
case MATCH_TEMPLATE_MODE.toLowerCase(): {
const opts = /** @type {import('@appium/opencv').OccurrenceOptions} */(options);
// firstImage/img1 is the full image and secondImage/img2 is the partial one
result = await getImageOccurrence(img1, img2, options);
if (options.multiple) {
result = await getImageOccurrence(
img1, img2, opts
);
if (opts.multiple) {
return result.multiple.map(convertVisualizationToBase64);
}
break;
}
default:
throw new errors.InvalidArgumentError(
`'${mode}' images comparison mode is unknown. ` +
@@ -68,19 +81,16 @@ async function compareImages(mode, firstImage, secondImage, options = {}) {
* base64 encodes the visualization part of the result
* (if necessary)
*
* @param {OccurrenceResult} element - occurrence result
*
* @param {Partial<{visualization: Buffer|null}>} element - occurrence result
* @returns {any} I know this looks ugly from the typing perspective
**/
function convertVisualizationToBase64(element) {
if (!_.isEmpty(element.visualization)) {
element.visualization = element.visualization.toString('base64');
}
return element;
return Buffer.isBuffer(element.visualization)
? {
...(element),
visualization: element.visualization.toString('base64')
}
: element;
}
export {compareImages};
/**
* @typedef {import('@appium/opencv').OccurrenceResult} OccurrenceResult
*/
+43 -28
View File
@@ -1,5 +1,5 @@
import _ from 'lodash';
import LRU from 'lru-cache';
import {LRUCache} from 'lru-cache';
import {errors} from 'appium/driver';
import {ImageElement} from './image-element';
import {compareImages} from './compare';
@@ -34,14 +34,14 @@ const CONDITION_UNMET_PATTERN = /Condition unmet/;
export default class ImageElementFinder {
/** @type {LRU<string,ImageElement>} */
/** @type {LRUCache<string,ImageElement>} */
_imgElCache;
/**
* @param {number} max
*/
constructor(max = MAX_CACHE_ITEMS) {
this._imgElCache = new LRU({
this._imgElCache = new LRUCache({
ttl: MAX_CACHE_AGE_MS,
updateAgeOnGet: true,
max,
@@ -78,7 +78,7 @@ export default class ImageElementFinder {
* @property {boolean} [ignoreDefaultImageTemplateScale=false] - Whether we
* ignore defaultImageTemplateScale. It can be used when you would like to
* scale template with defaultImageTemplateScale setting.
* @property {import('@appium/types').Rect?} containerRect - The bounding
* @property {import('@appium/types').Rect?} [containerRect=null] - The bounding
* rectangle to limit the search in
*/
@@ -109,7 +109,7 @@ export default class ImageElementFinder {
} = settings;
log.info(`Finding image element with match threshold ${threshold}`);
if (!driver.getWindowRect && !driver.getWindowSize) {
if (!driver.getWindowRect && !_.has(driver, 'getWindowSize')) {
throw new Error("This driver does not support the required 'getWindowRect' command");
}
let screenSize;
@@ -120,7 +120,7 @@ export default class ImageElementFinder {
height: screenRect.height,
};
} else {
// TODO: Drop the deprecated endpoint
// @ts-ignore TODO: Drop the deprecated endpoint
screenSize = await driver.getWindowSize();
}
@@ -136,16 +136,23 @@ export default class ImageElementFinder {
}
const results = [];
const condition = async () => {
let didFixTemplateImageScale = false;
const performLookup = async () => {
try {
const {screenshot, scale} = await this.getScreenshotForImageFind(driver, screenSize);
template = await this.fixImageTemplateScale(template, {
defaultImageTemplateScale,
ignoreDefaultImageTemplateScale,
fixImageTemplateScale,
...scale,
});
if (!didFixTemplateImageScale) {
template = await this.fixImageTemplateScale(template, {
defaultImageTemplateScale,
ignoreDefaultImageTemplateScale,
fixImageTemplateScale,
...(scale || {}),
});
// We do not want `template` to be mutated multiple times when the
// wrapping lambda is retried
didFixTemplateImageScale = true;
}
const comparisonOpts = {
threshold,
@@ -168,7 +175,9 @@ export default class ImageElementFinder {
return true;
};
const elOrEls = await compareImages(MATCH_TEMPLATE_MODE, screenshot, template, comparisonOpts);
const elOrEls = await compareImages(
MATCH_TEMPLATE_MODE, screenshot, template, comparisonOpts
);
return _.some((_.isArray(elOrEls) ? elOrEls : [elOrEls]).map(pushIfOk));
} catch (err) {
// if compareImages fails, we'll get a specific error, but we should
@@ -183,7 +192,7 @@ export default class ImageElementFinder {
};
try {
await driver.implicitWaitForCondition(condition);
await driver.implicitWaitForCondition(performLookup);
} catch (err) {
// this `implicitWaitForCondition` method will throw a 'Condition unmet'
// error if an element is not found eventually. In that case, we will
@@ -238,6 +247,9 @@ export default class ImageElementFinder {
async ensureTemplateSize(template, maxSize) {
const imgObj = sharp(template);
const {width: tplWidth, height: tplHeight} = await imgObj.metadata();
if (_.isNil(tplWidth) || _.isNil(tplHeight)) {
throw new Error(`Template width/height cannot be determined. Is it a valid image?`);
}
log.info(
`Template image is ${tplWidth}x${tplHeight}. Bounding rectangle size is ${maxSize.width}x${maxSize.height}`
@@ -254,8 +266,8 @@ export default class ImageElementFinder {
// otherwise, scale it to fit inside the bounding rectangle dimensions:
// https://sharp.pixelplumbing.com/api-resize
return await imgObj.resize({
width: parseInt(maxSize.width, 10),
height: parseInt(maxSize.height, 10),
width: Math.trunc(maxSize.width),
height: Math.trunc(maxSize.height),
fit: 'inside',
})
.toBuffer();
@@ -301,7 +313,7 @@ export default class ImageElementFinder {
let imgObj = sharp(screenshot);
let {width: shotWidth, height: shotHeight} = await imgObj.metadata();
if (shotWidth < 1 || shotHeight < 1) {
if (!shotWidth || shotWidth < 1 || !shotHeight || shotHeight < 1) {
log.warn(
`The retrieved screenshot size ${shotWidth}x${shotHeight} does ` +
`not seem to be valid. No changes will be applied to the screenshot`
@@ -354,7 +366,7 @@ export default class ImageElementFinder {
const yScale = (1.0 * shotHeight) / screenSize.height;
const scaleFactor = Math.min(xScale, yScale);
const [newWidth, newHeight] = [shotWidth * scaleFactor, shotHeight * scaleFactor]
.map((x) => parseInt(x, 10));
.map(Math.trunc);
log.warn(
`Resizing screenshot to ${newWidth}x${newHeight} to match ` +
@@ -382,8 +394,8 @@ export default class ImageElementFinder {
`screen at ${screenSize.width}x${screenSize.height}`
);
imgObj = imgObj.resize({
width: parseInt(screenSize.width, 10),
height: parseInt(screenSize.height, 10),
width: Math.trunc(screenSize.width),
height: Math.trunc(screenSize.height),
fit: 'fill',
});
@@ -399,13 +411,13 @@ export default class ImageElementFinder {
/**
* @typedef ImageTemplateSettings
* @property {boolean} fixImageTemplateScale - fixImageTemplateScale in device-settings
* @property {number} defaultImageTemplateScale - defaultImageTemplateScale in device-settings
* @property {boolean} ignoreDefaultImageTemplateScale - Ignore defaultImageTemplateScale if it has true.
* @property {boolean} [fixImageTemplateScale=false] - fixImageTemplateScale in device-settings
* @property {number} [defaultImageTemplateScale=DEFAULT_TEMPLATE_IMAGE_SCALE] - defaultImageTemplateScale in device-settings
* @property {boolean} [ignoreDefaultImageTemplateScale=false] - Ignore defaultImageTemplateScale if it has true.
* If the template has been scaled to defaultImageTemplateScale or should ignore the scale,
* this parameter should be true. e.g. click in image-element module
* @property {number} xScale - Scale ratio for width
* @property {number} yScale - Scale ratio for height
* @property {number} [xScale=DEFAULT_FIX_IMAGE_TEMPLATE_SCALE] - Scale ratio for width
* @property {number} [yScale=DEFAULT_FIX_IMAGE_TEMPLATE_SCALE] - Scale ratio for height
*/
/**
@@ -469,6 +481,9 @@ export default class ImageElementFinder {
let imgObj = sharp(template);
const {width: baseTempWidth, height: baseTempHeigh} = await imgObj.metadata();
if (_.isNil(baseTempWidth) || _.isNil(baseTempHeigh)) {
throw new Error(`Template width/height cannot be determined. Is it a valid image?`);
}
const scaledWidth = baseTempWidth * xScale;
const scaledHeight = baseTempHeigh * yScale;
@@ -477,8 +492,8 @@ export default class ImageElementFinder {
);
log.info(`The ratio is ${xScale} and ${yScale}`);
imgObj = imgObj.resize({
width: parseInt(scaledWidth, 10),
height: parseInt(scaledHeight, 10),
width: Math.trunc(scaledWidth),
height: Math.trunc(scaledHeight),
fit: 'fill',
});
return await imgObj.toBuffer();
+18 -16
View File
@@ -1,6 +1,6 @@
import _ from 'lodash';
import {errors} from 'appium/driver';
import {util} from 'appium/support';
import {util} from '@appium/support';
import log from './logger';
import {
IMAGE_STRATEGY, DEFAULT_SETTINGS, IMAGE_TAP_STRATEGIES,
@@ -39,7 +39,7 @@ const TAP_DURATION_MS = 125;
*/
export default class ImageElement {
/**
* @param {ImageElementOpts}
* @param {ImageElementOpts} options
*/
constructor({
template,
@@ -123,12 +123,11 @@ export default class ImageElement {
* Use a driver to tap the screen at the center of this ImageElement's
* position
*
* @param {BaseDriver} driver - driver for calling actions with
* @param {import('appium/driver').BaseDriver} driver - driver for calling actions with
*/
async click(driver) {
// before we click we need to make sure the element is actually still there
// where we expect it to be
let newImgEl;
const settings = Object.assign({}, DEFAULT_SETTINGS, driver.settings.getSettings());
const {
autoUpdateImageElementPosition: updatePos,
@@ -145,16 +144,19 @@ export default class ImageElement {
);
}
let newImgEl;
if (checkForImageElementStaleness || updatePos) {
log.info('Checking image element for staleness before clicking');
try {
newImgEl = await this.finder.findByImage(this.template, driver, {
shouldCheckStaleness: true,
// Set ignoreDefaultImageTemplateScale because this.template is device screenshot based image
// managed inside Appium after finidng image by template which managed by a user
ignoreDefaultImageTemplateScale: true,
containerRect: this.containerRect,
});
newImgEl = /** @type {ImageElement} */ (await (/** @type {import('./finder').default} */ (this.finder))
.findByImage(
this.template, driver, {
shouldCheckStaleness: true,
// Set ignoreDefaultImageTemplateScale because this.template is device screenshot based image
// managed inside Appium after finidng image by template which managed by a user
ignoreDefaultImageTemplateScale: true,
containerRect: this.containerRect,
}));
} catch (err) {
throw new errors.StaleElementReferenceError();
}
@@ -199,7 +201,7 @@ export default class ImageElement {
};
// check if the driver has the appropriate performActions method
if (driver.performActions) {
if ('performActions' in driver && _.isFunction(driver.performActions)) {
return await driver.performActions([action]);
}
@@ -215,7 +217,7 @@ export default class ImageElement {
options: {x, y},
};
if (driver.performTouch) {
if ('performTouch' in driver && _.isFunction(driver.performTouch)) {
return await driver.performTouch([action]);
}
@@ -239,7 +241,7 @@ export default class ImageElement {
if (strategy !== IMAGE_STRATEGY) {
throw new errors.InvalidSelectorError(`Lookup strategies other than '${IMAGE_STRATEGY}' are not supported`);
}
return await this.finder.findByImage(
return await (/** @type {import('./finder').default} */ (this.finder)).findByImage(
Buffer.from(selector, 'base64'),
driver,
{multiple, containerRect: this.rect}
@@ -251,10 +253,10 @@ export default class ImageElement {
*
* @param {import('appium/driver').BaseDriver} driver - the driver to use for commands
* @param {string} cmd - the name of the driver command
* @param {string} imgElId - the id of the ImageElement to work with
* @param {any} imgEl - image element object
* @param {string[]} args - Rest of arguments for executeScripts
*
* @returns {object} - the result of running a command
* @returns {Promise<any>} - the result of running a command
*/
static async execute(driver, imgEl, cmd, ...args) {
switch (cmd) {
+10 -1
View File
@@ -2,7 +2,7 @@
import _ from 'lodash';
import {errors} from 'appium/driver';
import BasePlugin from 'appium/plugin';
import {BasePlugin} from 'appium/plugin';
import {compareImages} from './compare';
import ImageElementFinder from './finder';
import {ImageElement} from './image-element';
@@ -33,6 +33,7 @@ export default class ImageElementPlugin extends BasePlugin {
});
async compareImages(next, driver, ...args) {
// @ts-ignore Arguments should be ok there
return await compareImages(...args);
}
@@ -44,6 +45,14 @@ export default class ImageElementPlugin extends BasePlugin {
return await this._find(true, next, driver, ...args);
}
/**
*
* @param {boolean} multiple
* @param {*} next
* @param {*} driver
* @param {...any} args
* @returns {Promise<any>}
*/
async _find(multiple, next, driver, ...args) {
const [strategy, selector] = args;
+6 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/images-plugin",
"version": "2.1.3",
"version": "2.1.7",
"description": "Plugin for working with images and image elements in Appium",
"keywords": [
"automation",
@@ -39,14 +39,15 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/opencv": "^2.1.2",
"@appium/opencv": "^2.1.6",
"@appium/support": "^4.1.9",
"lodash": "4.17.21",
"lru-cache": "7.18.3",
"sharp": "0.32.4",
"lru-cache": "10.0.1",
"sharp": "0.32.6",
"source-map-support": "0.5.21"
},
"peerDependencies": {
"appium": "^2.0.0-beta.35"
"appium": "^2.0.0"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -73,7 +73,8 @@ describe('finding elements by image', function () {
y: 0,
...size,
});
const screenStub = sandbox.stub(finder, 'getScreenshotForImageFind').returns(screenshot);
const screenStub = sandbox.stub(finder, 'getScreenshotForImageFind')
.returns({screenshot});
return {rectStub, screenStub};
}
+3
View File
@@ -1,6 +1,9 @@
{
"compilerOptions": {
"outDir": "build",
"checkJs": true,
"esModuleInterop": true,
"strict": false,
"paths": {
"@appium/opencv": ["../opencv"]
}
+36
View File
@@ -3,6 +3,42 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.1.6](https://github.com/appium/appium/compare/@appium/opencv@2.1.5...@appium/opencv@2.1.6) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
## [2.1.5](https://github.com/appium/appium/compare/@appium/opencv@2.1.4...@appium/opencv@2.1.5) (2023-10-19)
### Bug Fixes
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [2.1.4](https://github.com/appium/appium/compare/@appium/opencv@2.1.3...@appium/opencv@2.1.4) (2023-10-18)
### Bug Fixes
* **opencv:** update definitelytyped ([d2a9a99](https://github.com/appium/appium/commit/d2a9a99418af9ce9b569bb9b98ee396faab932bb))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
## [2.1.3](https://github.com/appium/appium/compare/@appium/opencv@2.1.2...@appium/opencv@2.1.3) (2023-08-21)
**Note:** Version bump only for package @appium/opencv
## [2.1.2](https://github.com/appium/appium/compare/@appium/opencv@2.1.1...@appium/opencv@2.1.2) (2023-08-17)
**Note:** Version bump only for package @appium/opencv
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/opencv",
"version": "2.1.2",
"version": "2.1.6",
"description": "OpenCV-related helper library",
"keywords": [
"automation",
@@ -41,11 +41,11 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@types/bluebird": "3.5.38",
"@types/bluebird": "3.5.42",
"bluebird": "3.7.2",
"lodash": "4.17.21",
"opencv-bindings": "4.5.5",
"sharp": "0.32.4",
"sharp": "0.32.6",
"source-map-support": "0.5.21"
},
"engines": {
+61
View File
@@ -3,6 +3,67 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.3.24](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.23...@appium/plugin-test-support@0.3.24) (2023-11-14)
### Bug Fixes
* **support:** update dependency teen_process to v2.0.57 ([1fbd503](https://github.com/appium/appium/commit/1fbd503a66b965a9b32bbb6702062861a8480333))
* **support:** update dependency teen_process to v2.0.63 ([fa57192](https://github.com/appium/appium/commit/fa571925b7ac980cc99c8d23f659420eacd8546c))
* **support:** update dependency teen_process to v2.0.64 ([332bb59](https://github.com/appium/appium/commit/332bb59ee3fdd14c03f6b3c4fd6587a30319d568))
* **support:** update dependency teen_process to v2.0.66 ([3205b5d](https://github.com/appium/appium/commit/3205b5d06f073f1e5c7735c6e36ad08fdf091182))
* **support:** update dependency teen_process to v2.0.67 ([3b5ae2a](https://github.com/appium/appium/commit/3b5ae2ab17c74c9890b53c081aec146152f11c7a))
* **support:** update dependency teen_process to v2.0.73 ([8e453be](https://github.com/appium/appium/commit/8e453bed3f440c1dcf82f016f7d4431365b9cdff))
* **support:** update dependency teen_process to v2.0.75 ([fbb6fd9](https://github.com/appium/appium/commit/fbb6fd9a2780eb00c15584abeaf644a1fcdecb4d))
* **support:** update teen_process-related packages ([84d96db](https://github.com/appium/appium/commit/84d96dbae45dfe56218d32330f8ff2d26b750fb7))
* **support:** update teen_process-related packages ([3d0b97c](https://github.com/appium/appium/commit/3d0b97cae76c616da0aea5b92cebcd38d59263b7))
## [0.3.23](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.22...@appium/plugin-test-support@0.3.23) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
## [0.3.22](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.21...@appium/plugin-test-support@0.3.22) (2023-10-18)
### Bug Fixes
* **support:** update dependency teen_process to v2.0.10 ([bc1b56a](https://github.com/appium/appium/commit/bc1b56a3c162ed8686d3d7956c30eb1f7682b1a7))
* **support:** update dependency teen_process to v2.0.12 ([c5d6df7](https://github.com/appium/appium/commit/c5d6df7a000d64e8591a56ce5ef65baa2071a36b))
* **support:** update dependency teen_process to v2.0.13 ([a0c4b84](https://github.com/appium/appium/commit/a0c4b84fb7d3977b7a4ca0a07fadd49ee355791a))
* **support:** update dependency teen_process to v2.0.18 ([ffeebc7](https://github.com/appium/appium/commit/ffeebc74b72e5eadf658325e67708ae6ed5b8346))
* **support:** update dependency teen_process to v2.0.19 ([2ef40fe](https://github.com/appium/appium/commit/2ef40febdc717f54ea618ecfe1058b858fe2daf9))
* **support:** update dependency teen_process to v2.0.23 ([1b0459e](https://github.com/appium/appium/commit/1b0459edd656514d8706aab8e21cd4d40de2ec5d))
* **support:** update dependency teen_process to v2.0.24 ([bc72c66](https://github.com/appium/appium/commit/bc72c6676a5412b60e74bb143a223738ce059977))
* **support:** update dependency teen_process to v2.0.27 ([03b2aa6](https://github.com/appium/appium/commit/03b2aa6b6e45fa0ea24c4691b039255bc4399733))
* **support:** update dependency teen_process to v2.0.30 ([7cdb142](https://github.com/appium/appium/commit/7cdb1429a1104ad3699547f2a2dd9b237135891a))
* **support:** update dependency teen_process to v2.0.34 ([#19218](https://github.com/appium/appium/issues/19218)) ([c28fcef](https://github.com/appium/appium/commit/c28fcefa725fbce5a0464e57946051e3cb023d85))
* **support:** update dependency teen_process to v2.0.37 ([6d894be](https://github.com/appium/appium/commit/6d894bef6f377ebfdffdeb1adde7a72624844414))
* **support:** update dependency teen_process to v2.0.38 ([a32dc11](https://github.com/appium/appium/commit/a32dc1110125d0f1fac9c66c17f1309145a634c7))
* **support:** update dependency teen_process to v2.0.40 ([2837bcd](https://github.com/appium/appium/commit/2837bcdeb19532fe973a2902db5c8d730252d962))
* **support:** update dependency teen_process to v2.0.41 ([1a34396](https://github.com/appium/appium/commit/1a34396339f71d40353d323feaf78afcf2269fc9))
* **support:** update dependency teen_process to v2.0.42 ([e2a670e](https://github.com/appium/appium/commit/e2a670e1c4a0f061b0bfb08a6b534d9deb7bdd9c))
* **support:** update dependency teen_process to v2.0.45 ([ea731bf](https://github.com/appium/appium/commit/ea731bf117d680496fce453ac42cfee7f05ada60))
* **support:** update dependency teen_process to v2.0.48 ([eebc651](https://github.com/appium/appium/commit/eebc651f31c282baa7e77a6384d3ee8efc0072d6))
* **support:** update dependency teen_process to v2.0.50 ([ca3e5d9](https://github.com/appium/appium/commit/ca3e5d90e4c51fc1dda32154e1d77e65cb44fb54))
* **support:** update dependency teen_process to v2.0.9 ([6c7f3ef](https://github.com/appium/appium/commit/6c7f3ef670d441bdc4b693948a19dcbdc54e4764))
## [0.3.21](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.20...@appium/plugin-test-support@0.3.21) (2023-08-22)
**Note:** Version bump only for package @appium/plugin-test-support
## [0.3.20](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.19...@appium/plugin-test-support@0.3.20) (2023-08-17)
**Note:** Version bump only for package @appium/plugin-test-support
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/plugin-test-support",
"version": "0.3.20",
"version": "0.3.24",
"description": "Testing utilities for Appium plugins",
"keywords": [
"automation",
@@ -41,11 +41,11 @@
"test:unit": "exit 0"
},
"dependencies": {
"@appium/types": "^0.13.3",
"@appium/types": "^0.14.2",
"get-port": "5.1.1",
"log-symbols": "4.1.0",
"source-map-support": "0.5.21",
"teen_process": "2.0.4"
"teen_process": "2.0.84"
},
"peerDependencies": {
"appium": "^2.0.0-beta.43",
+32
View File
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.4.2](https://github.com/appium/appium/compare/@appium/schema@0.4.1...@appium/schema@0.4.2) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
## [0.4.1](https://github.com/appium/appium/compare/@appium/schema@0.4.0...@appium/schema@0.4.1) (2023-10-19)
### Bug Fixes
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [0.4.0](https://github.com/appium/appium/compare/@appium/schema@0.3.1...@appium/schema@0.4.0) (2023-10-18)
### Features
* **base-driver:** Add server support of TLS and SPDY protocols ([#19105](https://github.com/appium/appium/issues/19105)) ([5926919](https://github.com/appium/appium/commit/5926919177e3df675723c80d800f933fdbda5824))
### Bug Fixes
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
## [0.3.1](https://github.com/appium/appium/compare/@appium/schema@0.3.0...@appium/schema@0.3.1) (2023-07-03)
@@ -288,6 +288,18 @@ export const AppiumConfigJsonSchema = /** @type {const} */ ({
title: 'webhook config',
type: 'string',
},
'ssl-cert-path': {
description: 'Full path to the .cert file if TLS is used. Must be provided together with "ssl-key-path"',
title: '.cert file path',
appiumCliDest: 'sslCertificatePath',
type: 'string',
},
'ssl-key-path': {
description: 'Full path to the .key file if TLS is used. Must be provided together with "ssl-cert-path"',
title: '.key file path',
appiumCliDest: 'sslKeyPath',
type: 'string',
},
},
title: 'server config',
type: 'object',
@@ -281,6 +281,18 @@
"format": "uri",
"title": "webhook config",
"type": "string"
},
"ssl-cert-path": {
"description": "Full path to the .cert file if TLS is used. Must be provided together with \"ssl-key-path\"",
"title": ".cert file path",
"appiumCliDest": "sslCertificatePath",
"type": "string"
},
"ssl-key-path": {
"description": "Full path to the .key file if TLS is used. Must be provided together with \"ssl-cert-path\"",
"title": ".key file path",
"appiumCliDest": "sslKeyPath",
"type": "string"
}
},
"title": "server config",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/schema",
"version": "0.3.1",
"version": "0.4.2",
"description": "Appium Configuration Schema",
"keywords": [
"automation",
@@ -38,7 +38,7 @@
"test": "exit 0"
},
"dependencies": {
"@types/json-schema": "7.0.12",
"@types/json-schema": "7.0.15",
"json-schema": "0.4.0",
"source-map-support": "0.5.21"
},
+93
View File
@@ -3,6 +3,99 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [4.1.9](https://github.com/appium/appium/compare/@appium/support@4.1.8...@appium/support@4.1.9) (2023-11-14)
### Bug Fixes
* **images-plugin:** Prevent repeatable template modification ([#19334](https://github.com/appium/appium/issues/19334)) ([63a0b05](https://github.com/appium/appium/commit/63a0b05e1b99d8879ac928ca91111d3c62745133))
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
* **support:** update definitelytyped ([#19326](https://github.com/appium/appium/issues/19326)) ([9840315](https://github.com/appium/appium/commit/98403151f86665d723bf887e907825bbc4cc2d3d))
* **support:** update dependency axios to v1.6.0 ([699c493](https://github.com/appium/appium/commit/699c49306c38e222d618a9611482b06a3e6806aa))
* **support:** update dependency axios to v1.6.1 ([9b14205](https://github.com/appium/appium/commit/9b14205288ef09fd4a1144fc93c82b2bb2ed2ec0))
* **support:** update dependency teen_process to v2.0.57 ([1fbd503](https://github.com/appium/appium/commit/1fbd503a66b965a9b32bbb6702062861a8480333))
* **support:** update dependency teen_process to v2.0.63 ([fa57192](https://github.com/appium/appium/commit/fa571925b7ac980cc99c8d23f659420eacd8546c))
* **support:** update dependency teen_process to v2.0.64 ([332bb59](https://github.com/appium/appium/commit/332bb59ee3fdd14c03f6b3c4fd6587a30319d568))
* **support:** update dependency teen_process to v2.0.66 ([3205b5d](https://github.com/appium/appium/commit/3205b5d06f073f1e5c7735c6e36ad08fdf091182))
* **support:** update dependency teen_process to v2.0.67 ([3b5ae2a](https://github.com/appium/appium/commit/3b5ae2ab17c74c9890b53c081aec146152f11c7a))
* **support:** update dependency teen_process to v2.0.73 ([8e453be](https://github.com/appium/appium/commit/8e453bed3f440c1dcf82f016f7d4431365b9cdff))
* **support:** update dependency teen_process to v2.0.75 ([fbb6fd9](https://github.com/appium/appium/commit/fbb6fd9a2780eb00c15584abeaf644a1fcdecb4d))
* **support:** update teen_process-related packages ([84d96db](https://github.com/appium/appium/commit/84d96dbae45dfe56218d32330f8ff2d26b750fb7))
* **support:** update teen_process-related packages ([3d0b97c](https://github.com/appium/appium/commit/3d0b97cae76c616da0aea5b92cebcd38d59263b7))
## [4.1.8](https://github.com/appium/appium/compare/@appium/support@4.1.7...@appium/support@4.1.8) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [4.1.7](https://github.com/appium/appium/compare/@appium/support@4.1.6...@appium/support@4.1.7) (2023-10-18)
### Bug Fixes
* **images-plugin:** update dependency lru-cache to v10 ([#19050](https://github.com/appium/appium/issues/19050)) ([72a806b](https://github.com/appium/appium/commit/72a806bec7c3a80747192d24dfd9d8286a751810))
* **support:** update definitelytyped ([3b44c7d](https://github.com/appium/appium/commit/3b44c7d8f5b89f9357dfe6bb56b54799bbe0a921))
* **support:** update definitelytyped ([595d460](https://github.com/appium/appium/commit/595d460ac8dc41d310f9e4f653acbad3c7fd50b9))
* **support:** update definitelytyped ([b6a76ce](https://github.com/appium/appium/commit/b6a76ce91e2765c22f84e389b93f780e0b4490c0))
* **support:** update definitelytyped ([3e73600](https://github.com/appium/appium/commit/3e7360021dba0f8e8967094476fe92646ba5e35b))
* **support:** update definitelytyped ([81b077f](https://github.com/appium/appium/commit/81b077fdc9300d2dbcd6b6a6a49dc5a84982c84c))
* **support:** update dependency @types/pluralize to v0.0.31 ([26a6c62](https://github.com/appium/appium/commit/26a6c62512afb5c1b39854173fdc34be6d7665f1))
* **support:** update dependency @types/semver to v7.5.1 ([a0f59d0](https://github.com/appium/appium/commit/a0f59d05945e627602407d1d42e7a3a58861b11f))
* **support:** update dependency @types/teen_process to v2.0.1 ([d2f19aa](https://github.com/appium/appium/commit/d2f19aab935cc6ec00a51f042b5f02674a772198))
* **support:** update dependency archiver to v6 ([#19051](https://github.com/appium/appium/issues/19051)) ([a3245dc](https://github.com/appium/appium/commit/a3245dcf2b58d9c40e72e666ccd4a095b7cc984b))
* **support:** update dependency archiver to v6.0.1 ([#19111](https://github.com/appium/appium/issues/19111)) ([263bb43](https://github.com/appium/appium/commit/263bb43086c5e753cf4170953cb282f85d59b5a8))
* **support:** update dependency axios to v1.5.0 ([08913cd](https://github.com/appium/appium/commit/08913cddde295f616f0fb376cc2cb71a9409a253))
* **support:** update dependency axios to v1.5.1 ([#19217](https://github.com/appium/appium/issues/19217)) ([3df047d](https://github.com/appium/appium/commit/3df047d128d5d032826c8f5fb605b019078b717d))
* **support:** update dependency glob to v10 ([#19094](https://github.com/appium/appium/issues/19094)) ([faca496](https://github.com/appium/appium/commit/faca49690a327095362619ba5cc04a03b3e11993))
* **support:** update dependency glob to v10 ([#19185](https://github.com/appium/appium/issues/19185)) ([d336b51](https://github.com/appium/appium/commit/d336b51578e449a110c002f9bc216e114c2dd5e0))
* **support:** update dependency teen_process to v2.0.10 ([bc1b56a](https://github.com/appium/appium/commit/bc1b56a3c162ed8686d3d7956c30eb1f7682b1a7))
* **support:** update dependency teen_process to v2.0.12 ([c5d6df7](https://github.com/appium/appium/commit/c5d6df7a000d64e8591a56ce5ef65baa2071a36b))
* **support:** update dependency teen_process to v2.0.13 ([a0c4b84](https://github.com/appium/appium/commit/a0c4b84fb7d3977b7a4ca0a07fadd49ee355791a))
* **support:** update dependency teen_process to v2.0.18 ([ffeebc7](https://github.com/appium/appium/commit/ffeebc74b72e5eadf658325e67708ae6ed5b8346))
* **support:** update dependency teen_process to v2.0.19 ([2ef40fe](https://github.com/appium/appium/commit/2ef40febdc717f54ea618ecfe1058b858fe2daf9))
* **support:** update dependency teen_process to v2.0.23 ([1b0459e](https://github.com/appium/appium/commit/1b0459edd656514d8706aab8e21cd4d40de2ec5d))
* **support:** update dependency teen_process to v2.0.24 ([bc72c66](https://github.com/appium/appium/commit/bc72c6676a5412b60e74bb143a223738ce059977))
* **support:** update dependency teen_process to v2.0.27 ([03b2aa6](https://github.com/appium/appium/commit/03b2aa6b6e45fa0ea24c4691b039255bc4399733))
* **support:** update dependency teen_process to v2.0.30 ([7cdb142](https://github.com/appium/appium/commit/7cdb1429a1104ad3699547f2a2dd9b237135891a))
* **support:** update dependency teen_process to v2.0.34 ([#19218](https://github.com/appium/appium/issues/19218)) ([c28fcef](https://github.com/appium/appium/commit/c28fcefa725fbce5a0464e57946051e3cb023d85))
* **support:** update dependency teen_process to v2.0.37 ([6d894be](https://github.com/appium/appium/commit/6d894bef6f377ebfdffdeb1adde7a72624844414))
* **support:** update dependency teen_process to v2.0.38 ([a32dc11](https://github.com/appium/appium/commit/a32dc1110125d0f1fac9c66c17f1309145a634c7))
* **support:** update dependency teen_process to v2.0.40 ([2837bcd](https://github.com/appium/appium/commit/2837bcdeb19532fe973a2902db5c8d730252d962))
* **support:** update dependency teen_process to v2.0.41 ([1a34396](https://github.com/appium/appium/commit/1a34396339f71d40353d323feaf78afcf2269fc9))
* **support:** update dependency teen_process to v2.0.42 ([e2a670e](https://github.com/appium/appium/commit/e2a670e1c4a0f061b0bfb08a6b534d9deb7bdd9c))
* **support:** update dependency teen_process to v2.0.45 ([ea731bf](https://github.com/appium/appium/commit/ea731bf117d680496fce453ac42cfee7f05ada60))
* **support:** update dependency teen_process to v2.0.48 ([eebc651](https://github.com/appium/appium/commit/eebc651f31c282baa7e77a6384d3ee8efc0072d6))
* **support:** update dependency teen_process to v2.0.50 ([ca3e5d9](https://github.com/appium/appium/commit/ca3e5d90e4c51fc1dda32154e1d77e65cb44fb54))
* **support:** update dependency teen_process to v2.0.9 ([6c7f3ef](https://github.com/appium/appium/commit/6c7f3ef670d441bdc4b693948a19dcbdc54e4764))
* **support:** update dependency uuid to v9.0.1 ([73aa017](https://github.com/appium/appium/commit/73aa01786d113a0a3c885c40f58ef9cef3c4e52b))
* **support:** update dependency which to v4 ([#19095](https://github.com/appium/appium/issues/19095)) ([6f51456](https://github.com/appium/appium/commit/6f51456da948685f606bed7575b5a4cf98b99c74))
## [4.1.6](https://github.com/appium/appium/compare/@appium/support@4.1.5...@appium/support@4.1.6) (2023-08-22)
**Note:** Version bump only for package @appium/support
## [4.1.5](https://github.com/appium/appium/compare/@appium/support@4.1.4...@appium/support@4.1.5) (2023-08-21)
### Bug Fixes
* **support:** update dependency archiver to v5.3.2 ([e73e47d](https://github.com/appium/appium/commit/e73e47de18ff7e327a06584121e85756506ab21d))
## [4.1.4](https://github.com/appium/appium/compare/@appium/support@4.1.3...@appium/support@4.1.4) (2023-08-17)
+10 -14
View File
@@ -84,10 +84,8 @@ function localIp() {
let ip = _.chain(os.networkInterfaces())
.values()
.flatten()
// @ts-ignore
.filter(function (val) {
return val.family === 'IPv4' && val.internal === false;
})
// @ts-ignore this filter works fine
.filter(({family, internal}) => family === 'IPv4' && internal === false)
.map('address')
.first()
.value();
@@ -136,23 +134,21 @@ function safeJsonParse(obj) {
}
}
/*
/**
* Stringifies the object passed in, converting Buffers into Strings for better
* display. This mimics JSON.stringify (see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)
* except the `replacer` argument can only be a function.
*
* @param {object} obj - the object to be serialized
* @param {?function} replacer - function to transform the properties added to the
* @param {any} obj - the object to be serialized
* @param {((key:any, value:any) => any)?} replacer - function to transform the properties added to the
* serialized object
* @param {?number|string} space - used to insert white space into the output JSON
* @param {number|string|undefined} space - used to insert white space into the output JSON
* string for readability purposes. Defaults to 2
* returns {string} - the JSON object serialized as a string
* @returns {string} - the JSON object serialized as a string
*/
function jsonStringify(obj, replacer, space = 2) {
function jsonStringify(obj, replacer = null, space = 2) {
// if no replacer is passed, or it is not a function, just use a pass-through
if (!_.isFunction(replacer)) {
replacer = (k, v) => v;
}
const replacerFunc = _.isFunction(replacer) ? replacer : (k, v) => v;
// Buffers cannot be serialized in a readable way
const bufferToJSON = Buffer.prototype.toJSON;
@@ -162,7 +158,7 @@ function jsonStringify(obj, replacer, space = 2) {
obj,
(key, value) => {
const updatedValue = Buffer.isBuffer(value) ? value.toString('utf8') : value;
return replacer(key, updatedValue);
return replacerFunc(key, updatedValue);
},
space
);
+1
View File
@@ -138,6 +138,7 @@ class ZipExtractor {
const openReadStream = B.promisify(this.zipfile.openReadStream.bind(this.zipfile));
const readStream = await openReadStream(entry);
if (isSymlink) {
// @ts-ignore This typecast is ok
const link = await getStream(readStream);
await fs.symlink(link, dest);
} else {
+26 -26
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/support",
"version": "4.1.4",
"version": "4.1.9",
"description": "Support libs used across appium packages",
"keywords": [
"automation",
@@ -41,34 +41,34 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/tsconfig": "^0.3.0",
"@appium/types": "^0.13.3",
"@appium/tsconfig": "^0.x",
"@appium/types": "^0.14.2",
"@colors/colors": "1.6.0",
"@types/archiver": "5.3.2",
"@types/base64-stream": "1.0.2",
"@types/find-root": "1.1.2",
"@types/jsftp": "2.1.2",
"@types/klaw": "3.0.3",
"@types/lockfile": "1.0.2",
"@types/mv": "2.1.2",
"@types/ncp": "2.0.5",
"@types/npmlog": "4.1.4",
"@types/pluralize": "0.0.30",
"@types/semver": "7.5.0",
"@types/shell-quote": "1.7.1",
"@types/supports-color": "8.1.1",
"@types/teen_process": "2.0.0",
"@types/uuid": "9.0.2",
"@types/which": "3.0.0",
"archiver": "5.3.1",
"axios": "1.4.0",
"@types/archiver": "6.0.1",
"@types/base64-stream": "1.0.5",
"@types/find-root": "1.1.4",
"@types/jsftp": "2.1.5",
"@types/klaw": "3.0.6",
"@types/lockfile": "1.0.4",
"@types/mv": "2.1.4",
"@types/ncp": "2.0.8",
"@types/npmlog": "4.1.6",
"@types/pluralize": "0.0.33",
"@types/semver": "7.5.5",
"@types/shell-quote": "1.7.4",
"@types/supports-color": "8.1.3",
"@types/teen_process": "2.0.3",
"@types/uuid": "9.0.7",
"@types/which": "3.0.1",
"archiver": "6.0.1",
"axios": "1.6.1",
"base64-stream": "1.0.0",
"bluebird": "3.7.2",
"bplist-creator": "0.1.1",
"bplist-parser": "0.3.2",
"form-data": "4.0.0",
"get-stream": "6.0.1",
"glob": "10.3.3",
"glob": "10.3.10",
"jsftp": "2.1.3",
"klaw": "4.1.0",
"lockfile": "1.0.4",
@@ -89,14 +89,14 @@
"shell-quote": "1.8.1",
"source-map-support": "0.5.21",
"supports-color": "8.1.1",
"teen_process": "2.0.4",
"teen_process": "2.0.84",
"type-fest": "3.13.1",
"uuid": "9.0.0",
"which": "3.0.1",
"uuid": "9.0.1",
"which": "4.0.0",
"yauzl": "2.10.0"
},
"optionalDependencies": {
"sharp": "0.32.4"
"sharp": "0.32.6"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
+43
View File
@@ -3,6 +3,49 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.0.27](https://github.com/appium/appium/compare/@appium/test-support@3.0.26...@appium/test-support@3.0.27) (2023-11-14)
**Note:** Version bump only for package @appium/test-support
## [3.0.26](https://github.com/appium/appium/compare/@appium/test-support@3.0.25...@appium/test-support@3.0.26) (2023-10-19)
### Bug Fixes
* **test-support:** update dependency sinon to v16.1.3 ([aaa7668](https://github.com/appium/appium/commit/aaa7668ae6d58f1ac6a5af957b9b214ee71c6a48))
## [3.0.25](https://github.com/appium/appium/compare/@appium/test-support@3.0.24...@appium/test-support@3.0.25) (2023-10-18)
### Bug Fixes
* **test-support:** update dependency sinon to v16 ([#19161](https://github.com/appium/appium/issues/19161)) ([49b3434](https://github.com/appium/appium/commit/49b3434c2bc324b5dc9f8204242c12f04b5252af))
* **test-support:** update dependency sinon to v16.1.0 ([126daec](https://github.com/appium/appium/commit/126daeca4e600b75cf37f9fc15a1b6e563058b3c))
## [3.0.24](https://github.com/appium/appium/compare/@appium/test-support@3.0.23...@appium/test-support@3.0.24) (2023-08-22)
**Note:** Version bump only for package @appium/test-support
## [3.0.23](https://github.com/appium/appium/compare/@appium/test-support@3.0.22...@appium/test-support@3.0.23) (2023-08-21)
**Note:** Version bump only for package @appium/test-support
## [3.0.22](https://github.com/appium/appium/compare/@appium/test-support@3.0.21...@appium/test-support@3.0.22) (2023-08-17)
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/test-support",
"version": "3.0.22",
"version": "3.0.27",
"description": "A collection of test utilities used across Appium packages",
"keywords": [
"automation",
@@ -45,12 +45,12 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/support": "^4.1.4",
"@appium/support": "^4.1.9",
"@colors/colors": "1.6.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
"loud-rejection": "2.2.0",
"sinon": "15.2.0",
"sinon": "16.1.3",
"source-map-support": "0.5.21"
},
"engines": {
+18
View File
@@ -3,6 +3,24 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.3.2](https://github.com/appium/appium/compare/@appium/tsconfig@0.3.1...@appium/tsconfig@0.3.2) (2023-10-18)
### Bug Fixes
* **tsconfig:** update dependency @tsconfig/node14 to v14 ([#19082](https://github.com/appium/appium/issues/19082)) ([65b3787](https://github.com/appium/appium/commit/65b3787912a4948fb1ed48e8095299bc9ba95844))
## [0.3.1](https://github.com/appium/appium/compare/@appium/tsconfig@0.3.0...@appium/tsconfig@0.3.1) (2023-08-22)
### Bug Fixes
* **execute-driver-plugin:** update dependency webdriverio to v8 ([#18095](https://github.com/appium/appium/issues/18095)) ([b608db9](https://github.com/appium/appium/commit/b608db91a8ef0e3cad43ce3e14b625bf9234d383))
# [0.3.0](https://github.com/appium/appium/compare/@appium/tsconfig@0.2.4...@appium/tsconfig@0.3.0) (2023-04-10)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/tsconfig",
"version": "0.3.0",
"version": "0.3.2",
"description": "Shared TypeScript Config for Appium",
"main": "tsconfig.json",
"keywords": [
@@ -27,7 +27,7 @@
"npm": ">=8"
},
"dependencies": {
"@tsconfig/node14": "1.0.3"
"@tsconfig/node14": "14.1.0"
},
"scripts": {
"test:smoke": "node tsconfig.json && node tsconfig.plugin.json"
+1 -1
View File
@@ -5,7 +5,7 @@
"appium/plugin": ["../packages/appium/plugin"],
"@appium/plugin-test-support": ["../packages/plugin-test-support"]
},
"types": ["webdriverio/async"]
"types": ["webdriverio"]
},
"extends": "./tsconfig.json",
"references": [
+44
View File
@@ -3,6 +3,50 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.14.2](https://github.com/appium/appium/compare/@appium/types@0.14.1...@appium/types@0.14.2) (2023-11-14)
### Bug Fixes
* **support:** update definitelytyped ([5ae8df3](https://github.com/appium/appium/commit/5ae8df3c36c7f03fbf3420087b532086f6742348))
## [0.14.1](https://github.com/appium/appium/compare/@appium/types@0.14.0...@appium/types@0.14.1) (2023-10-19)
### Bug Fixes
* **appium:** Make sure type definitions are always in sync across modules ([#19323](https://github.com/appium/appium/issues/19323)) ([de39013](https://github.com/appium/appium/commit/de39013ae501d4fc11988435737efb862cc1d820))
* **support:** update definitelytyped ([a306ce7](https://github.com/appium/appium/commit/a306ce741a806d21bc44f3b979803b8af5da99aa))
## [0.14.0](https://github.com/appium/appium/compare/@appium/types@0.13.4...@appium/types@0.14.0) (2023-10-18)
### Features
* **base-driver:** Add server support of TLS and SPDY protocols ([#19105](https://github.com/appium/appium/issues/19105)) ([5926919](https://github.com/appium/appium/commit/5926919177e3df675723c80d800f933fdbda5824))
### Bug Fixes
* **images-plugin:** update dependency lru-cache to v10 ([#19050](https://github.com/appium/appium/issues/19050)) ([72a806b](https://github.com/appium/appium/commit/72a806bec7c3a80747192d24dfd9d8286a751810))
* **support:** update definitelytyped ([3b44c7d](https://github.com/appium/appium/commit/3b44c7d8f5b89f9357dfe6bb56b54799bbe0a921))
* **support:** update definitelytyped ([595d460](https://github.com/appium/appium/commit/595d460ac8dc41d310f9e4f653acbad3c7fd50b9))
* **types:** update definitelytyped ([96b0a44](https://github.com/appium/appium/commit/96b0a44629c451102c44541a8d5b9e7be972f1ea))
## [0.13.4](https://github.com/appium/appium/compare/@appium/types@0.13.3...@appium/types@0.13.4) (2023-08-22)
**Note:** Version bump only for package @appium/types
## [0.13.3](https://github.com/appium/appium/compare/@appium/types@0.13.2...@appium/types@0.13.3) (2023-08-17)

Some files were not shown because too many files have changed in this diff Show More