# Status
- 16/35 (46%)
# Description
MediaWiki Core, it's extensions and skins use WebdriverIO to drive our Selenium testing framework. All tests are written using WebdriverIO sync mode. The sync mode will be deprecated in Node.js v16. We need to move tests in MediaWiki Core, it's extensions and skins from WebdriverIO sync to async mode.
# TODO
[] Update [[ https://www.mediawiki.org/wiki/Selenium | documentation ]].
[] There should be no instances of [[ https://codesearch.wmcloud.org/search/?q=%40wdio%2Fsync | @wdio/sync ]] and [[ https://codesearch.wmcloud.org/search/?q=browser.call | browser.call() ]] in relevant repositories.
[] [[ https://webdriver.io/docs/api/browser/execute | browser.execute ]] ([[ https://codesearch.wmcloud.org/search/?q=browser.execute\( | search ]]) should be replaced with [[ https://webdriver.io/docs/api/browser/executeAsync/ | browser.executeAsync() ]].
[] Should [[ https://nodejs.org/api/fs.html#fswritefilesyncfile-data-options | fs.writeFileSync() ]] ([[ https://codesearch.wmcloud.org/search/?q=fs.writeFileSync&files=.*selenium.* | search ]]) be replaced with [[ https://nodejs.org/api/fs.html#fswritefilefile-data-options-callback | fs.writeFile() ]]?
[] revert [[ https://gerrit.wikimedia.org/r/c/integration/config/+/896026 | 896026 ]]
# Repositories
| Repository | Suites | Tests | Task | Status
|--|--|--|--|--|
| mediawiki/core | 5 | 13 | T293071 | ✅
| mediawiki/extensions/AbuseFilter | 3 | 24 | T300790
| mediawiki/extensions/AdvancedSearch | 5 | 41 | T300791
| mediawiki/extensions/CampaignEvents | | | | ✅
| mediawiki/extensions/CentralNotice | 1 | 1 | T300212 | ✅
| mediawiki/extensions/CheckUser | 2 | 2 | T321904 | ✅
| mediawiki/extensions/CirrusSearch | 1 | 3 | T300793
| mediawiki/extensions/Cite | 1 | 6 | T300196
| mediawiki/extensions/CodeMirror | 3 | 5 | T300205
| mediawiki/extensions/ContactPage | | | | ✅
| mediawiki/extensions/Echo | 2 | 5 | T293073 | ✅
| mediawiki/extensions/ElectronPdfService | 1 | 1 | T299684 | ✅
| mediawiki/extensions/EntitySchema | 5 | 17 | T300794
| mediawiki/extensions/FileImporter | 2 | 1 | T300535
| mediawiki/extensions/GlobalWatchlist | 1 | 2 | T293074 | ✅
| mediawiki/extensions/GrowthExperiments | 2 | 7 | T299102 | ✅
| mediawiki/extensions/Math | 1 | 1 | T293076 | ✅
| mediawiki/extensions/Newsletter | 1 | 1 | T293078 | ✅
| mediawiki/extensions/PageTriage | | | | ✅
| mediawiki/extensions/Popups | 2 | 7 | T293072
| mediawiki/extensions/ProofreadPage | 1 | 1 | T293079
| mediawiki/extensions/RelatedArticles | 1 | 0 | T300797 | ✅
| mediawiki/extensions/RevisionSlider | 8 | 22 | T300798
| mediawiki/extensions/TemplateWizard | 1 | 3 | T300208
| mediawiki/extensions/TwoColConflict | 7 | 46 | T300800
| mediawiki/extensions/VisualEditor | 1 | 1 | T299756 | ✅
| mediawiki/extensions/Wikibase | 16 | 37 | T293080
| mediawiki/extensions/WikibaseLexeme | 16 | 48 | T293081
| mediawiki/extensions/WikiLambda | 1 | 2 | T293082 | ✅
| mediawiki/extensions/Wikistories | | | | ✅
| mediawiki/skins/MinervaNeue | 10 | 14 | T293084
| wikibase/termbox | 4 | 25 | T300807
| wikidata/query/gui | 1 | 0 | T300808
| wikimedia/portals/deploy | 9 | 14 | T300809
| wmde/wdio-wikibase | 0 | 0 | T300811
(Number of tests estimated with `ack --count --files-with-matches ' it\('`. See P17460.)
# Notes
- [[ https://webdriver.io/docs/sync-vs-async/ | Sync vs. Async Mode ]]
- [[ https://github.com/webdriverio/codemod | WebdriverIO Codemod ]]
- [[ https://webdriver.io/blog/2021/07/28/sync-api-deprecation/ | Sync API Deprecation ]]
- [[ https://github.com/webdriverio/webdriverio/discussions/6702 | RFC Replacement for Node-Fibers ]]
- Repositories with Selenium tests: https://www.mediawiki.org/wiki/Selenium/Reference/Example_Code
- Project on Outreachy: https://www.outreachy.org/outreachy-december-2021-internship-round/communities/wikimedia/#refactor-mediawiki-tests-to-use-webdriverio-async
- [[ https://www.sitepoint.com/javascript-async-await/ | A Beginner’s Guide to JavaScript async/await, with Examples ]]