Compare commits

..
Author SHA1 Message Date
Jonathan Lipps e3f7bd07f7 chore: publish
- appium@2.12.0
 - @appium/base-driver@9.12.0
 - @appium/base-plugin@2.2.46
 - @appium/doctor@2.1.12
 - @appium/docutils@1.0.22
 - @appium/driver-test-support@0.6.10
 - @appium/execute-driver-plugin@3.0.36
 - @appium/fake-driver@5.5.5
 - @appium/fake-plugin@3.1.50
 - @appium/images-plugin@3.0.20
 - @appium/plugin-test-support@0.3.43
 - @appium/schema@0.7.0
 - @appium/support@5.1.5
 - @appium/test-support@3.0.50
 - @appium/types@0.22.0
 - @appium/universal-xml-plugin@1.0.24
2024-10-15 09:32:02 -07:00
renovate[bot] ed6c6dd544 fix(docutils): update dependency yaml to v2.6.0 2024-10-14 20:23:38 +00:00
renovate[bot] b56b180f34 fix(universal-xml-plugin): update dependency @xmldom/xmldom to v0.9.4 (#20663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 20:59:59 +03:00
Edgars Eglītis 12969268fe docs: fix links in Appium history document (#20667) 2024-10-14 20:50:21 +03:00
zhangxh075 b312028d7e docs: update zh ecosystem documentation (#20658)
* Finish the translation of the index.md file

* Finish the translation of the drivers.md file

* Finish the translation of the clients.md file

* Finish the translation of the plugins.md file

* Finish the translation of the tools.md file
2024-10-14 20:49:24 +03:00
Edgars Eglītis 8d7cec96d8 fix(docutils): support Python 3.12+ (#20666) 2024-10-14 20:40:31 +03:00
renovate[bot] 0e443d2799 fix(support): update dependency form-data to v4.0.1 2024-10-10 14:25:36 +00:00
renovate[bot] 5c41112134 chore(docutils): update dependency mkdocs-material to v9.5.40 2024-10-10 11:03:19 +00:00
renovate[bot] dd52d04b21 fix(docutils): update dependency typescript to v5.6.3 2024-10-09 13:28:02 +00:00
renovate[bot] 0e52da4b3a fix(base-driver): update dependency express to v4.21.1 2024-10-09 09:41:17 +00:00
renovate[bot] 98eed2d13f chore(deps): update definitelytyped 2024-10-08 09:57:47 +00:00
renovate[bot] 371568da36 chore(deps): update dependency eslint-find-rules to v4.2.0 2024-10-06 13:35:49 +00:00
Mykola Mokhnach 56618886ed feat(appium): Make server graceful shutdown timeout configurable via command line args (#20641) 2024-10-05 16:14:31 +02:00
renovate[bot] ab12235483 fix(appium): update dependency winston to v3.15.0 2024-10-05 09:40:28 +00:00
renovate[bot] 08f05562c1 chore(deps): update dependency eslint-plugin-import to v2.31.0 2024-10-04 09:05:01 +00:00
Kim ArnettandKazuaki Matsuo a1d35404a2 docs(appium): add axe DevTools for Mobile drivers to Appium other drivers list: Supports accessibility testing for mobile apps (#20630)
* docs: add axe DevTools for Mobile drivers to Appium other drivers list: Supports accessibility testing for mobile apps

* Update packages/appium/docs/en/ecosystem/drivers.md

Co-authored-by: Kazuaki Matsuo <fly.49.89.over@gmail.com>

---------

Co-authored-by: Kazuaki Matsuo <fly.49.89.over@gmail.com>
2024-10-03 17:12:34 -07:00
Kazuaki Matsuo a16c4c9521 docs(appium): Remove HS from development sponsor for now (#20635)
* docs(appium): Remove HS from development sponsor for now

* remove from docs/en/index.md as well
2024-10-03 16:57:06 -07:00
renovate[bot] a2b0ba8773 fix(driver-test-support): update dependency @types/lodash to v4.17.10 2024-10-03 16:36:36 +00:00
renovate[bot] 796ca9f98f fix(execute-driver-plugin): update dependency webdriverio to v8.40.6 2024-10-03 09:16:38 +00:00
renovate[bot] 69e9abeed3 fix(types): update dependency @types/express to v5 (#20620)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 20:03:52 +03:00
renovate[bot] cabc114935 chore(docutils): update dependency mkdocs-material to v9.5.39 2024-09-29 13:09:37 +00:00
renovate[bot] aa86ef9603 chore(deps): update dependency @types/node to v20.16.10 2024-09-28 10:04:05 +00:00
Kazuaki Matsuo 656ba166e1 docs(appium): move sponsors into appium.io page (#20623)
* docs(appium): move sponsors

* modify existing page

* fix review

* use https://appium.io/docs/en/latest/sponsors/
2024-09-27 17:12:59 -07:00
renovate[bot] e8886ae0d2 fix(base-driver): update dependency path-to-regexp to v8.2.0 2024-09-26 21:13:25 +00:00
Jonathan Lipps 122a1863de chore: publish
- appium@2.11.5
 - @appium/base-driver@9.11.5
 - @appium/base-plugin@2.2.45
 - @appium/docutils@1.0.21
 - @appium/driver-test-support@0.6.9
 - @appium/execute-driver-plugin@3.0.35
 - @appium/fake-driver@5.5.4
 - @appium/fake-plugin@3.1.49
 - @appium/test-support@3.0.49
 - @appium/universal-xml-plugin@1.0.23
2024-09-26 09:27:56 -07:00
renovate[bot] 0bbd2f8a76 chore(docutils): update dependency mkdocs-material to v9.5.38 2024-09-26 12:27:38 +00:00
renovate[bot] f03816cca5 chore(deps): update dependency @types/node to v20.16.9 2024-09-26 11:24:46 +00:00
renovate[bot] e1e478cf32 chore(docutils): update dependency mkdocs-material to v9.5.37 2024-09-25 14:09:43 +00:00
renovate[bot] c799629b7d chore(deps): update definitelytyped (#20611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-25 17:07:46 +03:00
renovate[bot] 1d9821352a chore(deps): update definitelytyped 2024-09-25 11:35:20 +00:00
zhangxh075 b8b0e42f69 docs: translate some documents into Chinese (#20608)
* Finish the translation of the requirements.md file

* Finish the translation of the test-rb.md file

* Finish the translation of the test-dotnet.md file

* Translate the missing parts in test-rb.md
2024-09-25 10:18:00 +03:00
renovate[bot] 6a8f26a9cb fix(test-support): update dependency sinon to v19 (#20576) 2024-09-24 10:05:13 +02:00
renovate[bot] e65c1cdaed fix(docutils): update dependency typescript to v5.6.2 (#20556) 2024-09-24 09:45:44 +02:00
renovate[bot] da7a4fdce8 fix(driver-test-support): update definitelytyped (#20605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 09:39:30 +02:00
renovate[bot] f344504f15 fix(universal-xml-plugin): update dependency @xmldom/xmldom to v0.9.3 (#20599)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 09:25:47 +02:00
Mykola Mokhnach f0de55da0d fix(appium): Return hostname as web socket url for BiDi if a broadcast address is assigned to the server (#20603) 2024-09-24 08:40:04 +02:00
renovate[bot] 6704491be0 chore(docutils): update dependency mkdocs-material to v9.5.36 2024-09-21 13:35:40 +00:00
Edgars Eglītis 2a68d05b4d docs: remove AppiumConf banner (#20596) 2024-09-20 09:44:34 +03:00
Edgars Eglītis 5553016582 fix(execute-driver-plugin): replace vm2 with Node's built-in vm (#20594)
* fix: replace unsafe package vm2 with Node's vm

* chore: use node: prefix
2024-09-20 08:43:26 +03:00
Edgars Eglītis 9879d9f9b8 docs: update contributing guide (#20593) 2024-09-19 19:38:14 +03:00
renovate[bot] 517828be57 chore(docutils): update dependency mkdocs-material to v9.5.35 2024-09-18 13:48:43 +00:00
renovate[bot] e791a9b30c chore(deps): update dependency eslint to v8.57.1 2024-09-18 09:01:55 +00:00
Kazuaki Matsuo c2ccc80438 docs: add submit expense capture img in payout.md 2024-09-17 23:07:39 -07:00
84 changed files with 1375 additions and 1746 deletions
+1 -1
View File
@@ -16,7 +16,7 @@ _Put an `x` in the boxes that apply_
_Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code._
- [ ] I have read the [CONTRIBUTING](https://github.com/appium/appium/blob/master/CONTRIBUTING.md) doc
- [ ] I have read the [Contributing Guide](https://appium.io/docs/en/latest/contributing/)
- [ ] I have signed the CLA
- [ ] Lint and unit tests pass locally with my changes
- [ ] I have added tests that prove my fix is effective or that my feature works
+1 -1
View File
@@ -44,7 +44,7 @@ jobs:
useRollingCache: true
install-command: npm ci
- name: Install dependencies (Python)
run: pip install -r packages/docutils/requirements.txt
run: pip install -r packages/docutils/requirements.txt --break-system-packages
- name: Configure Git User
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
+1 -1
View File
@@ -31,7 +31,7 @@ jobs:
useRollingCache: true
install-command: npm ci
- name: Install dependencies (Python)
run: pip install -r packages/docutils/requirements.txt
run: pip install -r packages/docutils/requirements.txt --break-system-packages
- name: Publish docs
run: |
cd packages/appium
-63
View File
@@ -1,63 +0,0 @@
# Contributing to Appium
There are a lot of different ways to contribute to Appium. See below for
everything you can do and the processes to follow for each contribution method.
Note that no matter how you contribute, your participation is governed by our
[Code of Conduct](CONDUCT.md).
### Make changes to the Appium code or docs
Fork the project, make a change, and send a pull request! Please have a look at
our [Style Guide](/docs/en/contributing-to-appium/style-guide.md) before
getting to work. Please make sure the unit and functional tests pass before
sending a pull request; for more information on how to run tests, keep reading!
Make sure you read and follow the setup instructions in the README first. And note
that all participation in the Appium community (including code submissions) is
governed by our [Code of Conduct](CONDUCT.md). Then, have a look at our
[running from source doc](/docs/en/contributing-to-appium/appium-from-source.md) for more
information on how to get set up to run tests and start slinging code.
You will probably also want to have a look at this more in-depth [Developer's
Overview](/docs/en/contributing-to-appium/developers-overview.md) of the Appium
project, how Appium is architected, how to make changes to modules, and so on.
Finally, before we accept your code, you will need to have signed our
[Contributor License
Agreement](https://cla.js.foundation/appium/appium).
### Become an Appium Triager
You can help us manage our issue tracker! All you need is enough familiarity
with Appium to try and reproduce bugs. We triage issues by having conversations
with the issue creator and then either closing the issue or moving it into the
[Bugs](https://github.com/appium/appium/milestones/Bugs) or
[Features](https://github.com/appium/appium/milestones/Features) milestone. We
use these buckets as the backlogs for our upcoming releases.
We use this "algorithm" for triaging issues, which anyone can jump in and follow:
1. If issue is a feature request, discuss amongst Appium devs.
* If we decide to build it, add to the Features milestone.
* If we decide not to build it, just close.
2. If issue is a bug report, attempt to verify
* If it's a duplicate, close with link to bug already reported.
* If it ultimately can't be verified, close until we have enough information to verify (e.g., in most cases we need a full set of Appium logs to help diagnose an issue).
* If the user hasn't provided enough information, keep asking for enough information to verify.
* If it's a verified new bug, add it to the Bugs milestone.
* If we have been waiting for a reply from the user for over 3 weeks, close.
If you're interested in joining our triage rotation, contact
[@jlipps](https://github.com/jlipps) or
[@imurchie](https://github.com/imurchie).
### Help out on our forums
We can always use help on our forums at
[discuss.appium.io](https://discuss.appium.io)! Hop on over and see if there
are any questions that you can answer.
### Submit bug reports or feature requests
Just use the GitHub issue tracker to submit your bug reports and feature
requests. If you are submitting a bug report, please follow the [issue template](https://github.com/appium/appium/issues/new).
+3 -4
View File
@@ -67,10 +67,9 @@ significant contributions to the project but are no longer actively committing.
### Other Contributors
Other, less formal, kinds of contribution are outlined in our
[CONTRIBUTING](/CONTRIBUTING.md) doc. We also very much appreciate those who spend their valuable
time assisting with the [Appium forums](https://discuss.appium.io). Current high-level forum
contributors and mods include:
Other, less formal, kinds of contribution are outlined in our [Contributing Guide](https://appium.io/docs/en/latest/contributing/).
We also very much appreciate those who spend their valuable time assisting with the [Appium forums](https://discuss.appium.io).
Current high-level forum contributors and mods include:
* [aleksei](https://discuss.appium.io/u/aleksei/summary)
* [wreed](https://discuss.appium.io/u/wreed/summary)
+6 -7
View File
@@ -9,11 +9,15 @@
Cross-platform test automation for native, hybrid, mobile web and desktop apps.
</p>
<div align="center">
[![NPM version](https://badge.fury.io/js/appium.svg)](https://npmjs.org/package/appium)
[![Monthly Downloads](https://img.shields.io/npm/dm/appium.svg)](https://npmjs.org/package/appium)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_shield)
[![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/)
</div>
***
<p align="center"><b>
@@ -21,7 +25,7 @@
<a href="https://appium.io/docs/en/latest/intro/">Get Started</a> |
<a href="https://appium.io/docs/en/latest/ecosystem/">Ecosystem</a> |
<a href="https://github.com/appium/appium/blob/master/packages/appium/CHANGELOG.md">Changelog</a> |
<a href="https://github.com/appium/appium/blob/master/ROADMAP.md">Roadmap</a> |
<a href="https://appium.io/docs/en/latest/contributing/">Contributing Guide</a> |
<a href="https://discuss.appium.io">Discussion Forum</a>
</b></p>
@@ -190,11 +194,6 @@ rely on. [Become a sponsor](https://opencollective.com/appium) via our OpenColle
Appium is incredibly grateful to our Development and Strategic Partners for their sustained
contribution of project development and leadership!
<p align="center">
<a href="https://www.headspin.io/solutions/appium-mobile-test-automation"><img src="packages/appium/docs/overrides/assets/images/sponsor-logo-headspin.png"
width="275" alt="HeadSpin" /></a>
</p>
<p align="center">
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<picture>
@@ -212,7 +211,7 @@ width="300" alt="Sauce Labs" /></a>
### Other Sponsors
A full list of sponsors is available at our [Sponsors page](SPONSORS.md).
A full list of sponsors is available at our [Sponsors page](https://appium.io/docs/en/latest/sponsors/).
## License
+1 -46
View File
@@ -1,48 +1,3 @@
# Sponsors & Backers
Appium is an Apache-2 licensed open source project whose development is made possible entirely by
donations of time and money by individuals and companies who benefit from our software and our
mission. If you'd like to join this amazing group and help ensure Appium's continued development
and maintenance, you can contribute via [Appium's OpenCollective
Hub](https://opencollective.com/appium).
## Development Partners
We are very grateful for the support of our Development Partners, who donate Appium development and
maintenance as part of their employees' core job duties!
<a href="https://www.headspin.io/solutions/appium-mobile-test-automation" target="_blank"><img
src="packages/appium/docs/overrides/assets/images/sponsor-logo-headspin.png" width="250"/></a>
## Strategic Partners
We are very grateful for the financial and marketing support of our exclusive Strategic Partners,
who contribute a significant ongoing investment of funds to help the project attract and reward
contributors!
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<picture>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png" media="(prefers-color-scheme: dark)"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png" media="(prefers-color-scheme: light)"/>
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png" width="250" alt="Browserstack"/>
</picture>
</a>
<a style="padding-left: 1em" href="https://saucelabs.com/resources/blog/appium-strategic-partner" target="_blank"><img src="packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png" width="250"/></a>
## Gold Sponsors
<a href="https://opencollective.com/appium" target="_blank"><img src="https://opencollective.com/appium/tiers/gold-sponsor.svg?avatarHeight=100&button=false&random=1"/></a>
[Become a Gold Sponsor](https://opencollective.com/appium/contribute/gold-sponsor-72877/checkout?interval=month&amount=500&contributeAs=me)
## Silver Sponsors
<a href="https://opencollective.com/appium" target="_blank"><img src="https://opencollective.com/appium/tiers/silver-sponsor.svg?avatarHeight=80&button=false&random=1"/></a>
[Become a Silver Sponsor](https://opencollective.com/appium/contribute/silver-sponsor-72876/checkout?interval=month&amount=250&contributeAs=me)
## Bronze Sponsors
<a href="https://opencollective.com/appium" target="_blank"><img src="https://opencollective.com/appium/tiers/sponsors.svg?avatarHeight=60&button=false&random=1"/></a>
[Become a Bronze Sponsor](https://opencollective.com/appium/contribute/sponsors-70690/checkout?interval=month&amount=100&contributeAs=me)
Please check [Sponsors & Backers](https://appium.io/docs/en/latest/sponsors/)
+3
View File
@@ -1,6 +1,9 @@
This documentation is a note for the opencollective payout.
1. Select `Submit expense`
<img width="200" alt="Screenshot 2024-09-17 at 11 04 32 PM" src="https://github.com/user-attachments/assets/5d598a46-8aa3-41e0-aadc-ce3f34b10f6b">
2. Select `Invoice`
3. Type proper account name in `Who is being paid for this expense?`
- The form depends on the target user
+556 -1067
View File
File diff suppressed because it is too large Load Diff
+13 -12
View File
@@ -44,6 +44,7 @@
"docs:preview": "npm run -w packages/appium build:docs:preview",
"docs:publish": "npm run -w packages/appium publish:docs",
"doctor": "node ./packages/doctor",
"install-docs-deps": "npm run -w packages/appium install-docs-deps",
"lint": "eslint .",
"lint:ci": "eslint --quiet .",
"lint:fix": "run-s \"lint -- --fix\"",
@@ -83,14 +84,14 @@
"devDependencies": {
"@colors/colors": "1.6.0",
"@tsconfig/node14": "14.1.2",
"@types/chai": "4.3.19",
"@types/chai-as-promised": "8.0.0",
"@types/diff": "5.2.2",
"@types/mocha": "10.0.8",
"@types/node": "20.16.5",
"@types/chai": "5.0.0",
"@types/chai-as-promised": "8.0.1",
"@types/diff": "5.2.3",
"@types/mocha": "10.0.9",
"@types/node": "20.16.11",
"@types/semver": "7.5.8",
"@types/sinon": "17.0.3",
"@types/sinon-chai": "3.2.12",
"@types/sinon-chai": "4.0.0",
"@types/source-map-support": "0.5.10",
"@types/teen_process": "2.0.4",
"@types/ws": "8.5.12",
@@ -102,11 +103,11 @@
"chai-as-promised": "8.0.0",
"conventional-changelog-conventionalcommits": "7.0.2",
"cpy-cli": "5.0.0",
"eslint": "8.57.0",
"eslint": "8.57.1",
"eslint-config-prettier": "9.1.0",
"eslint-find-rules": "4.1.0",
"eslint-find-rules": "4.2.0",
"eslint-import-resolver-typescript": "3.6.3",
"eslint-plugin-import": "2.30.0",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-mocha": "10.5.0",
"eslint-plugin-promise": "6.6.0",
"finalhandler": "1.3.1",
@@ -123,13 +124,13 @@
"rewiremock": "3.14.5",
"rimraf": "5.0.10",
"serve-static": "1.16.2",
"sinon": "18.0.1",
"sinon": "19.0.2",
"sync-monorepo-packages": "1.0.2",
"ts-node": "10.9.2",
"tsd": "0.31.2",
"typescript": "5.5.4",
"typescript": "5.6.3",
"validate.js": "0.13.1",
"webdriverio": "8.40.5",
"webdriverio": "8.40.6",
"ws": "8.18.0",
"yaml-js": "0.3.1"
},
+26
View File
@@ -3,6 +3,32 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.12.0](https://github.com/appium/appium/compare/appium@2.11.5...appium@2.12.0) (2024-10-15)
### Features
* **appium:** Make server graceful shutdown timeout configurable via command line args ([#20641](https://github.com/appium/appium/issues/20641)) ([5661888](https://github.com/appium/appium/commit/56618886ed007df3c28ce98beb4ff91bc47da2a2))
### Bug Fixes
* **appium:** update dependency winston to v3.15.0 ([ab12235](https://github.com/appium/appium/commit/ab12235483262a1c5a1dd8a32b1792a4b096bfc6))
* **docutils:** support Python 3.12+ ([#20666](https://github.com/appium/appium/issues/20666)) ([8d7cec9](https://github.com/appium/appium/commit/8d7cec96d8df60644493a7e2f735b4bb0d3783be))
* **docutils:** update dependency yaml to v2.6.0 ([ed6c6dd](https://github.com/appium/appium/commit/ed6c6dd5441e26fc1eb58de9b78def49d930a128))
* **execute-driver-plugin:** update dependency webdriverio to v8.40.6 ([796ca9f](https://github.com/appium/appium/commit/796ca9f98f69616b9c890325bbfb0c573a8bc765))
## [2.11.5](https://github.com/appium/appium/compare/appium@2.11.4...appium@2.11.5) (2024-09-26)
### Bug Fixes
* **appium:** Return hostname as web socket url for BiDi if a broadcast address is assigned to the server ([#20603](https://github.com/appium/appium/issues/20603)) ([f0de55d](https://github.com/appium/appium/commit/f0de55da0da2fc0305876a948704c1f0a2a5990f))
## [2.11.4](https://github.com/appium/appium/compare/appium@2.11.3...appium@2.11.4) (2024-09-16)
+6 -7
View File
@@ -9,11 +9,15 @@
Cross-platform test automation for native, hybrid, mobile web and desktop apps.
</p>
<div align="center">
[![NPM version](https://badge.fury.io/js/appium.svg)](https://npmjs.org/package/appium)
[![Monthly Downloads](https://img.shields.io/npm/dm/appium.svg)](https://npmjs.org/package/appium)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_shield)
[![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/)
</div>
***
<p align="center"><b>
@@ -21,7 +25,7 @@
<a href="https://appium.io/docs/en/latest/intro/">Get Started</a> |
<a href="https://appium.io/docs/en/latest/ecosystem/">Ecosystem</a> |
<a href="https://github.com/appium/appium/blob/master/packages/appium/CHANGELOG.md">Changelog</a> |
<a href="https://github.com/appium/appium/blob/master/ROADMAP.md">Roadmap</a> |
<a href="https://appium.io/docs/en/latest/contributing/">Contributing Guide</a> |
<a href="https://discuss.appium.io">Discussion Forum</a>
</b></p>
@@ -190,11 +194,6 @@ rely on. [Become a sponsor](https://opencollective.com/appium) via our OpenColle
Appium is incredibly grateful to our Development and Strategic Partners for their sustained
contribution of project development and leadership!
<p align="center">
<a href="https://www.headspin.io/solutions/appium-mobile-test-automation"><img src="packages/appium/docs/overrides/assets/images/sponsor-logo-headspin.png"
width="275" alt="HeadSpin" /></a>
</p>
<p align="center">
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<picture>
@@ -212,7 +211,7 @@ width="300" alt="Sauce Labs" /></a>
### Other Sponsors
A full list of sponsors is available at our [Sponsors page](SPONSORS.md).
A full list of sponsors is available at our [Sponsors page](https://appium.io/docs/en/latest/sponsors/).
## License
+2
View File
@@ -25,6 +25,8 @@ plugins:
'reference/commands/images-plugin.md': 'commands/images-plugin.md'
'reference/commands/relaxed-caps-plugin.md': 'commands/relaxed-caps-plugin.md'
'reference/commands/universal-xml-plugin.md': 'commands/universal-xml-plugin.md'
'contributing/config-system.md': 'developing/config-system.md'
'contributing/develop.md': 'contributing.md'
extra_css:
- assets/stylesheets/extra.css
+123
View File
@@ -0,0 +1,123 @@
---
hide:
- navigation
title: Contributing to Appium
---
The Appium project would not exist without the many contributions of code, documentation,
maintenance, and support from companies and volunteers. As such, we welcome contributions!
There are a lot of different ways to help the project - see below for everything you can do and the
processes to follow for each contribution method. Note that no matter how you contribute, your
participation is governed by our [Code of Conduct](https://github.com/appium/appium/blob/master/CONDUCT.md).
## Join the Discussion Forum
You don't need to know the internals of Appium to be able to contribute! If you have experience with
using Appium and feel like sharing your knowledge with others, consider helping out users on the
Appium forums at [discuss.appium.io](https://discuss.appium.io/). Hop on over and see if there are
any questions that you can answer.
## Report Bugs or Feature Requests
If you've encountered a bug, or have a cool feature in mind that you think Appium should support,
make sure to let us know at our [GitHub issue tracker](https://github.com/appium/appium/issues).
Please use the appropriate issue form template when creating your issue.
## Triage Issues
In addition to creating issues, you can also help us investigate already reported issues. All you
need is enough familiarity with Appium to try and reproduce bugs.
You can get started by checking our [GitHub issue tracker](https://github.com/appium/appium/issues)
for issues with labels such as `Needs Triage` or `Needs Info`, and leaving relevant comments:
- If the issue is a duplicate, drop a link to the original issue
- If the user has not provided enough information (such as Appium logs), ask them for more details
- If you can reproduce the problem on your own environment, provide all the information that you think
would help us track down the cause of the issue
For further information on triaging Appium issues (for any Appium project repository), please contact
any member of the [Technical Committee](https://github.com/appium/appium/blob/master/GOVERNANCE.md#the-technical-committee).
## Contribute Code
We are always open to pull requests for improving the Appium code or documentation!
!!! info
Developer information may not be kept up to date as frequently as user-facing information, or
it may be most relevant in its current form on the online repository, not in this published
version. Make sure to check the repo or discuss with maintainers. We would be glad to help
new contributors get started!
Start by cloning the repository (we recommend [forking](https://github.com/appium/appium/fork)
it first):
```sh
git clone https://github.com/appium/appium.git
cd appium
```
!!! info
If you are VS Code user, you can easily check out the project using [Runme](https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fappium%2Fappium.git&fileToOpen=packages%2Fappium%2Fdocs%2Fen%2Fcontributing%2Findex.md).
Install dependencies:
```sh
npm install
```
From here on there are several things you can do.
Build the project:
```sh
npm run build
```
Build the project and watch for changes:
```sh
npm run dev
```
Start the locally built Appium server:
```sh
npm start
```
Run various tests:
```sh
npm run lint
npm run test:unit
npm run test:types
npm run test:smoke
npm run test:e2e
npm run test:quick # unit and types
npm run test:slow # everything
```
You can also run tests for specific workspaces, e.g.:
```sh
export APPIUM_WORKSPACE=@appium/base-driver
npm run test:unit -w $APPIUM_WORKSPACE
```
### Documentation
The documentation for this project is [available in the project repository itself](https://github.com/appium/appium/tree/master/packages/appium/docs).
It is contained in Markdown files, which are built by our documentation system in the
`@appium/docutils` module. This module is based on [MkDocs](https://www.mkdocs.org/) and therefore
requires [Python](https://www.python.org/) to be installed on your system.
Install Python dependencies:
```sh
npm run install-docs-deps
```
After making your changes, you can run the documentation server in dev mode:
```sh
npm run dev:docs
```
You can then view the documentation at `http://127.0.0.1:8000/docs/en`.
@@ -1,90 +0,0 @@
---
title: Contributing Code
---
To contribute to the Appium code base make sure to check out the Git repository.
!!! info
If you are VS Code user you can easily check out the project using [Runme](https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fappium%2Fappium.git&fileToOpen=packages%2Fappium%2Fdocs%2Fen%2Fcontributing%2Findex.md).
It is advised to [fork](https://github.com/appium/appium/fork) before cloning it to your system.
```sh
export GITHUB_USERNAME=<your-username>
git clone git@github.com:$GITHUB_USERNAME/appium.git
```
After cloning you can go ahead and install the project dependencies:
```sh
npm install
```
From here on there are several things you can do.
### Watch Files
When developing Appium code we have to watch all JavaScript and TypeScript files to re-compile them after every change. You can run this watch process via:
```sh
npm run dev
```
### Start Appium in Dev-Mode
To test your changes you can run Appium in dev mode via:
```sh
npm start
```
### Run Tests
The project maintains a set of different test variations you can run to verify the quality of the code.
#### Linting
Appium uses [`eslint`](https://eslint.org/) for static code analysis and linting. You can run these checks via:
```sh
npm run lint
```
#### Unit
```sh
npm run test:unit
```
You can also run tests for specific workspaces, e.g.:
```sh
export APPIUM_WORKSPACE=@appium/doctor
npm run test:unit -w $APPIUM_WORKSPACE
```
#### Smoke and E2E
```sh
npm run test:slow
```
### Deploy Docs Locally
Our documentation system uses [MKDocs](https://www.mkdocs.org/) and therefore requires [Python](https://www.python.org/) to be installed on your system. You can run the docs by:
```sh
# installing needed Python dependencies
pip install -r packages/docutils/requirements.txt
# build the project
npm run build
# run dev server
npm run dev:docs
```
You should be able to view the page at `http://127.0.0.1:8000/docs/en`:
```sh
open http://127.0.0.1:8000/docs/en
```
@@ -1,38 +0,0 @@
---
hide:
- toc
title: Contributing to Appium
---
Appium is open source, available under an Apache 2.0 license. Appium's copyright is held by the
[OpenJS Foundation](https://openjsf.org), and Appium receives contributions from many companies
across several software industries, regardless of their competitive status. (3rd-party drivers and
plugins are available under the licenses provided by their authors.)
As such, we welcome contributions! The project moves forward in relation to the investment of
contributions of code, documentation, maintenance, and support from companies and volunteers.
This section of Appium's documentation is for those who are interested in contributing to Appium's
development. It contains developer overviews, guides, and notes. Use the navigation menu to find
a specific topic. All the information in these guides assumes in-depth familiarity with Appium
already.
!!! warning
Developer information may not be kept up to date as frequently as user-facing information, or
it may be most relevant in its current form on the online repository, not in this published
version. Always be sure to check the repo or discuss with maintainers. We're always happy to
help new contributors get started!
## Ways to Contribute
The project offers a variety of ways to contribute, e.g.:
- [contributing code](./develop.md)
- improving documentation
- creating educational content (blog posts, tutorials, videos, etc.)
- spreading the good word about the project (e.g. via Twitter)
- filing bugs if you discover them while using Appium
- making feature requests if you are missing something in the project or help triaging bugs
- supporting users in the [Appium forum](https://discuss.appium.io/)
@@ -44,6 +44,8 @@ These drivers are not maintained by the Appium team and can be used to target ad
|[Tizen](https://github.com/Samsung/appium-tizen-driver)|`--source=npm appium-tizen-driver`|Android|Native|Community / Samsung|
|[TizenTV](https://github.com/headspinio/appium-tizen-tv-driver)|`--source=npm appium-tizen-tv-driver`|Samsung TV|Web|HeadSpin|
|[Youi](https://github.com/YOU-i-Labs/appium-youiengine-driver)|`--source=npm appium-youiengine-driver`|iOS, Android, macOS, Linux, tvOS|Native|Community / You.i|
|[axe UiAutomator2](https://docs.deque.com/devtools-mobile/appium-setup)|`--source=npm @axe-devtools/axe-appium-uiautomator2-driver`|Android|Native|[Deque](https://www.deque.com)|
|[axe XCUITest](https://docs.deque.com/devtools-mobile/appium-setup)|`--source=npm @axe-devtools/axe-appium-xcuitest-driver`|iOS|Native|[Deque](https://www.deque.com)|
!!! note
+1 -11
View File
@@ -12,11 +12,6 @@ title: Welcome
}
</style>
<div style="text-align:center;width:100%;background-color:#7f56c2" >
<h3 style="color:#ffffff;">
Appium Conf 2024 is coming online, 13 September. Improve your Appium skills and connect with the community. <br><a style="color:#fcba12" href="https://confengine.com/conferences/appium-conf-2024/register/selection?utm_medium=referal&utm_source=appium.io&utm_campaign=register" target="blank">Register Now</a>
</h3>
</div>
<div style="text-align: center">
<img src="assets/images/appium-logo-horiz.png" style="max-width: 400px;" />
</div>
@@ -32,11 +27,6 @@ Android TV, Samsung), and more!
sponsorship program and contributor compensation scheme <a
href="https://github.com/appium/appium/blob/master/GOVERNANCE.md#sponsorship">here</a>)
<div class="homepageSponsors">
<div class="homepageSponsor">
<a href="https://www.headspin.io/solutions/appium-mobile-test-automation">
<img src="assets/images/sponsor-logo-headspin.png" style="width: 200px;" />
</a>
</div>
<div class="homepageSponsor">
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<img src="assets/images/sponsor-logo-browserstack-dark.png#only-dark" style="width: 220px;" />
@@ -63,6 +53,6 @@ Android TV, Samsung), and more!
- Read the different [__Guides__](./guides/migrating-1-to-2.md) for a variety of instructions, tips and tricks
- Check out various third-party [__Resources__](./resources.md) to explore Appium around the web
- For creating your own Appium extensions, see the [__Developer__](./developing/index.md) documentation
- For contributions to Appium itself, refer to the [__Contributing__](./contributing/index.md) page
- For contributions to Appium itself, refer to the [__Contributing__](./contributing.md) page
</div>
+2 -2
View File
@@ -137,8 +137,8 @@ already had well over 1,000 commits.
Appium began to grow and mature significantly. In May 2014,
we released Appium 1.0, which stood as a milestone in Appium's development.
Appium was given
[various](http://sauceio.com/index.php/2014/01/appium-selected-as-a-black-duck-open-source-rookie-of-the-year/)
[awards](http://sauceio.com/index.php/2014/10/appium-wins-a-bossy-award-from-infoworld/)
[various](https://www.prnewswire.com/news-releases/black-duck-announces-black-duck-open-source-rookies-of-the-year-winners-242383341.html)
[awards](https://www.infoworld.com/article/2241247/164642-bossie-awards-2014-the-best-open-source-application-development-tools.html)
and became the most popular open-source cross-platform mobile automation
framework. Stability improved, bugs were prioritized and fixed, and features
added. Sauce Labs increased the number of developers it donated to working
+55
View File
@@ -0,0 +1,55 @@
---
hide:
- navigation
- toc
title: Sponsors & Backers
---
<style>
.appium-sponsor-thanks { display: none; }
</style>
Appium is an Apache-2 licensed open source project whose development is made possible entirely by
donations of time and money by individuals and companies who benefit from our software and our
mission. If you'd like to join this amazing group and help ensure Appium's continued development
and maintenance, you can contribute via [Appium's OpenCollective
Hub](https://opencollective.com/appium).
## Development Partners
We are very grateful for the support of our Development Partners, who donate Appium development and
maintenance as part of their employees' core job duties!
## Strategic Partners
We are very grateful for the financial and marketing support of our exclusive Strategic Partners,
who contribute a significant ongoing investment of funds to help the project attract and reward
contributors!
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<picture>
<source srcset="../assets/images/sponsor-logo-browserstack-dark.png" media="(prefers-color-scheme: dark)"/>
<source srcset="../assets/images/sponsor-logo-browserstack-light.png" media="(prefers-color-scheme: light)"/>
<img src="../assets/images/sponsor-logo-browserstack-dark.png" width="250" alt="Browserstack"/>
</picture>
</a>
<a style="padding-left: 1em" href="https://saucelabs.com/resources/blog/appium-strategic-partner" target="_blank"><img src="../assets/images/sponsor-logo-sauce.png" width="250"/></a>
## Gold Sponsors
<a href="https://opencollective.com/appium" target="_blank"><img src="https://opencollective.com/appium/tiers/gold-sponsor.svg?avatarHeight=100&button=false&random=1"/></a>
[Become a Gold Sponsor](https://opencollective.com/appium/contribute/gold-sponsor-72877/checkout?interval=month&amount=500&contributeAs=me)
## Silver Sponsors
<a href="https://opencollective.com/appium" target="_blank"><img src="https://opencollective.com/appium/tiers/silver-sponsor.svg?avatarHeight=80&button=false&random=1"/></a>
[Become a Silver Sponsor](https://opencollective.com/appium/contribute/silver-sponsor-72876/checkout?interval=month&amount=250&contributeAs=me)
## Bronze Sponsors
<a href="https://opencollective.com/appium" target="_blank"><img src="https://opencollective.com/appium/tiers/sponsors.svg?avatarHeight=60&button=false&random=1"/></a>
[Become a Bronze Sponsor](https://opencollective.com/appium/contribute/sponsors-70690/checkout?interval=month&amount=100&contributeAs=me)
+4 -4
View File
@@ -72,7 +72,7 @@ nav:
- developing/build-plugins.md
- developing/build-docs.md
- developing/build-doctor-checks.md
- Contributing:
- contributing/index.md
- contributing/develop.md
- contributing/config-system.md
- Developer Reference:
- developing/config-system.md
- Contributing: contributing.md
- Sponsors: sponsors.md
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

@@ -1,10 +1,6 @@
<div class="appium-sponsor-thanks">
Supported by
<a href="https://www.headspin.io/solutions/appium-mobile-test-automation">
<img src="/docs/en/latest/assets/images/sponsor-logo-headspin.png" />
</a>
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<img src="/docs/en/latest/assets/images/sponsor-logo-browserstack-dark.png" />
</a>
@@ -76,7 +76,7 @@ Our documentation system uses [MKDocs](https://www.mkdocs.org/) and therefore re
```sh
# installing needed Python dependencies
pip install -r packages/docutils/requirements.txt
pip install -r packages/docutils/requirements.txt --break-system-packages
# build the project
npm run build
# run dev server
+12 -16
View File
@@ -2,41 +2,37 @@
hide:
- toc
title: Appium Clients
title: Appium客户端
---
You need a client to write and run Appium scripts. You'll want to become very
familiar with your client documentation (as well as the documentation of any Selenium client that
the Appium client depends on) since that will be your primary interface to Appium.
您需要一个客户端来编写和运行Appium脚本。您需要非常熟悉您的客户端文档(以及Appium客户端所依赖的任何Selenium客户端的文档),因为这将是您与Appium的主要接口。
To learn more about clients, read our [Client Intro](../intro/clients.md).
要了解更多关于客户端的信息,请阅读我们的[客户端简介](../intro/clients.md)。
### Official Clients
### 官方客户端
These clients are currently maintained by the Appium team:
这些客户端目前由Appium团队维护:
|Client|Language|
|客户端|编程语言|
|-|-|
|[Appium Java client](https://github.com/appium/java-client)|Java|
|[Appium Python client](https://github.com/appium/python-client)|Python|
|[Appium Ruby Core client](https://github.com/appium/ruby_lib_core) (Recommended)<br>[Appium Ruby client](https://github.com/appium/ruby_lib)|Ruby|
|[Appium .NET client](https://github.com/appium/dotnet-client)|C#|
### Other Clients
### 其他客户端
These clients are not maintained by the Appium team and can be used with other languages:
这些客户端不由Appium团队维护,可以与其他语言一起使用:
|Client|Language|
|客户端|编程语言|
|-|-|
|[WebdriverIO](https://webdriver.io/docs/appium)|Node.js|
|[Nightwatch.js](https://nightwatchjs.org/guide/mobile-app-testing/introduction.html)|Node.js|
|[RobotFramework](https://github.com/serhatbolsu/robotframework-appiumlibrary)|DSL|
|[multicatch's appium-client](https://github.com/multicatch/appium-client)|Rust|
In general, any W3C WebDriver spec-compatible client will also integrate well with Appium, though
some Appium-specific commands may not be implemented in other clients.
一般来说,任何兼容W3C WebDriver规范的客户端,也可以和Appium很好地集成,尽管某些Appium特定的命令可能无法在其他客户端中实现。
!!! note
!!! 注意
If you maintain an Appium client that you would like to be listed in the Appium docs, feel free
to make a PR to add it to this section with a link to the documentation for the client.
如果您维护了一个Appium客户端,并希望在Appium文档中列出,请随时进行PR,将其添加到本部分,并附上客户端文档的链接。
+13 -15
View File
@@ -2,24 +2,23 @@
hide:
- toc
title: Appium Drivers
title: Appium驱动
---
You can't use Appium without at least one driver! Click on the link for each driver to see the
specific installation instructions and documentation for that driver.
如果没有至少一个驱动程序,您就无法使用Appium!单击每个驱动程序的链接,查看该驱动程序的具体安装说明和文档。
Generally, drivers can be installed using their listed installation key, with the following command:
通常,可以使用下面列出的驱动名称,使用以下命令安装驱动程序:
```
appium driver install <installation key>
appium driver install <驱动名称>
```
To learn more about drivers, check out the [Driver Intro](../intro/drivers.md).
要了解有关驱动的更多信息,请查看[驱动简介](../intro/drivers.md)。
### Official Drivers
### 官方驱动
These drivers are currently maintained by the Appium team:
这些驱动程序目前由Appium团队维护:
|Driver|Installation Key|Platform(s)|Mode(s)|
|驱动|驱动名称|支持的平台|支持的形式|
|--|--|--|--|
|[Chromium](https://github.com/appium/appium-chromium-driver)|`chromium`|macOS, Windows, Linux|Web|
|[Espresso](https://github.com/appium/appium-espresso-driver)|`espresso`|Android|Native|
@@ -30,11 +29,11 @@ These drivers are currently maintained by the Appium team:
|[Windows](https://github.com/appium/appium-windows-driver)|`windows`|Windows|Native|
|[XCUITest](https://github.com/appium/appium-xcuitest-driver)|`xcuitest`|iOS|Native, Hybrid, Web|
### Other Drivers
### 其他驱动
These drivers are not maintained by the Appium team and can be used to target additional platforms:
这些驱动程序不由Appium团队维护,可用于针对其他平台:
|Driver|Installation Key|Platform(s)|Mode(s)|Supported By|
|驱动|驱动名称|支持的平台|支持的形式|维护者|
|--|--|--|--|--|
|[Flutter](https://github.com/appium/appium-flutter-driver)|`--source=npm appium-flutter-driver`|iOS, Android|Native|Community|
|[Flutter Integration](https://github.com/AppiumTestDistribution/appium-flutter-integration-driver)|`--source=npm appium-flutter-integration-driver`|iOS, Android|Native|Community / `@AppiumTestDistribution`|
@@ -45,7 +44,6 @@ These drivers are not maintained by the Appium team and can be used to target ad
|[TizenTV](https://github.com/headspinio/appium-tizen-tv-driver)|`--source=npm appium-tizen-tv-driver`|Samsung TV|Web|HeadSpin|
|[Youi](https://github.com/YOU-i-Labs/appium-youiengine-driver)|`--source=npm appium-youiengine-driver`|iOS, Android, macOS, Linux, tvOS|Native|Community / You.i|
!!! note
!!! 注意
If you maintain an Appium driver that you would like to be listed in the Appium docs, feel free
to make a PR to add it to this section with a link to the driver documentation.
如果您维护了一个Appium驱动程序,并希望在Appium文档中列出,请随时进行PR,将其添加到本部分,并附上驱动程序文档的链接。
+14 -15
View File
@@ -2,44 +2,43 @@
hide:
- toc
title: Ecosystem Overview
title: 生态系统概述
---
Appium has a wide ecosystem of related software and tools. This section of the Appium documentation
aims to compile a listing of various officially-supported and community-supported Appium projects:
Appium拥有广泛的相关软件和工具生态系统。文档的这一部分旨在编制各种官方支持和社区支持的Appium项目的列表:
<div class="grid cards" markdown>
- :material-car: __Drivers__
- :material-car: __驱动__
---
Link Appium to your test device
将Appium链接到您的测试设备
[:octicons-arrow-right-24: View all drivers](./drivers.md)
[:octicons-arrow-right-24: 查看所有驱动](./drivers.md)
- :octicons-code-16: __Clients__
- :octicons-code-16: __客户端__
---
Link Appium to your automation code
将Appium链接到您的自动化代码
[:octicons-arrow-right-24: View all clients](./clients.md)
[:octicons-arrow-right-24: 查看所有客户端](./clients.md)
- :fontawesome-solid-plug: __Plugins__
- :fontawesome-solid-plug: __插件__
---
Modify and extend Appium functionality
修改和扩展Appium功能
[:octicons-arrow-right-24: View all plugins](./plugins.md)
[:octicons-arrow-right-24: 查看所有插件](./plugins.md)
- :material-wrench: __Tools__
- :material-wrench: __工具__
---
Interact with Appium in other ways
以其他方式与Appium交互
[:octicons-arrow-right-24: View all tools](./tools.md)
[:octicons-arrow-right-24: 查看所有工具](./tools.md)
</div>
+24 -26
View File
@@ -2,44 +2,42 @@
hide:
- toc
title: Appium Plugins
title: Appium插件
---
Plugins offer various ways to extend or modify Appium's behaviour. They are _completely optional_
and are not needed for standard automation functionality, but you may find them to be useful
for more specialised automation workflows.
插件提供了各种方法来扩展或修改Appium的行为。它们是完全可选的,不是标准自动化功能所必需的,但您可能会发现它们对更专业的自动化工作流程很有用。
通常,可以使用下面列出的插件名称,使用以下命令安装插件:
Generally, plugins can be installed using their listed installation key, with the following command:
```
appium plugin install <installation key>
appium plugin install <插件名称>
```
### Official Plugins
### 官方插件
These plugins are are currently maintained by the Appium team:
这些插件目前由Appium团队维护:
|<div style="width:7em">Plugin</div>|<div style="width:8em">Installation Key</div>|Description|
|<div style="width:7em">插件</div>|<div style="width:8em">插件名称</div>|简介|
|---|---|---|
|[Execute Driver](https://github.com/appium/appium/tree/master/packages/execute-driver-plugin)|`execute-driver`|Run entire batches of commands in a single call to the Appium server|
|[Images](https://github.com/appium/appium/tree/master/packages/images-plugin)|`images`|Image matching and comparison features|
|[Relaxed Caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin)|`relaxed-caps`|Relax Appium's requirement for vendor prefixes on capabilities|
|[Universal XML](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin)|`universal-xml`|Instead of the standard XML format for iOS and Android, use an XML definition that is the same across both platforms|
|[Execute Driver](https://github.com/appium/appium/tree/master/packages/execute-driver-plugin)|`execute-driver`|在对Appium服务器的一次调用中运行整批命令|
|[Images](https://github.com/appium/appium/tree/master/packages/images-plugin)|`images`|图像匹配和比较功能|
|[Relaxed Caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin)|`relaxed-caps`|放宽Appium对功能上供应商前置的要求|
|[Universal XML](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin)|`universal-xml`|使用在两个平台上都相同的XML定义,而不是iOS和Android的标准XML格式|
### Other Plugins
### 其他插件
These plugins are not maintained by the Appium team and can provide additional functionality:
这些插件不由Appium团队维护,可以提供其他功能:
|<div style="width:6em">Plugin</div>|<div style="width:19em">Installation Key</div>|Description|<div style="width:13em">Supported By</div>|
|<div style="width:6em">插件</div>|<div style="width:19em">插件名称</div>|简介|<div style="width:13em">维护者</div>|
|---|---|---|---|
|[AltUnity](https://github.com/headspinio/appium-altunity-plugin)|`--source=npm appium-altunity-plugin`|Target Unity games and apps for automation with a new context, via the AltUnityTester framework|HeadSpin|
|[Device Farm](https://github.com/AppiumTestDistribution/appium-device-farm)|`--source=npm appium-device-farm`|Manage and create driver sessions on connected Android devices and iOS simulators|`@AppiumTestDistribution`|
|[Gestures](https://github.com/AppiumTestDistribution/appium-gestures-plugin)|`--source=npm appium-gestures-plugin`|Perform basic gestures using W3C Actions|`@AppiumTestDistribution`|
|[Interceptor](https://github.com/AppiumTestDistribution/appium-interceptor-plugin)|`--source=npm appium-interceptor`|Intercept and mock API requests and responses|`@AppiumTestDistribution`|
|[OCR](https://github.com/jlipps/appium-ocr-plugin)|`--source=npm appium-ocr-plugin`|Find elements via OCR text|`@jlipps`|
|[Reporter](https://github.com/AppiumTestDistribution/appium-reporter-plugin)|`--source=npm appium-reporter-plugin`|Generate standalone consolidated HTML reports with screenshots|`@AppiumTestDistribution`|
|[Wait](https://github.com/AppiumTestDistribution/appium-wait-plugin)|`--source=npm appium-wait-plugin`|Manage global element wait timeouts|`@AppiumTestDistribution`|
|[AltUnity](https://github.com/headspinio/appium-altunity-plugin)|`--source=npm appium-altunity-plugin`|通过AltUnityTester框架,为Unity游戏和应用程序提供新的自动化环境|HeadSpin|
|[Device Farm](https://github.com/AppiumTestDistribution/appium-device-farm)|`--source=npm appium-device-farm`|在连接的Android设备和iOS模拟器上管理和创建驱动程序会话|`@AppiumTestDistribution`|
|[Gestures](https://github.com/AppiumTestDistribution/appium-gestures-plugin)|`--source=npm appium-gestures-plugin`|使用W3C操作执行基本手势|`@AppiumTestDistribution`|
|[Interceptor](https://github.com/AppiumTestDistribution/appium-interceptor-plugin)|`--source=npm appium-interceptor`|拦截和模拟API请求和响应|`@AppiumTestDistribution`|
|[OCR](https://github.com/jlipps/appium-ocr-plugin)|`--source=npm appium-ocr-plugin`|通过OCR文本查找元素|`@jlipps`|
|[Reporter](https://github.com/AppiumTestDistribution/appium-reporter-plugin)|`--source=npm appium-reporter-plugin`|通过屏幕截图生成独立的合并HTML报告|`@AppiumTestDistribution`|
|[Wait](https://github.com/AppiumTestDistribution/appium-wait-plugin)|`--source=npm appium-wait-plugin`|管理全局元素等待超时|`@AppiumTestDistribution`|
!!! note
!!! 注意
If you maintain an Appium plugin that you would like to be listed in the Appium docs, feel free
to make a PR to add it to this section with a link to the documentation for the plugin.
如果您维护了一个Appium插件,并希望在Appium文档中列出,请随时进行PR,将其添加到本部分,并附上插件文档的链接。
+14 -18
View File
@@ -2,41 +2,37 @@
hide:
- toc
title: Appium-Related Tools
title: Appium相关工具
---
There are several Appium tools that have been created to to assist with things not directly related
to testing, such as Appium installation, test development, and more.
这里有几个Appium工具来帮助处理与测试没有直接关系的事情,例如Appium安装、测试开发等。
### [Appium Inspector](https://appium.github.io/appium-inspector/latest/)
Appium has a graphical client which can be used to inspect application screenshots, view the
application hierarchy, run Appium commands, record app interactions, and more. It is very useful
for Appium test development.
Appium有一个图形客户端,可用于检查应用程序屏幕截图、查看应用程序层次结构、运行Appium命令、记录应用程序交互等。它对Appium测试开发非常有用。
Find downloads and more information on its GitHub page: [Appium Inspector](https://github.com/appium/appium-inspector)
在其GitHub页面上查找下载和更多信息:[Appium Inspector](https://github.com/appium/appium-inspector)
### Appium Doctor
Appium Doctor is a command-line tool built into Appium drivers and plugins.
The command is expected to be used to validate whether a driver or plugin has all of its prerequisites and other environment details set up correctly
if the driver/plugin author implemented the `doctor` command.
Appium Doctor是一个内置于Appium驱动程序和插件中的命令行工具。如果驱动程序/插件作者实现了`doctor`命令,
则该命令将用于验证驱动程序或插件是否正确设置了所有先决条件和其他环境详细信息。
For example, `uiautomator2` driver provides the `doctor` command below.
例如,`uiautomator2`驱动程序提供以下`doctor`命令。
```
appium driver doctor uiautomator2
```
It shows no result if the driver/plugin author did not implement them.
如果驱动程序/插件作者没有实现它们,则不会显示任何结果。
More information on this command can be found in the [Command-Line Usage documentation](../cli/extensions.md#doctor).
For driver/plugin developers, please read [Building Doctor Checks](../developing/build-doctor-checks.md).
有关此命令的更多信息,请参阅[命令行使用文档](../cli/extensions.md#doctor)。
对于驱动程序/插件开发人员,请阅读[构建医生检查](../developing/build-doctor-checks.md)。
### Other Tools
### 其他工具
These tools are not maintained by the Appium team and can be used to assist with other problems:
这些工具不由Appium团队维护,可以用于协助解决其他问题:
|Name|Description|Supported By|
|名字|简介|维护者|
|---|---|---|
|[appium-installer](https://github.com/AppiumTestDistribution/appium-installer)|Help set up an Appium environment for Android and iOS|`@AppiumTestDistribution`|
|[appium-installer](https://github.com/AppiumTestDistribution/appium-installer)|为Android和iOS设置Appium环境|`@AppiumTestDistribution`|
-5
View File
@@ -22,11 +22,6 @@ title: 欢迎
Appium非常感谢主要合作伙伴的支持!(了解更多关于我们的赞助计划和贡献者补偿计划信息请<a
href="https://github.com/appium/appium/blob/master/GOVERNANCE.md#sponsorship">点击此处</a>)
<div class="homepageSponsors">
<div class="homepageSponsor">
<a href="https://www.headspin.io/solutions/appium-mobile-test-automation">
<img src="assets/images/sponsor-logo-headspin.png" style="width: 200px;" />
</a>
</div>
<div class="homepageSponsor">
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
<img src="assets/images/sponsor-logo-browserstack-dark.png#only-dark" style="width: 220px;" />
+2 -2
View File
@@ -81,8 +81,8 @@ Appium在[2013年谷歌测试自动化大会](https://www.youtube.com/watch?v=1J
## 通往Appium 1.0之路
Appium开始显著生长和成熟。2014年5月,我们发布了Appium 1.0,这是Appium发展的一个里程碑。Appium获得了
[各种](http://sauceio.com/index.php/2014/01/appium-selected-as-a-black-duck-open-source-rookie-of-the-year/)
[奖项](http://sauceio.com/index.php/2014/10/appium-wins-a-bossy-award-from-infoworld/),
[各种](https://www.prnewswire.com/news-releases/black-duck-announces-black-duck-open-source-rookies-of-the-year-winners-242383341.html)
[奖项](https://www.infoworld.com/article/2241247/164642-bossie-awards-2014-the-best-open-source-application-development-tools.html),
成为最受欢迎的开源跨平台移动自动化框架。稳定性得到改善,错误得到优先处理和修复,并添加了新的功能。
Sauce Labs增加了捐赠给Appium开发人员的数量,但整个社区都参与了项目的指导和贡献,
项目治理继续在公开的公共邮件列表和GitHub的问题跟踪器上进行。
@@ -2,28 +2,23 @@
hide:
- toc
title: System Requirements
title: 系统要求
---
The basic requirements for the Appium server are:
Appium服务器的基本要求是:
* A macOS, Linux, or Windows operating system
* [Node.js](https://nodejs.org) version in the [SemVer](https://semver.org) range `^14.17.0 || ^16.13.0 || >=18.0.0`
* LTS is recommended
* [`npm`](https://npmjs.com) version `>=8` (`npm` is usually bundled with Node.js, but can be upgraded
independently)
* macOS、Linux或Windows操作系统
* [Node.js](https://nodejs.org) 版本在 `^14.17.0 || ^16.13.0 || >=18.0.0` 范围内
* 推荐使用LTS版本
* [`npm`](https://npmjs.com) 版本 `>=8` (`npm` 通常与Node.js捆绑在一起,但可以独立升级)
By itself, Appium is relatively lightweight and doesn't have significant disk space or RAM
requirements. It can even be run in resource-constrained environments like Raspberry Pi, so long as
Node.js is available.
Appium本身相对轻量级,并且没有大量的磁盘空间或RAM要求。
只要Node.js可用,它甚至可以在Raspberry Pi等资源有限的环境中运行。
### Driver Requirements
### 驱动程序要求
Drivers for automating specific platforms will likely have other requirements. Refer to the
documentation of the [Appium driver(s)](../ecosystem/drivers.md) for that platform for additional
dependencies. It is almost universally the case that Appium drivers for a given platform will
require the developer toolchain and SDKs for that platform to be installed.
自动化特定平台的驱动程序可能还有其他要求。有关其他依赖关系,请参阅该平台的[Appium驱动程序](../ecosystem/drivers.md)文档。
一般情况下,给定平台的Appium驱动程序需要安装该平台的开发人员工具链和SDK。
In order to assist with driver requirements, each (official) driver comes with the Appium Doctor tool,
which allows to verify if all requirements have been set up. Learn more about how to use this tool in
the [Command-Line Usage documentation](../cli/extensions.md#doctor).
为了协助满足驱动程序的要求,每个官方驱动程序都会配备 Appium Doctor 工具,该工具用于验证当前配置是否已满足驱动程序的所有要求。
您可以在[命令行使用文档](../cli/extensions.md#doctor)中了解更多关于如何使用这个工具的信息。
@@ -2,13 +2,14 @@
hide:
- toc
title: Write a Test (.NET)
title: 编写一个测试(.NET)
---
The [Appium .NET 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/).
[Appium.NET 客户端](https://github.com/appium/dotnet-client/)是 C# 中的官方 Appium 客户端。
此驱动程序是 Selenium C# 客户端的扩展。它具有常规驱动程序的所有功能,并在此基础上添加了Appium特定的方法。
该驱动程序可在 NuGet Gallery 上以[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.
现在,我们进入该目录并创建一个新的[NUnit](https://nunit.org/)项目。我们还将添加对 Appium.NET 驱动程序的引用和其他依赖项。
```bash
cd dotnet-client
@@ -16,12 +17,12 @@ dotnet new nunit --name appiumtest
cd appiumtest
# This will install the latest 5.x version
# 这将安装最新的5.x版本
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.
完成此操作后,您的项目应该有一个占位符文件`UnitTest1.cs`。我们将替换代码,以包含OpenQA名称空间、驱动程序的初始化和实际测试。
```C# title="UnitTest1.cs"
using OpenQA.Selenium;
@@ -47,7 +48,7 @@ public class Tests
driverOptions.AddAdditionalAppiumOption("appPackage", "com.android.settings");
driverOptions.AddAdditionalAppiumOption("appActivity", ".Settings");
// NoReset assumes the app com.google.android is preinstalled on the emulator
// NoReset假设模拟器上预装了com.google.android应用程序
driverOptions.AddAdditionalAppiumOption("noReset", true);
_driver = new AndroidDriver(serverUri, driverOptions, TimeSpan.FromSeconds(180));
@@ -69,37 +70,31 @@ public class Tests
}
```
!!! 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.
本指南不包括对.NET客户端库或这里发生的一切进行完整的概述,因此我们暂时不详细解释代码本身。
除了熟悉[dotnet客户端驱动程序文档](https://github.com/appium/dotnet-client/)外,
您可能还想阅读[Appium功能](../guides/caps.md)文档,以更全面地解释您看到的各种API命令及其用途。
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.
1. 定义一组要发送到Appium服务器的“能力”(参数),以便Appium知道您想要自动化什么。其中一些参数可以使用环境变量覆盖。
1. 在内置的Android设置应用程序上启动Appium会话。
1. 找到“电池”列表项并单击它。
1. 结束Appium会话。
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:
就是这样!让我们试试。在运行测试之前,请确保您在另一个终端会话中运行了 Appium 服务器,否则您将收到无法连接到该服务器的错误。然后,您可以执行脚本:
```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](./next-steps.md) to explore.
恭喜,您已经开始了您的Appium之旅!请继续阅读,了解[下一步](./next-steps.md)要探索的内容。
+33 -38
View File
@@ -2,82 +2,77 @@
hide:
- toc
title: Write a Test (Ruby)
title: 编写一个测试(Ruby)
---
[AppiumLib](https://github.com/appium/ruby_lib) 和 [AppiumLibCore](https://github.com/appium/ruby_lib_core)(**推荐**)是 Ruby 中的官方 Appium 客户端库,
它们可以通过 gem 在 [appium_lib](https://rubygems.org/gems/appium_lib) 和 [appium_lib_core](https://rubygems.org/gems/appium_lib_core) 包名称下获得。
appium_lib_core 继承自 Selenium Ruby,appium_lib 继承自 appium_lib_core,因此安装这些库时包括 Selenium 绑定。
如果您需要不太复杂的客户端解决方案,我们建议您使用`appium_lib_core`。`appium_lib`有一些`appium_lib_core`没有的有用方法,
但代价是更高的复杂性和历史方法,这些方法可能无法在最新环境中工作。
The [AppiumLib](https://github.com/appium/ruby_lib) and the [AppiumLibCore](https://github.com/appium/ruby_lib_core) (**recommended**) are official Appium client libraries in Ruby, which are available via gem under the [appium_lib](https://rubygems.org/gems/appium_lib) and the [appium_lib_core](https://rubygems.org/gems/appium_lib_core) package names. The appium_lib_core inherits from the Selenium Ruby Binding, and the appium_lib inherits from the appium_lib_core, so installing these libraries include the selenium binding. We recommend `appium_lib_core` if you need a less complex client-side solution. The `appium_lib` has some useful methods the core does not have, but for the cost of greater complexity and historical methods which may not work in the latest environment.
As the first step, let's initialize a Gemfile to manage the dependency:
第一步,让我们初始化Gemfile来管理依赖项:
```bash
bundle init
```
Then, you could add Appium Ruby Client dependency as below:
然后,您可以添加Appium Ruby客户端依赖项,如下所示:
```bash
bundle add appium_lib_core
# or
# 或
# bundle add appium_lib
```
Test code example below uses `test-unit` module, thus please run:
下面的测试代码示例使用`test-unit`模块,因此请运行:
```bash
bundle add test-unit
```
Once these steps has done, your `Gemfile` file should include:
完成这些步骤后,您的`Gemfile`文件应该包括:
```ruby title="Gemfile"
--8<-- "./sample-code/quickstarts/rb/Gemfile"
```
The `appium_lib_core` is the main part as an Appium client.
`appium_lib` has various helper methods, but the driver instance was ordinary designed to be used as a global variable. It could causes an issue to handle the instance.
`appium_lib_core` does not have such a global variable.
`appium_lib_core`是 appium 客户端的主要部分。`appium_lib`有各种辅助方法,但驱动程序实例通常被设计为全局变量。
这可能会导致处理实例时出现问题。`appiumlib_core`中没有这样的全局变量。
This example is by the `appium_lib_core` with `test-unit` gem module.
Tes code in `appium_lib` should be similar.
这个例子使用了`appium_lib_core`和`test-unit`gem 模块。使用`appium_lib`的代码应该类似。
```ruby title="test.rb"
--8<-- "./sample-code/quickstarts/rb/test.rb"
```
!!! note
!!! 注意
It's not within the scope of this guide to give a complete run-down on the Ruby client
library or everything that's happening here, so we'll leave the code itself unexplained in detail for now.
本指南不包括对Ruby客户端库或这里发生的一切进行完整的概述,因此我们暂时不详细解释代码本身。
- 您可能想特别了解[Appium功能](../guides/caps.md)。
- 在 appium_lib_core 的 GitHub 仓库中,[功能测试代码](https://github.com/appium/ruby_lib_core/tree/master/test/functional)里可以找到更多的示例。
- 在[appium_lib_core](https://www.rubydoc.info/github/appium/ruby_lib_core) 和 [appium_lib](https://www.rubydoc.info/github/appium/ruby_lib) 的文档中也可以帮你找到可用的方法。
!!! 注意
- You may want to read up particularly on Appium [Capabilities](../guides/caps.md).
- [functional test code](https://github.com/appium/ruby_lib_core/tree/master/test/functional) in the appium_lib_core GitHub repository should help to find more working example.
- Documentation [appium_lib_core](https://www.rubydoc.info/github/appium/ruby_lib_core) and [appium_lib](https://www.rubydoc.info/github/appium/ruby_lib) also helps to find available methods.
示例代码可从[GitHub Appium存储库](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/rb)获得。
!!! note
基本上,这段代码正在执行以下操作:
The sample code is available from [GitHub Appium repository](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/rb).
1. 定义一组要发送到Appium服务器的“能力”(参数),以便Appium知道您想要自动化什么。
1. 在内置的Android设置应用程序上启动Appium会话。
1. 找到“电池”列表项并单击它。
1. 暂停片刻,纯粹是为了视觉效果。
1. 结束Appium会话。
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.
1. Starting an Appium session on the built-in Android settings app.
1. Finding the "Battery" list item and clicking it.
1. Pausing for a moment purely for visual effect.
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:
就是这样!让我们试试。在运行测试之前,请确保您在另一个终端会话中运行了 Appium 服务器,否则您将收到无法连接到该服务器的错误。然后,您可以执行脚本:
```bash
# Please run "bundle install" first if your environment has not run the installation command yet.
# 如果您的环境尚未运行安装命令,请首先运行“bundle install”。
bundle exec ruby test.rb
```
If all goes well, you'll see the Settings app open up and navigate to the "Battery" view before the
app closes again.
如果一切顺利,您会看到“设置”应用程序打开,并导航到“电池”视图,然后应用程序关闭。
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
恭喜,您已经开始了您的Appium之旅!请继续阅读,了解[下一步](./next-steps.md)要探索的内容。
+34 -2
View File
@@ -15,11 +15,19 @@ import {
promoteAppiumOptionsForObject,
} from '@appium/base-driver';
import AsyncLock from 'async-lock';
import {parseCapsForInnerDriver, pullSettings, makeNonW3cCapsError} from './utils';
import {
parseCapsForInnerDriver,
pullSettings,
makeNonW3cCapsError,
isBroadcastIp,
fetchInterfaces,
V4_BROADCAST_IP,
} from './utils';
import {util, node, logger} from '@appium/support';
import {getDefaultsForExtension} from './schema';
import {DRIVER_TYPE, BIDI_BASE_PATH, BIDI_EVENT_NAME} from './constants';
import WebSocket from 'ws';
import os from 'node:os';
const MIN_WS_CODE_VAL = 1000;
const MAX_WS_CODE_VAL = 1015;
@@ -774,7 +782,12 @@ class AppiumDriver extends DriverCore {
if (dCaps.webSocketUrl && driverInstance.doesSupportBidi) {
const {address, port, basePath} = this.args;
const scheme = `ws${this.server.isSecure() ? 's' : ''}`;
const bidiUrl = `${scheme}://${address}:${port}${basePath}${BIDI_BASE_PATH}/${innerSessionId}`;
const host = determineBiDiHost(address);
const bidiUrl = `${scheme}://${host}:${port}${basePath}${BIDI_BASE_PATH}/${innerSessionId}`;
this.log.info(
`Upstream driver responded with webSocketUrl ${dCaps.webSocketUrl}, will rewrite to ` +
`${bidiUrl} for response to client`
);
// @ts-ignore webSocketUrl gets sent by the client as a boolean, but then it is supposed
// to come back from the server as a string. TODO figure out how to express this in our
// capability constraint system
@@ -1270,6 +1283,25 @@ function isAppiumDriverCommand(cmd) {
return !isSessionCommand(cmd) || cmd === DELETE_SESSION_COMMAND;
}
/**
* Clients cannot use broadcast addresses, like 0.0.0.0 or ::
* to create connections. Thus we prefer a hostname if such
* address is provided or the actual address of a non-local interface,
* in case the host only has one such interface.
*
* @param {string} address
* @returns {string}
*/
function determineBiDiHost(address) {
if (!isBroadcastIp(address)) {
return address;
}
const nonLocalInterfaces = fetchInterfaces(address === V4_BROADCAST_IP ? 4 : 6)
.filter((iface) => !iface.internal);
return nonLocalInterfaces.length === 1 ? nonLocalInterfaces[0].address : os.hostname();
}
/**
* Thrown when Appium tried to proxy a command using a driver's `proxyCommand` method but the
* method did not exist
+2 -2
View File
@@ -39,8 +39,8 @@ import {
isServerCommandArgs,
fetchInterfaces,
V4_BROADCAST_IP,
V6_BROADCAST_IP,
isSetupCommandArgs,
isBroadcastIp,
} from './utils';
import net from 'node:net';
@@ -321,7 +321,7 @@ async function init(args) {
function logServerAddress(url) {
const urlObj = new URL(url);
logger.info(`Appium REST http interface listener started on ${url}`);
if (![V4_BROADCAST_IP, V6_BROADCAST_IP, `[${V6_BROADCAST_IP}]`].includes(urlObj.hostname)) {
if (!isBroadcastIp(urlObj.hostname)) {
return;
}
+16 -16
View File
@@ -40,7 +40,7 @@ export function makeNonW3cCapsError() {
*
* @todo May want to force color to be `false` if {@link isStdoutTTY} is `false`.
*/
const inspect = _.flow(
export const inspect = _.flow(
_.partialRight(
/** @type {(object: any, options: import('util').InspectOptions) => string} */ (dump),
{colors: true, depth: null, compact: !isStdoutTTY}
@@ -62,7 +62,7 @@ const inspect = _.flow(
* @param {NSCapabilities<C>} [defaultCapabilities]
* @returns {ParsedDriverCaps<C,J>|InvalidCaps<C,J>}
*/
function parseCapsForInnerDriver(
export function parseCapsForInnerDriver(
jsonwpCapabilities,
w3cCapabilities,
constraints = /** @type {C} */ ({}),
@@ -182,7 +182,7 @@ function parseCapsForInnerDriver(
* @param {Capabilities<C>} caps - Desired capabilities object
* @returns {NSCapabilities<C>}
*/
function insertAppiumPrefixes(caps) {
export function insertAppiumPrefixes(caps) {
return /** @type {NSCapabilities<C>} */ (
_.mapKeys(caps, (_, key) =>
STANDARD_CAPS_LOWERCASE.has(key.toLowerCase()) || key.includes(':')
@@ -197,7 +197,7 @@ function insertAppiumPrefixes(caps) {
* @param {NSCapabilities<C>} caps
* @returns {Capabilities<C>}
*/
function removeAppiumPrefixes(caps) {
export function removeAppiumPrefixes(caps) {
return /** @type {Capabilities<C>} */ (_.mapKeys(caps, (_, key) => removeAppiumPrefix(key)));
}
@@ -215,7 +215,7 @@ function removeAppiumPrefix(key) {
* @param {string} pkgName
* @returns {string|undefined}
*/
function getPackageVersion(pkgName) {
export function getPackageVersion(pkgName) {
const pkgInfo = require(`${pkgName}/package.json`) || {};
return pkgInfo.version;
}
@@ -227,7 +227,7 @@ function getPackageVersion(pkgName) {
* for more details.
* @returns {void}
*/
function adjustNodePath() {
export function adjustNodePath() {
const selfRoot = node.getModuleRootSync('appium', __filename);
if (!selfRoot || path.dirname(selfRoot).length >= selfRoot.length) {
return;
@@ -297,7 +297,7 @@ function adjustNodePath() {
* setting items or a dictionary containing parsed Appium setting names along with
* their values.
*/
function pullSettings(caps) {
export function pullSettings(caps) {
if (!_.isPlainObject(caps) || _.isEmpty(caps)) {
return {};
}
@@ -447,15 +447,15 @@ export function adler32(str, seed = null) {
return ((b % 65521) << 16) | (a % 65521);
}
export {
inspect,
parseCapsForInnerDriver,
insertAppiumPrefixes,
getPackageVersion,
pullSettings,
removeAppiumPrefixes,
adjustNodePath,
};
/**
* Checks if the provided address is a broadcast one.
*
* @param {string} address
* @returns {boolean}
*/
export function isBroadcastIp(address) {
return [V4_BROADCAST_IP, V6_BROADCAST_IP, `[${V6_BROADCAST_IP}]`].includes(address);
}
/**
* @typedef {import('@appium/types').StringRecord} StringRecord
+10 -9
View File
@@ -1,6 +1,6 @@
{
"name": "appium",
"version": "2.11.4",
"version": "2.12.0",
"description": "Automation for Apps.",
"keywords": [
"automation",
@@ -51,6 +51,7 @@
"dev:docs:en": "appium-docs build --serve --mkdocs-yml ./docs/mkdocs-en.yml",
"dev:docs:ja": "appium-docs build --serve --mkdocs-yml ./docs/mkdocs-ja.yml",
"dev:docs:zh": "appium-docs build --serve --mkdocs-yml ./docs/mkdocs-zh.yml",
"install-docs-deps": "appium-docs init --no-mkdocs",
"postinstall": "node ./scripts/autoinstall-extensions.js",
"publish:docs": "cross-env APPIUM_DOCS_PUBLISH=1 npm run build:docs",
"test": "npm run test:unit",
@@ -59,13 +60,13 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-driver": "^9.11.4",
"@appium/base-plugin": "^2.2.44",
"@appium/docutils": "^1.0.20",
"@appium/base-driver": "^9.12.0",
"@appium/base-plugin": "^2.2.46",
"@appium/docutils": "^1.0.22",
"@appium/logger": "^1.6.1",
"@appium/schema": "^0.6.1",
"@appium/support": "^5.1.4",
"@appium/types": "^0.21.3",
"@appium/schema": "^0.7.0",
"@appium/support": "^5.1.5",
"@appium/types": "^0.22.0",
"@sidvind/better-ajv-errors": "3.0.1",
"@types/argparse": "2.0.16",
"@types/bluebird": "3.5.42",
@@ -90,10 +91,10 @@
"source-map-support": "0.5.21",
"teen_process": "2.2.0",
"type-fest": "4.26.1",
"winston": "3.14.2",
"winston": "3.15.0",
"wrap-ansi": "7.0.0",
"ws": "8.18.0",
"yaml": "2.5.1"
"yaml": "2.6.0"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -1,5 +1,5 @@
{
"devDependencies": {
"webdriverio": "8.40.5"
"webdriverio": "8.40.6"
}
}
+1
View File
@@ -19,6 +19,7 @@ export default {
port: 4723,
relaxedSecurityEnabled: false,
sessionOverride: false,
shutdownTimeout: 5000,
strictCaps: false,
useDrivers: [],
usePlugins: []
+27
View File
@@ -3,6 +3,33 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [9.12.0](https://github.com/appium/appium/compare/@appium/base-driver@9.11.5...@appium/base-driver@9.12.0) (2024-10-15)
### Features
* **appium:** Make server graceful shutdown timeout configurable via command line args ([#20641](https://github.com/appium/appium/issues/20641)) ([5661888](https://github.com/appium/appium/commit/56618886ed007df3c28ce98beb4ff91bc47da2a2))
### Bug Fixes
* **base-driver:** update dependency express to v4.21.1 ([0e52da4](https://github.com/appium/appium/commit/0e52da4b3adbd5ecde09395063255c3af7eb0400))
* **base-driver:** update dependency path-to-regexp to v8.2.0 ([e8886ae](https://github.com/appium/appium/commit/e8886ae0d276ac4f97a1bdb88998fc30fbd936fa))
* **driver-test-support:** update dependency @types/lodash to v4.17.10 ([a2b0ba8](https://github.com/appium/appium/commit/a2b0ba877310737f1ebf7ecda0b9aa5d7083e1f4))
* **types:** update dependency @types/express to v5 ([#20620](https://github.com/appium/appium/issues/20620)) ([69e9abe](https://github.com/appium/appium/commit/69e9abeed3ac5a2f61d8b7f1cd4ec4bd9c054cf1))
## [9.11.5](https://github.com/appium/appium/compare/@appium/base-driver@9.11.4...@appium/base-driver@9.11.5) (2024-09-26)
### Bug Fixes
* **appium:** Return hostname as web socket url for BiDi if a broadcast address is assigned to the server ([#20603](https://github.com/appium/appium/issues/20603)) ([f0de55d](https://github.com/appium/appium/commit/f0de55da0da2fc0305876a948704c1f0a2a5990f))
* **driver-test-support:** update definitelytyped ([#20605](https://github.com/appium/appium/issues/20605)) ([da7a4fd](https://github.com/appium/appium/commit/da7a4fdce8790bc59370bfe4b912c7c0c403c713))
## [9.11.4](https://github.com/appium/appium/compare/@appium/base-driver@9.11.3...@appium/base-driver@9.11.4) (2024-09-16)
+14 -8
View File
@@ -31,7 +31,6 @@ import {DEFAULT_BASE_PATH} from '../constants';
import {fs, timing} from '@appium/support';
const KEEP_ALIVE_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
const SERVER_CLOSE_TIMEOUT_MS = 5000;
/**
*
@@ -82,7 +81,7 @@ async function server(opts) {
routeConfiguringFunction,
port,
hostname,
cliArgs = {},
cliArgs = /** @type {import('@appium/types').ServerArgs} */ ({}),
allowCors = true,
basePath = DEFAULT_BASE_PATH,
extraMethodMap = {},
@@ -104,6 +103,7 @@ async function server(opts) {
httpServer,
reject,
keepAliveTimeout,
gracefulShutdownTimeout: cliArgs.shutdownTimeout,
});
configureServer({
app,
@@ -191,7 +191,7 @@ function configureServer({
* @param {ConfigureHttpOpts} opts
* @returns {AppiumServer}
*/
function configureHttp({httpServer, reject, keepAliveTimeout}) {
function configureHttp({httpServer, reject, keepAliveTimeout, gracefulShutdownTimeout}) {
/**
* @type {AppiumServer}
*/
@@ -214,12 +214,15 @@ function configureHttp({httpServer, reject, keepAliveTimeout}) {
log.info('Closing Appium HTTP server');
const timer = new timing.Timer().start();
const onTimeout = setTimeout(() => {
log.info(
`Not all active connections have been closed within ` +
`${timer.getDuration().asMilliSeconds.toFixed(0)}ms. Exiting anyway.`
);
if (gracefulShutdownTimeout > 0) {
log.info(
`Not all active connections have been closed within ${gracefulShutdownTimeout}ms. ` +
`This timeout might be customized by the --shutdown-timeout command line ` +
`argument. Closing the server anyway.`
);
}
process.exit(process.exitCode ?? 0);
}, SERVER_CLOSE_TIMEOUT_MS);
}, gracefulShutdownTimeout);
httpServer.once('close', () => {
log.info(
`Appium HTTP server has been succesfully closed after ` +
@@ -323,6 +326,9 @@ export {server, configureServer, normalizeBasePath};
* @property {import('http').Server} httpServer - HTTP server instance
* @property {(error?: any) => void} reject - Rejection function from `Promise` constructor
* @property {number} keepAliveTimeout - Keep-alive timeout in milliseconds
* @property {number} gracefulShutdownTimeout - For how long the server should delay its
* shutdown before force-closing all open connections to it. Providing zero will force-close
* the server without waiting for any connections.
*/
/**
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/base-driver",
"version": "9.11.4",
"version": "9.12.0",
"description": "Base driver class for Appium drivers",
"keywords": [
"automation",
@@ -44,13 +44,13 @@
"test:types": "tsd"
},
"dependencies": {
"@appium/support": "^5.1.4",
"@appium/types": "^0.21.3",
"@appium/support": "^5.1.5",
"@appium/types": "^0.22.0",
"@colors/colors": "1.6.0",
"@types/async-lock": "1.4.2",
"@types/bluebird": "3.5.42",
"@types/express": "4.17.21",
"@types/lodash": "4.17.7",
"@types/express": "5.0.0",
"@types/lodash": "4.17.10",
"@types/method-override": "0.0.35",
"@types/serve-favicon": "2.5.7",
"async-lock": "1.4.1",
@@ -58,13 +58,13 @@
"axios": "1.7.7",
"bluebird": "3.7.2",
"body-parser": "1.20.3",
"express": "4.21.0",
"express": "4.21.1",
"http-status-codes": "2.3.0",
"lodash": "4.17.21",
"lru-cache": "10.4.3",
"method-override": "3.0.0",
"morgan": "1.10.0",
"path-to-regexp": "8.1.0",
"path-to-regexp": "8.2.0",
"serve-favicon": "2.5.0",
"source-map-support": "0.5.21",
"type-fest": "4.26.1",
@@ -46,10 +46,9 @@ describe('Websockets (e2e)', function () {
_.keys(await baseServer.getWebSocketHandlers()).length.should.eql(1);
await new B((resolve, reject) => {
const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
client.once('connection', (ws, req) => {
client.once('upgrade', (res) => {
try {
ws.should.not.be.empty;
req.connection.remoteAddress.should.not.be.empty;
res.statusCode.should.eql(101);
} catch (e) {
reject(e);
}
+16
View File
@@ -3,6 +3,22 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.2.46](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.45...@appium/base-plugin@2.2.46) (2024-10-15)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.45](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.44...@appium/base-plugin@2.2.45) (2024-09-26)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.44](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.43...@appium/base-plugin@2.2.44) (2024-09-16)
**Note:** Version bump only for package @appium/base-plugin
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/base-plugin",
"version": "2.2.44",
"version": "2.2.46",
"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.11.4",
"@appium/support": "^5.1.4"
"@appium/base-driver": "^9.12.0",
"@appium/support": "^5.1.5"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
+8
View File
@@ -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.
## [2.1.12](https://github.com/appium/appium/compare/@appium/doctor@2.1.11...@appium/doctor@2.1.12) (2024-10-15)
**Note:** Version bump only for package @appium/doctor
## [2.1.11](https://github.com/appium/appium/compare/@appium/doctor@2.1.10...@appium/doctor@2.1.11) (2024-09-16)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/doctor",
"version": "2.1.11",
"version": "2.1.12",
"description": "Test environment for fitness to run Appium",
"keywords": [
"automation",
@@ -44,7 +44,7 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/support": "^5.1.4",
"@appium/support": "^5.1.5",
"@colors/colors": "1.6.0",
"@types/bluebird": "3.5.42",
"@types/teen_process": "2.0.4",
+20
View File
@@ -3,6 +3,26 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.0.22](https://github.com/appium/appium/compare/@appium/docutils@1.0.21...@appium/docutils@1.0.22) (2024-10-15)
### Bug Fixes
* **docutils:** support Python 3.12+ ([#20666](https://github.com/appium/appium/issues/20666)) ([8d7cec9](https://github.com/appium/appium/commit/8d7cec96d8df60644493a7e2f735b4bb0d3783be))
* **docutils:** update dependency typescript to v5.6.3 ([dd52d04](https://github.com/appium/appium/commit/dd52d04b21c37d7a4a979d00e96293dc0bf69768))
* **docutils:** update dependency yaml to v2.6.0 ([ed6c6dd](https://github.com/appium/appium/commit/ed6c6dd5441e26fc1eb58de9b78def49d930a128))
## [1.0.21](https://github.com/appium/appium/compare/@appium/docutils@1.0.20...@appium/docutils@1.0.21) (2024-09-26)
### Bug Fixes
* **docutils:** update dependency typescript to v5.6.2 ([#20556](https://github.com/appium/appium/issues/20556)) ([e65c1cd](https://github.com/appium/appium/commit/e65c1cdaeddfc427d76bf522aa8a3f69c18a8f8c))
## [1.0.20](https://github.com/appium/appium/compare/@appium/docutils@1.0.19...@appium/docutils@1.0.20) (2024-09-16)
+4 -2
View File
@@ -167,10 +167,12 @@ export function safeWriteFile(filepath: string, content: JsonValue, overwrite =
});
}
type WhichFunction = (cmd: string, opts?: {nothrow: boolean}) => Promise<string|null>;
/**
* `which` with memoization
*/
const cachedWhich = _.memoize(fs.which as typeof import('which'));
const cachedWhich = _.memoize(fs.which as WhichFunction);
/**
* Finds `npm` executable
@@ -220,7 +222,7 @@ export const findMike = _.partial(async () => {
* `python3` is preferred over `python`, since the latter could be Python 2.
*/
export const findPython = _.memoize(
async (): Promise<string | undefined> => (await whichPython3()) ?? (await whichPython()),
async (): Promise<string | null> => (await whichPython3()) ?? (await whichPython()),
);
/**
+1 -1
View File
@@ -141,7 +141,7 @@ export async function initPython({
}: InitPythonOptions = {}): Promise<void> {
pythonPath = pythonPath ?? (await findPython()) ?? NAME_PYTHON;
const args = ['-m', 'pip', 'install', '-r', REQUIREMENTS_TXT_PATH];
const args = ['-m', 'pip', 'install', '-r', REQUIREMENTS_TXT_PATH, '--break-system-packages'];
if (upgrade) {
args.push('--upgrade');
}
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/docutils",
"version": "1.0.20",
"version": "1.0.22",
"description": "Documentation generation utilities for Appium and related projects",
"keywords": [
"automation",
@@ -48,7 +48,7 @@
"start": "node ./build/lib/cli/index.js"
},
"dependencies": {
"@appium/support": "^5.1.4",
"@appium/support": "^5.1.5",
"@appium/tsconfig": "^0.3.3",
"@sliphua/lilconfig-ts-loader": "3.2.2",
"@types/which": "3.0.4",
@@ -64,8 +64,8 @@
"source-map-support": "0.5.21",
"teen_process": "2.2.0",
"type-fest": "4.26.1",
"typescript": "5.5.4",
"yaml": "2.5.1",
"typescript": "5.6.3",
"yaml": "2.6.0",
"yargs": "17.7.2",
"yargs-parser": "21.1.1"
},
+1 -1
View File
@@ -1,5 +1,5 @@
mkdocs==1.6.1
mkdocs-git-revision-date-localized-plugin==1.2.9
mkdocs-material==9.5.34
mkdocs-material==9.5.40
mkdocs-redirects==1.2.1
mike==2.1.3
+19
View File
@@ -3,6 +3,25 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.6.10](https://github.com/appium/appium/compare/@appium/driver-test-support@0.6.9...@appium/driver-test-support@0.6.10) (2024-10-15)
### Bug Fixes
* **driver-test-support:** update dependency @types/lodash to v4.17.10 ([a2b0ba8](https://github.com/appium/appium/commit/a2b0ba877310737f1ebf7ecda0b9aa5d7083e1f4))
## [0.6.9](https://github.com/appium/appium/compare/@appium/driver-test-support@0.6.8...@appium/driver-test-support@0.6.9) (2024-09-26)
### Bug Fixes
* **driver-test-support:** update definitelytyped ([#20605](https://github.com/appium/appium/issues/20605)) ([da7a4fd](https://github.com/appium/appium/commit/da7a4fdce8790bc59370bfe4b912c7c0c403c713))
* **test-support:** update dependency sinon to v19 ([#20576](https://github.com/appium/appium/issues/20576)) ([6a8f26a](https://github.com/appium/appium/commit/6a8f26a9cbf01a7c9181c90bb999d332a343d94d))
## [0.6.8](https://github.com/appium/appium/compare/@appium/driver-test-support@0.6.7...@appium/driver-test-support@0.6.8) (2024-09-16)
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/driver-test-support",
"version": "0.6.8",
"version": "0.6.10",
"description": "Test utilities for Appium drivers",
"keywords": [
"automation",
@@ -41,8 +41,8 @@
},
"types": "./build/lib/index.d.ts",
"dependencies": {
"@appium/types": "^0.21.3",
"@types/lodash": "4.17.7",
"@appium/types": "^0.22.0",
"@types/lodash": "4.17.10",
"@types/stoppable": "1.1.3",
"axios": "1.7.7",
"bluebird": "3.7.2",
@@ -50,7 +50,7 @@
"chai-as-promised": "8.0.0",
"get-port": "5.1.1",
"lodash": "4.17.21",
"sinon": "18.0.1",
"sinon": "19.0.2",
"source-map-support": "0.5.21",
"stoppable": "1.1.0",
"type-fest": "4.26.1"
@@ -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.
## [3.0.36](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.35...@appium/execute-driver-plugin@3.0.36) (2024-10-15)
### Bug Fixes
* **execute-driver-plugin:** update dependency webdriverio to v8.40.6 ([796ca9f](https://github.com/appium/appium/commit/796ca9f98f69616b9c890325bbfb0c573a8bc765))
## [3.0.35](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.34...@appium/execute-driver-plugin@3.0.35) (2024-09-26)
### Bug Fixes
* **execute-driver-plugin:** replace vm2 with Node's built-in vm ([#20594](https://github.com/appium/appium/issues/20594)) ([5553016](https://github.com/appium/appium/commit/5553016582225de1a1166172d83e2fd2864c138d))
## [3.0.34](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.33...@appium/execute-driver-plugin@3.0.34) (2024-09-16)
@@ -1,6 +1,6 @@
import _ from 'lodash';
import B from 'bluebird';
import {NodeVM} from 'vm2';
import vm from 'node:vm';
import {logger, util} from 'appium/support';
const log = logger.getLogger('ExecuteDriver Child');
@@ -42,36 +42,23 @@ async function runScript(eventParams) {
const driver = await attach(driverOpts);
const fullScript = buildScript(script);
const fullScript = `(async () => {${script}})();`;
log.info('Running driver script in Node vm');
const vmCtx = new NodeVM({timeout: timeoutMs});
const vmFn = vmCtx.run(fullScript);
// run the driver script, giving user access to the driver object, a fake
// console logger, and a promise library
let result = await vmFn(driver, consoleFns, B);
let result = await vm.runInNewContext(
fullScript,
{driver, console: consoleFns, Promise: B},
{timeout: timeoutMs, breakOnSigint: true},
);
result = coerceScriptResult(result);
log.info('Successfully ensured driver script result is appropriate type for return');
return {result, logs};
}
/**
* Embed a user-generated script inside a method which takes only the
* predetermined objects we specify
*
* @param {string} script - the javascript to execute
*
* @return {string} - the full script to execute
*/
function buildScript(script) {
return `module.exports = async function execute (driver, console, Promise) {
${script}
}`;
}
/**
* We can get any manner of crazy thing back from a vm executing untrusted
* code. We might also get WebdriverIO objects that aren't suitable for JSON
+2 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/execute-driver-plugin",
"version": "3.0.34",
"version": "3.0.36",
"description": "Plugin for batching and executing driver commands with Appiums",
"keywords": [
"automation",
@@ -42,8 +42,7 @@
"bluebird": "3.7.2",
"lodash": "4.17.21",
"source-map-support": "0.5.21",
"vm2": "3.9.19",
"webdriverio": "8.40.5"
"webdriverio": "8.40.6"
},
"peerDependencies": {
"appium": "^2.0.0-beta.35"
+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.
## [5.5.5](https://github.com/appium/appium/compare/@appium/fake-driver@5.5.4...@appium/fake-driver@5.5.5) (2024-10-15)
### Bug Fixes
* **universal-xml-plugin:** update dependency @xmldom/xmldom to v0.9.4 ([#20663](https://github.com/appium/appium/issues/20663)) ([b56b180](https://github.com/appium/appium/commit/b56b180f3465d14e36b2bb8e7fa831954e0fc4c6))
## [5.5.4](https://github.com/appium/appium/compare/@appium/fake-driver@5.5.3...@appium/fake-driver@5.5.4) (2024-09-26)
### Bug Fixes
* **universal-xml-plugin:** update dependency @xmldom/xmldom to v0.9.3 ([#20599](https://github.com/appium/appium/issues/20599)) ([f344504](https://github.com/appium/appium/commit/f344504f15a08eb1f92f2d742f32d3f48f494e02))
## [5.5.3](https://github.com/appium/appium/compare/@appium/fake-driver@5.5.2...@appium/fake-driver@5.5.3) (2024-09-16)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/fake-driver",
"version": "5.5.3",
"version": "5.5.5",
"description": "Mock driver used internally by Appium for testing. Ignore",
"keywords": [
"automation",
@@ -43,7 +43,7 @@
},
"dependencies": {
"@types/bluebird": "3.5.42",
"@xmldom/xmldom": "0.9.2",
"@xmldom/xmldom": "0.9.4",
"asyncbox": "3.0.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
+16
View File
@@ -3,6 +3,22 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.1.50](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.49...@appium/fake-plugin@3.1.50) (2024-10-15)
**Note:** Version bump only for package @appium/fake-plugin
## [3.1.49](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.48...@appium/fake-plugin@3.1.49) (2024-09-26)
**Note:** Version bump only for package @appium/fake-plugin
## [3.1.48](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.47...@appium/fake-plugin@3.1.48) (2024-09-16)
**Note:** Version bump only for package @appium/fake-plugin
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/fake-plugin",
"version": "3.1.48",
"version": "3.1.50",
"description": "A fake Appium 2.0 plugin",
"keywords": [
"automation",
@@ -39,8 +39,8 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-plugin": "^2.2.44",
"@appium/support": "^5.1.4",
"@appium/base-plugin": "^2.2.46",
"@appium/support": "^5.1.5",
"@types/bluebird": "3.5.42",
"bluebird": "3.7.2",
"lodash": "4.17.21",
+8
View File
@@ -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.
## [3.0.20](https://github.com/appium/appium/compare/@appium/images-plugin@3.0.19...@appium/images-plugin@3.0.20) (2024-10-15)
**Note:** Version bump only for package @appium/images-plugin
## [3.0.19](https://github.com/appium/appium/compare/@appium/images-plugin@3.0.18...@appium/images-plugin@3.0.19) (2024-09-16)
**Note:** Version bump only for package @appium/images-plugin
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/images-plugin",
"version": "3.0.19",
"version": "3.0.20",
"description": "Plugin for working with images and image elements in Appium",
"keywords": [
"automation",
@@ -40,7 +40,7 @@
},
"dependencies": {
"@appium/opencv": "^3.0.6",
"@appium/support": "^5.1.4",
"@appium/support": "^5.1.5",
"lodash": "4.17.21",
"lru-cache": "10.4.3",
"sharp": "0.33.5",
@@ -4,6 +4,11 @@ describe('Log Internals', function () {
/** @type {import('../../lib/secure-values-prepreocessor').SecureValuesPreprocessor} */
let preprocessor;
before(async function () {
const chai = await import('chai');
chai.should();
});
beforeEach(function () {
preprocessor = new SecureValuesPreprocessor();
});
@@ -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.43](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.42...@appium/plugin-test-support@0.3.43) (2024-10-15)
**Note:** Version bump only for package @appium/plugin-test-support
## [0.3.42](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.41...@appium/plugin-test-support@0.3.42) (2024-09-16)
**Note:** Version bump only for package @appium/plugin-test-support
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/plugin-test-support",
"version": "0.3.42",
"version": "0.3.43",
"description": "Testing utilities for Appium plugins",
"keywords": [
"automation",
@@ -41,7 +41,7 @@
"test:unit": "exit 0"
},
"dependencies": {
"@appium/types": "^0.21.3",
"@appium/types": "^0.22.0",
"get-port": "5.1.1",
"log-symbols": "4.1.0",
"source-map-support": "0.5.21",
+9
View File
@@ -3,6 +3,15 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.7.0](https://github.com/appium/appium/compare/@appium/schema@0.6.1...@appium/schema@0.7.0) (2024-10-15)
### Features
* **appium:** Make server graceful shutdown timeout configurable via command line args ([#20641](https://github.com/appium/appium/issues/20641)) ([5661888](https://github.com/appium/appium/commit/56618886ed007df3c28ce98beb4ff91bc47da2a2))
## [0.6.1](https://github.com/appium/appium/compare/@appium/schema@0.6.0...@appium/schema@0.6.1) (2024-06-11)
+22 -14
View File
@@ -249,12 +249,34 @@ export const AppiumConfigJsonSchema = /** @type {const} */ ({
type: 'boolean',
appiumCliDest: 'relaxedSecurityEnabled',
},
'shutdown-timeout': {
default: 5000,
description: 'For how long the server should delay its shutdown before force-closing all open connections to it. ' +
'Setting its value to zero should close the server without waiting for active connections.',
title: 'Graceful server shutdown timeout in milliseconds',
type: 'integer',
minimum: 0,
},
'session-override': {
default: false,
description: 'Enables session override (clobbering)',
title: 'session-override config',
type: 'boolean',
},
'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',
},
'strict-caps': {
default: false,
description:
@@ -310,20 +332,6 @@ 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',
+19 -12
View File
@@ -251,12 +251,31 @@
"type": "boolean",
"appiumCliDest": "relaxedSecurityEnabled"
},
"shutdown-timeout": {
"default": 5000,
"description": "For how long the server should delay its shutdown before force-closing all open connections to it. Setting its value to zero should close the server without waiting for active connections.",
"title": "Graceful server shutdown timeout in milliseconds",
"type": "integer",
"minimum": 0
},
"session-override": {
"default": false,
"description": "Enables session override (clobbering)",
"title": "session-override config",
"type": "boolean"
},
"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"
},
"strict-caps": {
"default": false,
"description": "Cause sessions to fail if desired caps are sent in that Appium does not recognize as valid for the selected device",
@@ -305,18 +324,6 @@
"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",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/schema",
"version": "0.6.1",
"version": "0.7.0",
"description": "Appium Configuration Schema",
"keywords": [
"automation",
+9
View File
@@ -3,6 +3,15 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [5.1.5](https://github.com/appium/appium/compare/@appium/support@5.1.4...@appium/support@5.1.5) (2024-10-15)
### Bug Fixes
* **support:** update dependency form-data to v4.0.1 ([0e443d2](https://github.com/appium/appium/commit/0e443d27995dcbd2b99ec18d8cb6183352d8cd59))
## [5.1.4](https://github.com/appium/appium/compare/@appium/support@5.1.3...@appium/support@5.1.4) (2024-09-16)
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/support",
"version": "5.1.4",
"version": "5.1.5",
"description": "Support libs used across appium packages",
"keywords": [
"automation",
@@ -43,7 +43,7 @@
"dependencies": {
"@appium/logger": "^1.6.1",
"@appium/tsconfig": "^0.3.3",
"@appium/types": "^0.21.3",
"@appium/types": "^0.22.0",
"@colors/colors": "1.6.0",
"@types/archiver": "6.0.2",
"@types/base64-stream": "1.0.5",
@@ -66,7 +66,7 @@
"bluebird": "3.7.2",
"bplist-creator": "0.1.1",
"bplist-parser": "0.3.2",
"form-data": "4.0.0",
"form-data": "4.0.1",
"get-stream": "6.0.1",
"glob": "10.4.5",
"jsftp": "2.1.3",
+17
View File
@@ -3,6 +3,23 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.0.50](https://github.com/appium/appium/compare/@appium/test-support@3.0.49...@appium/test-support@3.0.50) (2024-10-15)
**Note:** Version bump only for package @appium/test-support
## [3.0.49](https://github.com/appium/appium/compare/@appium/test-support@3.0.48...@appium/test-support@3.0.49) (2024-09-26)
### Bug Fixes
* **test-support:** update dependency sinon to v19 ([#20576](https://github.com/appium/appium/issues/20576)) ([6a8f26a](https://github.com/appium/appium/commit/6a8f26a9cbf01a7c9181c90bb999d332a343d94d))
## [3.0.48](https://github.com/appium/appium/compare/@appium/test-support@3.0.47...@appium/test-support@3.0.48) (2024-09-16)
-1
View File
@@ -3,6 +3,5 @@ import './unhandled-rejection';
export {stubEnv} from './env-utils';
export {stubLog} from './log-utils';
export {fakeTime} from './time-utils';
export {withMocks, verifyMocks} from './mock-utils';
export {withSandbox, verifySandbox} from './sandbox-utils';
-24
View File
@@ -1,24 +0,0 @@
/** @deprecated */
function fakeTime(sandbox) {
let clock = sandbox.useFakeTimers();
return new TimeLord(clock);
}
class TimeLord {
constructor(clock) {
this.clock = clock;
}
speedup(interval, times) {
let tick = (n) => {
if (n === 0) return; // eslint-disable-line curly
process.nextTick(() => {
this.clock.tick(interval);
n--;
tick(n);
});
};
tick(times);
}
}
export {fakeTime};
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/test-support",
"version": "3.0.48",
"version": "3.0.50",
"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": "^5.1.4",
"@appium/support": "^5.1.5",
"@colors/colors": "1.6.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
"loud-rejection": "2.2.0",
"sinon": "18.0.1",
"sinon": "19.0.2",
"source-map-support": "0.5.21"
},
"engines": {
@@ -1,38 +0,0 @@
import {fakeTime} from '../../lib';
import sinon from 'sinon';
import B from 'bluebird';
function doSomething() {
return new B.Promise((resolve) => {
let ret = '';
function appendOneByOne() {
if (ret.length >= 10) {
return resolve(ret);
}
setTimeout(() => {
ret = ret + ret.length;
appendOneByOne();
}, 1000);
}
appendOneByOne();
});
}
describe('time-utils', function () {
describe('fakeTime', function () {
let sandbox;
beforeEach(function () {
sandbox = sinon.createSandbox();
});
afterEach(function () {
sandbox.restore();
});
it('should fake time', async function () {
let timeLord = fakeTime(sandbox);
let p = doSomething();
timeLord.speedup(200, 60);
(await p).should.equals('0123456789');
});
});
});
+14
View File
@@ -3,6 +3,20 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.22.0](https://github.com/appium/appium/compare/@appium/types@0.21.3...@appium/types@0.22.0) (2024-10-15)
### Features
* **appium:** Make server graceful shutdown timeout configurable via command line args ([#20641](https://github.com/appium/appium/issues/20641)) ([5661888](https://github.com/appium/appium/commit/56618886ed007df3c28ce98beb4ff91bc47da2a2))
### Bug Fixes
* **types:** update dependency @types/express to v5 ([#20620](https://github.com/appium/appium/issues/20620)) ([69e9abe](https://github.com/appium/appium/commit/69e9abeed3ac5a2f61d8b7f1cd4ec4bd9c054cf1))
## [0.21.3](https://github.com/appium/appium/compare/@appium/types@0.21.2...@appium/types@0.21.3) (2024-09-16)
+15 -10
View File
@@ -127,10 +127,22 @@ export type PortConfig = number;
* Disable additional security checks, so it is possible to use some advanced features, provided by drivers supporting this option. Only enable it if all the clients are in the trusted network and it's not the case if a client could potentially break out of the session sandbox. Specific features can be overridden by using "deny-insecure"
*/
export type RelaxedSecurityConfig = boolean;
/**
* For how long the server should delay its shutdown before force-closing all open connections to it. Setting its value to zero should close the server without waiting for active connections.
*/
export type GracefulServerShutdownTimeoutInMilliseconds = number;
/**
* Enables session override (clobbering)
*/
export type SessionOverrideConfig = boolean;
/**
* Full path to the .cert file if TLS is used. Must be provided together with "ssl-key-path"
*/
export type CertFilePath = string;
/**
* Full path to the .key file if TLS is used. Must be provided together with "ssl-cert-path"
*/
export type KeyFilePath = string;
/**
* Cause sessions to fail if desired caps are sent in that Appium does not recognize as valid for the selected device
*/
@@ -155,14 +167,6 @@ export type UsePluginsConfig = string[];
* Also send log output to this http listener
*/
export type WebhookConfig = string;
/**
* Full path to the .cert file if TLS is used. Must be provided together with "ssl-key-path"
*/
export type CertFilePath = string;
/**
* Full path to the .key file if TLS is used. Must be provided together with "ssl-cert-path"
*/
export type KeyFilePath = string;
/**
* A schema for Appium configuration files
@@ -204,15 +208,16 @@ export interface ServerConfig {
plugin?: PluginConfig;
port?: PortConfig;
"relaxed-security"?: RelaxedSecurityConfig;
"shutdown-timeout"?: GracefulServerShutdownTimeoutInMilliseconds;
"session-override"?: SessionOverrideConfig;
"ssl-cert-path"?: CertFilePath;
"ssl-key-path"?: KeyFilePath;
"strict-caps"?: StrictCapsConfig;
tmp?: TmpConfig;
"trace-dir"?: TraceDirConfig;
"use-drivers"?: UseDriversConfig;
"use-plugins"?: UsePluginsConfig;
webhook?: WebhookConfig;
"ssl-cert-path"?: CertFilePath;
"ssl-key-path"?: KeyFilePath;
}
/**
* Set the default desired capabilities, which will be set on each session unless overridden by received capabilities. If a string, a path to a JSON file containing the capabilities, or raw JSON.
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/types",
"version": "0.21.3",
"version": "0.22.0",
"description": "Various type declarations used across Appium",
"keywords": [
"automation",
@@ -39,9 +39,9 @@
},
"dependencies": {
"@appium/logger": "^1.6.1",
"@appium/schema": "^0.6.1",
"@appium/schema": "^0.7.0",
"@appium/tsconfig": "^0.3.3",
"@types/express": "4.17.21",
"@types/express": "5.0.0",
"@types/ws": "8.5.12",
"type-fest": "4.26.1"
},
@@ -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.
## [1.0.24](https://github.com/appium/appium-plugins/compare/@appium/universal-xml-plugin@1.0.23...@appium/universal-xml-plugin@1.0.24) (2024-10-15)
### Bug Fixes
* **universal-xml-plugin:** update dependency @xmldom/xmldom to v0.9.4 ([#20663](https://github.com/appium/appium-plugins/issues/20663)) ([b56b180](https://github.com/appium/appium-plugins/commit/b56b180f3465d14e36b2bb8e7fa831954e0fc4c6))
## [1.0.23](https://github.com/appium/appium-plugins/compare/@appium/universal-xml-plugin@1.0.22...@appium/universal-xml-plugin@1.0.23) (2024-09-26)
### Bug Fixes
* **universal-xml-plugin:** update dependency @xmldom/xmldom to v0.9.3 ([#20599](https://github.com/appium/appium-plugins/issues/20599)) ([f344504](https://github.com/appium/appium-plugins/commit/f344504f15a08eb1f92f2d742f32d3f48f494e02))
## [1.0.22](https://github.com/appium/appium-plugins/compare/@appium/universal-xml-plugin@1.0.21...@appium/universal-xml-plugin@1.0.22) (2024-09-16)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/universal-xml-plugin",
"version": "1.0.22",
"version": "1.0.24",
"description": "Appium plugin for making XML source and XPath queries the same across iOS and Android",
"keywords": [
"automation",
@@ -37,7 +37,7 @@
},
"dependencies": {
"@types/xmldom": "0.1.34",
"@xmldom/xmldom": "0.9.2",
"@xmldom/xmldom": "0.9.4",
"fast-xml-parser": "4.5.0",
"lodash": "4.17.21",
"source-map-support": "0.5.21",