# WebdriverIO > Next-gen browser and mobile automation test framework for Node.js ## community ### donate If your company uses WebdriverIO and benefits from it, please ask your manager or your marketing team to support the project by donating to the collective. Support will allow the maintainers to dedicate more time for maintenance and new features for everyone. - [Donate](/community/donate.md): If your company uses WebdriverIO and benefits from it, please ask your manager or your marketing team to support the project by donating to the collective. Support will allow the maintainers to dedicate more time for maintenance and new features for everyone. ### events The WebdriverIO community organizes events around the world. The project is completely community driven and we encourage and support everyone who likes to host and run WebdriverIO meetups and events. - [WebdriverIO Events](/community/events.md): The WebdriverIO community organizes events around the world. The project is completely community driven and we encourage and support everyone who likes to host and run WebdriverIO meetups and events. - [WebdriverIO Days at Technical Test Experts Nederland group](/community/events/2024-04-10-technical-testers.md): WebdriverIO Days at Technical Test Experts Nederland group - [Empowering Enterprise Testing: WebdriverIO Meets wdi5 Meets UI5 for Cross-Platform Excellence](/community/events/2024-04-11-webdriverio-meets-wdi5-meets-ui5.md): Empowering Enterprise Testing: WebdriverIO Meets wdi5 Meets UI5 for Cross-Platform Excellence - [WebDriverIO X BrowserStack London Meetup](/community/events/2024-04-16-webdriverio-x-browserstack.md): WebDriverIO X BrowserStack London Meetup - [WebdriverIO v9 Release Party: Browser Automation's Future](/community/events/2024-08-15-v9-release-party.md): WebdriverIO v9 Release Party: Browser Automation's Future - [WebDriverIO X BrowserStack New York Meetup](/community/events/2024-10-17-webdriverio-x-browserstack.md): WebDriverIO X BrowserStack New York Meetup ### materials If you want to use WebdriverIO materials for your own workshops or events feel free to grab them directly from here. - [Materials](/community/materials.md): If you want to use WebdriverIO materials for your own workshops or events feel free to grab them directly from here. ### openofficehours Contributing to a big Open Source project can be hard. Especially if the codebase is large and requires a lot of context to understand what certain changes do. Then there is the possibility that tools or infrastructure is being used that are unknown. Nevertheless the project depends on your contributions and help to identify bugs and fix them. How can we overcome this hurdle? - [Office Hours](/community/openofficehours.md): Contributing to a big Open Source project can be hard. Especially if the codebase is large and requires a lot of context to understand what certain changes do. Then there is the possibility that tools or infrastructure is being used that are unknown. Nevertheless the project depends on your contributions and help to identify bugs and fix them. How can we overcome this hurdle? ### resources There are many wonderful curated resources the WebdriverIO community has put together. - [Resources](/community/resources.md): There are many wonderful curated resources the WebdriverIO community has put together. ### support This project is maintained by a dedicated group of people. - [Need Help?](/community/support.md): This project is maintained by a dedicated group of people. ### team The WebdriverIO development is led by a dedicated team of developers and SDETs from various companies as well contributions from people around the world. - [Team](/community/team.md): The WebdriverIO development is led by a dedicated team of developers and SDETs from various companies as well contributions from people around the world. ## docs ### accessibility-testing - [Axe Core](/docs/accessibility-testing/axe-core.md): You can include accessibility tests within your WebdriverIO test suite using the open-source accessibility tools from Deque called Axe. The setup is very easy, all you need to do is to install the WebdriverIO Axe adapter via: - [BrowserStack Accessibility Testing](/docs/accessibility-testing/browserstack.md): You can easily integrate accessibility tests in your WebdriverIO test suites using the Automated tests feature of BrowserStack Accessibility Testing. - [TestMu AI Accessibility Testing](/docs/accessibility-testing/testmuai.md): You can easily integrate accessibility tests in your WebdriverIO test suites using TestMu AI Accessibility Testing. ### allure-reporter A WebdriverIO reporter plugin to create Allure Test Reports. - [Allure Reporter](/docs/allure-reporter.md): A WebdriverIO reporter plugin to create Allure Test Reports. ### api Welcome to the WebdriverIO API docs. These pages contain reference materials for all implemented protocol bindings and convenience commands. Protocol commands, including WebDriver, WebDriver Bidi or mobile commands like Appium are commands that are directly send to the underlying driver backend. Convenience commands provided by the browser, element or mock object offer higher level interactivity. - [Introduction](/docs/api.md): Welcome to the WebdriverIO API docs. These pages contain reference materials for all implemented protocol bindings and convenience commands. Protocol commands, including WebDriver, WebDriver Bidi or mobile commands like Appium are commands that are directly send to the underlying driver backend. Convenience commands provided by the browser, element or mock object offer higher level interactivity. - [Appium](/docs/api/appium.md): getLogTypes - [The Browser Object](/docs/api/browser.md): Extends: EventEmitter - [$](/docs/api/browser/$.md): The $ command is a short and handy way in order to fetch a single element on the page. - [$$](/docs/api/browser/$$.md): The $$ command is a short and handy way in order to fetch multiple elements on the page. - [action](/docs/api/browser/action.md): The action command is a low-level interface for providing virtualized device input actions to the web browser. - [actions](/docs/api/browser/actions.md): Allows to run multiple action interactions at once, e.g. to simulate a pinch zoom or hold a modifier key while - [addCommand](/docs/api/browser/addCommand.md): The browser method addCommand helps you to write your own set of commands. - [addInitScript](/docs/api/browser/addInitScript.md): Adds a script which would be evaluated in one of the following scenarios: - [call](/docs/api/browser/call.md): You can use call to execute any async action within your test spec. - [custom$](/docs/api/browser/custom$.md): The custom$ allows you to use a custom strategy declared by using browser.addLocatorStrategy. - [custom$$](/docs/api/browser/custom$$.md): The customs$$ allows you to use a custom strategy declared by using browser.addLocatorStrategy. - [debug](/docs/api/browser/debug.md): This command helps you to debug your integration tests. It stops the running browser and gives - [deleteCookies](/docs/api/browser/deleteCookies.md): Delete cookies visible to the current page. By providing a cookie name it - [downloadFile](/docs/api/browser/downloadFile.md): Download a file from the remote computer running Selenium node to local file system - [emulate](/docs/api/browser/emulate.md): WebdriverIO allows you to emulate Web APIs using the emulate command. These Web APIs can then - [execute](/docs/api/browser/execute.md): Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame. - [executeAsync](/docs/api/browser/executeAsync.md): The executeAsync command is deprecated and will be removed in a future version. - [getCookies](/docs/api/browser/getCookies.md): Retrieve a cookie - [getPuppeteer](/docs/api/browser/getPuppeteer.md): Get the Puppeteer Browser instance - [getWindowSize](/docs/api/browser/getWindowSize.md): Returns browser window size. - [keys](/docs/api/browser/keys.md): Send a sequence of key strokes to the "active" element. You can make an input element active by just clicking - [mock](/docs/api/browser/mock.md): Mock the response of a request. You can define a mock based on a matching - [mockClearAll](/docs/api/browser/mockClearAll.md): Resets all information stored in all registered mocks of the session. - [mockRestoreAll](/docs/api/browser/mockRestoreAll.md): Restores all mock information and behavior stored in all registered - [newWindow](/docs/api/browser/newWindow.md): Open new window or tab in browser (defaults to a new window if not specified). - [overwriteCommand](/docs/api/browser/overwriteCommand.md): The browser method overwriteCommand helps you to overwrite the browser's and element's native commands like pause and click. - [pause](/docs/api/browser/pause.md): Pauses execution for a specific amount of time. It is recommended to not use this command to wait for an - [react$](/docs/api/browser/react$.md): The react$ command is a useful command to query React Components by their - [react$$](/docs/api/browser/react$$.md): The react$$ command is a useful command to query multiple React Components - [reloadSession](/docs/api/browser/reloadSession.md): Creates a new Selenium session with your current capabilities. This is useful if you - [restore](/docs/api/browser/restore.md): This command restores specific or all emulated behaviors that were set using the emulate command. - [savePDF](/docs/api/browser/savePDF.md): Prints the page of the current browsing context to a PDF file on your OS. - [saveRecordingScreen](/docs/api/browser/saveRecordingScreen.md): Save a video started by startRecordingScreen command to file. - [saveScreenshot](/docs/api/browser/saveScreenshot.md): Save a screenshot of the current browsing context to a PNG file on your OS. Be aware that - [scroll](/docs/api/browser/scroll.md): Scroll within the browser viewport. Note that x and y coordinates are relative to the current - [setCookies](/docs/api/browser/setCookies.md): Sets one or more cookies for the current page. Make sure you are - [setTimeout](/docs/api/browser/setTimeout.md): Sets the timeouts associated with the current session, timeout durations control such - [setViewport](/docs/api/browser/setViewport.md): Resizes the browser viewport within the browser. As oppose to setWindowSize, - [setWindowSize](/docs/api/browser/setWindowSize.md): Resizes browser window outer size according to provided width and height. Based on your operating - [switchFrame](/docs/api/browser/switchFrame.md): Switches the active context to a frame, e.g. an iframe on the page. There are multiple ways you can query a frame - [switchWindow](/docs/api/browser/switchWindow.md): Switch focus to a particular tab / window. - [throttle](/docs/api/browser/throttle.md): use browser.throttleNetwork instead - [throttleCPU](/docs/api/browser/throttleCPU.md): Throttles the CPU to emulate a slower processor. - [throttleNetwork](/docs/api/browser/throttleNetwork.md): Throttle the network capabilities of the browser. This can help to - [touchAction](/docs/api/browser/touchAction.md): The touchAction command is deprecated and will be removed in a future version. - [uploadFile](/docs/api/browser/uploadFile.md): Uploads a file to the Selenium Standalone server or other browser driver - [url](/docs/api/browser/url.md): The url command loads an URL in the browser. If a baseUrl is specified in the config, - [waitUntil](/docs/api/browser/waitUntil.md): This wait command is your universal weapon if you want to wait on something. It expects a condition - [Chromium](/docs/api/chromium.md): isAlertOpen - [The Clock Object](/docs/api/clock.md): You can modify the browser system clock using the emulate command. It overrides native global functions related to time allowing them to be controlled synchronously via clock.tick() or the yielded clock object. This includes controlling: - [restore](/docs/api/clock/restore.md): Restore all overridden native functions. This is automatically called between tests, so should not - [setSystemTime](/docs/api/clock/setSystemTime.md): Change the system time to the new now. Now can be a timestamp, date object, or not passed in which defaults - [tick](/docs/api/clock/tick.md): Move the clock the specified number of milliseconds. Any timers within the affected range of time will be called. - [The Dialog Object](/docs/api/dialog.md): Dialog objects are dispatched by browser via the browser.on('dialog') event. - [accept](/docs/api/dialog/accept.md): Accepts the dialog and returns when the dialog has been handled. - [defaultValue](/docs/api/dialog/defaultValue.md): If dialog is prompt, returns default prompt value. Otherwise, returns empty string. - [dismiss](/docs/api/dialog/dismiss.md): Dismisses the dialog and returns when the dialog has been handled. - [message](/docs/api/dialog/message.md): A message displayed in the dialog. - [type](/docs/api/dialog/type.md): Returns dialog's type, can be one of alert, beforeunload, confirm or prompt. - [The Element Object](/docs/api/element.md): An Element Object is an object representing an element on the remote user agent, e.g. a DOM Node when running a session within a browser or a mobile element for mobile. It can be received using one of the many element query commands, e.g. $, custom$, react$ or shadow$. - [$](/docs/api/element/$.md): The $ command is a short and handy way in order to fetch a single element on the page. - [$$](/docs/api/element/$$.md): The $$ command is a short and handy way in order to fetch multiple elements on the page. - [addValue](/docs/api/element/addValue.md): Add a value to an input or textarea element found by given selector. - [clearValue](/docs/api/element/clearValue.md): Clear the value of an input or textarea element. Make sure you can interact with the - [click](/docs/api/element/click.md): Click on an element. - [custom$](/docs/api/element/custom$.md): The custom$ allows you to use a custom strategy declared by using browser.addLocatorStrategy. - [custom$$](/docs/api/element/custom$$.md): The customs$$ allows you to use a custom strategy declared by using browser.addLocatorStrategy. - [doubleClick](/docs/api/element/doubleClick.md): Double-click on an element. - [dragAndDrop](/docs/api/element/dragAndDrop.md): Drag an item to a destination element or position. - [execute](/docs/api/element/execute.md): Inject a snippet of JavaScript into the page for execution in the context of the currently selected - [executeAsync](/docs/api/element/executeAsync.md): The executeAsync command is deprecated and will be removed in a future version. - [getAttribute](/docs/api/element/getAttribute.md): Get an attribute from a DOM-element based on the attribute name. - [getComputedLabel](/docs/api/element/getComputedLabel.md): Get the computed WAI-ARIA label of an element. - [getComputedRole](/docs/api/element/getComputedRole.md): Get the computed WAI-ARIA label of an element. - [getCSSProperty](/docs/api/element/getCSSProperty.md): Get a css property from a DOM-element selected by given selector. The return value - [getElement](/docs/api/element/getElement.md): Access WebdriverIO.Element properties like selector or elementId from the element reference. - [getElements](/docs/api/element/getElements.md): Access WebdriverIO.ElementArray properties like length or selector from the elements reference. - [getHTML](/docs/api/element/getHTML.md): Get source code of specified DOM element by selector. By default, it automatically - [getLocation](/docs/api/element/getLocation.md): Determine an element’s location on the page. The point (0, 0) refers to - [getProperty](/docs/api/element/getProperty.md): The Get Element Property command will return the result of getting a property of an - [getSize](/docs/api/element/getSize.md): Get the width and height for an DOM-element. - [getTagName](/docs/api/element/getTagName.md): Get tag name of a DOM-element. - [getText](/docs/api/element/getText.md): Get the text content from a DOM-element. Make sure the element - [getValue](/docs/api/element/getValue.md): Get the value of a `, or text ` found by given selector. - [isClickable](/docs/api/element/isClickable.md): An element is considered to be clickable when the following conditions are met: - [isDisplayed](/docs/api/element/isDisplayed.md): Return true if the selected DOM-element is displayed (even when the element is outside the viewport). It is using - [isEnabled](/docs/api/element/isEnabled.md): Return true or false if the selected DOM-element is enabled. - [isEqual](/docs/api/element/isEqual.md): Return true if the selected element matches with the provided one. - [isExisting](/docs/api/element/isExisting.md): Returns true if element exists in the DOM. - [isFocused](/docs/api/element/isFocused.md): Return true or false if the selected DOM-element currently has focus. If the selector matches - [isSelected](/docs/api/element/isSelected.md): Will return true or false whether or not an ` or ` element of type - [isStable](/docs/api/element/isStable.md): Will return true when the element is stable (not animating) or false when unstable (currently animating). - [moveTo](/docs/api/element/moveTo.md): Move the mouse by an offset of the specified element. If no element is specified, - [nextElement](/docs/api/element/nextElement.md): Returns the next sibling element of the selected DOM-element. - [parentElement](/docs/api/element/parentElement.md): Returns the parent element of the selected DOM-element. - [previousElement](/docs/api/element/previousElement.md): Returns the previous sibling element of the selected DOM-element. - [react$](/docs/api/element/react$.md): The react$ command is a useful command to query React Components by their - [react$$](/docs/api/element/react$$.md): The react$$ command is a useful command to query multiple React Components - [saveScreenshot](/docs/api/element/saveScreenshot.md): Save a screenshot of an element to a PNG file on your OS. - [scrollIntoView](/docs/api/element/scrollIntoView.md): Scroll element into viewport for Desktop/Mobile Web AND Mobile Native Apps. - [selectByAttribute](/docs/api/element/selectByAttribute.md): Select option with a specific value. - [selectByIndex](/docs/api/element/selectByIndex.md): Select option with a specific index. - [selectByVisibleText](/docs/api/element/selectByVisibleText.md): Select option with displayed text matching the argument. - [setValue](/docs/api/element/setValue.md): Send a sequence of key strokes to an element after the input has been cleared before. If the element doesn't need - [shadow$](/docs/api/element/shadow$.md): Access an element inside a given element's shadowRoot. If you are working - [shadow$$](/docs/api/element/shadow$$.md): Access elements inside a given element's shadowRoot. If you are working - [touchAction](/docs/api/element/touchAction.md): The touchAction command is deprecated and will be removed in a future version. - [waitForClickable](/docs/api/element/waitForClickable.md): Wait for an element for the provided amount of milliseconds to be clickable or not clickable. - [waitForDisplayed](/docs/api/element/waitForDisplayed.md): true to check if the element is within the viewport. false by default. - [waitForEnabled](/docs/api/element/waitForEnabled.md): Wait for an element (selected by css selector) for the provided amount of - [waitForExist](/docs/api/element/waitForExist.md): Wait for an element for the provided amount of - [waitForStable](/docs/api/element/waitForStable.md): Wait for an element for the provided amount of - [waitUntil](/docs/api/element/waitUntil.md): This wait command is your universal weapon if you want to wait on something. It expects a condition - [Environment Variables](/docs/api/environment.md): WebdriverIO sets the following environment variables within every worker: - [Expect](/docs/api/expect-webdriverio.md): When you're writing tests, you often need to check that values meet certain conditions. expect gives you access to a number of "matchers" that let you validate different things on the browser, an element or mock object. - [Firefox](/docs/api/gecko.md): fullPageScreenshot - [Globals](/docs/api/globals.md): In your test files, WebdriverIO puts each of these methods and objects into the global environment. You don't have to import anything to use them. However, if you prefer explicit imports, you can do import { browser, $, $$, expect } from '@wdio/globals' and set injectGlobals: false in your WDIO configuration. - [Mobile JSON Wire Protocol](/docs/api/mjsonwp.md): getPageIndex - [Introduction to custom and enhanced Mobile Commands in WebdriverIO](/docs/api/mobile.md): Testing mobile apps and mobile web applications comes with its own challenges, especially when dealing with platform-specific differences between Android and iOS. While Appium provides the flexibility to handle these differences, it often requires you to dive deep into complex, platform-dependent docs (Android, iOS) and commands. This can make writing test scripts more time-consuming, error-prone, and difficult to maintain. - [acceptDialog](/docs/api/mobile/acceptDialog.md): Accept a native mobile alert or permission dialog. - [background](/docs/api/mobile/background.md): Send the currently running app for this session to the background. - [closeApp](/docs/api/mobile/closeApp.md): Close a specific app or the currently active app on the device. - [deepLink](/docs/api/mobile/deepLink.md): Open a deep link URL in the mobile app based on the url and the app's package name (Android) or bundle ID (iOS). - [dismissDialog](/docs/api/mobile/dismissDialog.md): Dismiss a native mobile alert or permission dialog. - [dragAndDrop](/docs/api/mobile/dragAndDrop.md): Drag an item to a destination element or position. - [fingerPrint](/docs/api/mobile/fingerPrint.md): Authenticate users by using their fingerprint scan on supported Android emulators. The - [getClipboard](/docs/api/mobile/getClipboard.md): Get the content of the system clipboard as a base64-encoded string. - [getContext](/docs/api/mobile/getContext.md): Retrieve the context of the current session. - [getContexts](/docs/api/mobile/getContexts.md): The WebdriverIO getContexts method is an improved version of the default Appium contexts - [getCurrentActivity](/docs/api/mobile/getCurrentActivity.md): Get the name of the current Android activity. - [getCurrentPackage](/docs/api/mobile/getCurrentPackage.md): Get the name of the current Android package. - [getDisplayDensity](/docs/api/mobile/getDisplayDensity.md): Get the display density from the device. - [getPerformanceData](/docs/api/mobile/getPerformanceData.md): Get performance data for a specific application. Returns system state information like cpu, - [getPerformanceDataTypes](/docs/api/mobile/getPerformanceDataTypes.md): Returns the information types of the system state which is supported to read - [getStrings](/docs/api/mobile/getStrings.md): Get app strings for a specific language. Returns a key-value object of all string resources - [getSystemBars](/docs/api/mobile/getSystemBars.md): Retrieve visibility and bounds information of the status and navigation bars. - [gsmCall](/docs/api/mobile/gsmCall.md): Make a GSM call on the Android emulator. Valid actions: 'call', 'accept', 'cancel', 'hold'. - [gsmSignal](/docs/api/mobile/gsmSignal.md): Set the GSM signal strength on the Android emulator. - [gsmVoice](/docs/api/mobile/gsmVoice.md): Set the GSM voice state on the Android emulator. Valid values: 'unregistered', 'home', - [isLocked](/docs/api/mobile/isLocked.md): Check whether the device screen is locked. - [launchApp](/docs/api/mobile/launchApp.md): Launch or activate an app on the device. If no bundleId (iOS) or appId (Android) is provided, - [lock](/docs/api/mobile/lock.md): Lock the device screen. - [longPress](/docs/api/mobile/longPress.md): Performs a long press gesture on the given element on the screen. - [longPressKeyCode](/docs/api/mobile/longPressKeyCode.md): Press and hold a particular key code on the device. - [openNotifications](/docs/api/mobile/openNotifications.md): Open Android notifications. - [pinch](/docs/api/mobile/pinch.md): Performs a pinch gesture on the given element on the screen. - [powerAC](/docs/api/mobile/powerAC.md): Set the state of the battery charger on the Android emulator. Valid values: 'on', 'off'. - [powerCapacity](/docs/api/mobile/powerCapacity.md): Set the battery percentage on the Android emulator. Value must be in the range [0, 100]. - [pressKeyCode](/docs/api/mobile/pressKeyCode.md): Press a particular key on the device. The keycode values correspond to Android KeyEvent constants. - [relaunchActiveApp](/docs/api/mobile/relaunchActiveApp.md): Performs a restart of the active native app by: - [scrollIntoView](/docs/api/mobile/scrollIntoView.md): Scroll element into viewport for Desktop/Mobile Web AND Mobile Native Apps. - [sendKeyEvent](/docs/api/mobile/sendKeyEvent.md): Send a key event to the Android device. - [sendSms](/docs/api/mobile/sendSms.md): Simulate an SMS message being received on the Android emulator. - [setClipboard](/docs/api/mobile/setClipboard.md): Set the content of the system clipboard. - [shake](/docs/api/mobile/shake.md): Perform a shake action on the device. Supports iOS Simulator and real devices. - [startActivity](/docs/api/mobile/startActivity.md): The package name of the app to start. - [swipe](/docs/api/mobile/swipe.md): Swipe in a specific direction within viewport or element for Desktop/Mobile Web AND Mobile Native Apps. - [switchContext](/docs/api/mobile/switchContext.md): Switch to a specific context using a given Webview name, title, or url. - [tap](/docs/api/mobile/tap.md): Performs a tap gesture on: - [toggleAirplaneMode](/docs/api/mobile/toggleAirplaneMode.md): Set the airplane mode state on the device. - [toggleData](/docs/api/mobile/toggleData.md): Set the mobile data state on the device. - [toggleEnrollTouchId](/docs/api/mobile/toggleEnrollTouchId.md): Toggle Touch ID enrollment on iOS Simulator. - [toggleLocationServices](/docs/api/mobile/toggleLocationServices.md): Toggle the state of the location service. - [toggleNetworkSpeed](/docs/api/mobile/toggleNetworkSpeed.md): Set the network speed for the Android emulator. Valid values: 'full', 'gsm', 'edge', 'hscsd', - [toggleWiFi](/docs/api/mobile/toggleWiFi.md): Set the WiFi state on the device. - [touchId](/docs/api/mobile/touchId.md): Simulate a Touch ID or Face ID biometric match event on iOS Simulator. - [unlock](/docs/api/mobile/unlock.md): Unlock the device screen. - [zoom](/docs/api/mobile/zoom.md): Performs a zoom gesture on the given element on the screen. - [The Mock Object](/docs/api/mock.md): The mock object is an object that represents a network mock and contains information about requests that were matching given url and filterOptions. It can be received using the mock command. - [abort](/docs/api/mock/abort.md): Abort the request with one of the following error codes: - [abortOnce](/docs/api/mock/abortOnce.md): Abort the request once with one of the following error codes: - [clear](/docs/api/mock/clear.md): Resets all information stored in the mock.calls array. - [redirect](/docs/api/mock/redirect.md): Sets up a redirect for a given mock. This allows you to redirect a request to another URL. - [request](/docs/api/mock/request.md): Allows you do modify requests the browser makes during the session. This can be useful for the following use cases: - [requestOnce](/docs/api/mock/requestOnce.md): Only change request parameter once with given overwrite for the next request. You can call requestOnce multiple - [respond](/docs/api/mock/respond.md): Always respond with same overwrite. - [respondOnce](/docs/api/mock/respondOnce.md): Only respond once with given overwrite. You can call respondOnce multiple - [restore](/docs/api/mock/restore.md): Does everything that mock.clear() does, and also removes any mocked return values or implementations. - [waitForResponse](/docs/api/mock/waitForResponse.md): Wait until at least one matching request has received a response. - [Modules](/docs/api/modules.md): WebdriverIO publishes various modules to NPM and other registries that you can use to build your own automation framework. See more documentation on WebdriverIO setup types here. - [Protocol Commands](/docs/api/protocols.md): WebdriverIO is an automation framework that relies on various automation protocols to control a remote agent, e.g. for a browser, mobile device or television. Based on the remote device different protocols come into play. These commands are assigned to the Browser or Element Object depending on the session information by the remote server (e.g. browser driver). - [Sauce Labs](/docs/api/saucelabs.md): All commands are only supported on Chrome using Sauce Labs - [Selenium Standalone](/docs/api/selenium.md): file - [WebDriver Protocol](/docs/api/webdriver.md): newSession - [WebDriver Bidi Protocol](/docs/api/webdriverBidi.md): These protocol commands are generated based on the current living ### appium With WebdriverIO you can test not only web application in the browser but also other platforms such as: - [Appium Setup](/docs/appium.md): With WebdriverIO you can test not only web application in the browser but also other platforms such as: ### appium-service Handling the Appium server is out of the scope of the actual WebdriverIO project. This service helps you to run the Appium server seamlessly when running tests with the WDIO testrunner. It starts the Appium Server in a child process. - [Appium Service](/docs/appium-service.md): Handling the Appium server is out of the scope of the actual WebdriverIO project. This service helps you to run the Appium server seamlessly when running tests with the WDIO testrunner. It starts the Appium Server in a child process. ### assertion The WDIO testrunner comes with a built in assertion library that allows you to make powerful assertions on various aspects of the browser or elements within your (web) application. It extends Jests Matchers functionality with additional, for e2e testing optimized, matchers, e.g.: - [Assertion](/docs/assertion.md): The WDIO testrunner comes with a built in assertion library that allows you to make powerful assertions on various aspects of the browser or elements within your (web) application. It extends Jests Matchers functionality with additional, for e2e testing optimized, matchers, e.g.: ### async-migration Due to changes in V8 the WebdriverIO team announced to deprecate synchronous command execution by April 2023. The team has been working hard to make the transition as easy as possible. In this guide we explain how you can slowly migrate your test suite from sync to async. As an example project we use the Cucumber Boilerplate but the approach is the same with all other projects as well. - [From Sync to Async](/docs/async-migration.md): Due to changes in V8 the WebdriverIO team announced to deprecate synchronous command execution by April 2023. The team has been working hard to make the transition as easy as possible. In this guide we explain how you can slowly migrate your test suite from sync to async. As an example project we use the Cucumber Boilerplate but the approach is the same with all other projects as well. ### autocompletion IntelliJ - [Autocompletion](/docs/autocompletion.md): IntelliJ ### automationProtocols With WebdriverIO, you can choose between multiple automation technologies when running your E2E tests locally or in the cloud. By default, WebdriverIO will attempt to start a local automation session using the WebDriver Bidi protocol. - [Automation Protocols](/docs/automationProtocols.md): With WebdriverIO, you can choose between multiple automation technologies when running your E2E tests locally or in the cloud. By default, WebdriverIO will attempt to start a local automation session using the WebDriver Bidi protocol. ### autowait When using a command that directly interacts with an element WebdriverIO will automatically wait for the element to be visible and interactable, no manual waits are needed when using the commands (think of click, setValue etc). - [Auto-waiting](/docs/autowait.md): When using a command that directly interacts with an element WebdriverIO will automatically wait for the element to be visible and interactable, no manual waits are needed when using the commands (think of click, setValue etc). ### badisi-wdio-harness @badisi/wdio-harness is a 3rd party package, for more information please see GitHub | npm - [Support for Angular component test harnesses Service](/docs/badisi-wdio-harness.md): @badisi/wdio-harness is a 3rd party package, for more information please see GitHub | npm ### bamboo WebdriverIO offers a tight integration to CI systems like Bamboo. With the JUnit or Allure reporter, you can easily debug your tests as well as keep track of your test results. The integration is pretty easy. - [Bamboo](/docs/bamboo.md): WebdriverIO offers a tight integration to CI systems like Bamboo. With the JUnit or Allure reporter, you can easily debug your tests as well as keep track of your test results. The integration is pretty easy. ### best-practices - [Browser Logs](/docs/best-practices/browser-logs.md): When running tests the browser may log important information that you are interested or want to assert against. - [File Download](/docs/best-practices/file-download.md): When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. ### bestpractices This guide aims to share our best practices that help you write performant and resilient tests. - [Best Practices](/docs/bestpractices.md): This guide aims to share our best practices that help you write performant and resilient tests. ### boilerplates Over time, our community has developed several projects that you can use as inspiration to set up your own test suite. - [v9 Boilerplate Projects](/docs/boilerplates.md): Over time, our community has developed several projects that you can use as inspiration to set up your own test suite. ### capabilities A capability is a definition for a remote interface. It helps WebdriverIO to understand in which browser or mobile environment you like to run your tests on. Capabilities are less crucial when developing tests locally as you run it on one remote interface most of the time but becomes more important when running a large set of integration tests in CI/CD. - [Capabilities](/docs/capabilities.md): A capability is a definition for a remote interface. It helps WebdriverIO to understand in which browser or mobile environment you like to run your tests on. Capabilities are less crucial when developing tests locally as you run it on one remote interface most of the time but becomes more important when running a large set of integration tests in CI/CD. ### cloudservices Using on-demand services like Sauce Labs, Browserstack, TestingBot, TestMu AI (Formerly LambdaTest) or Perfecto with WebdriverIO is pretty simple. All you need to do is to set your service's user and key in your options. - [Using Cloud Services](/docs/cloudservices.md): Using on-demand services like Sauce Labs, Browserstack, TestingBot, TestMu AI (Formerly LambdaTest) or Perfecto with WebdriverIO is pretty simple. All you need to do is to set your service's user and key in your options. ### component-testing With WebdriverIOs Browser Runner you can run tests within an actual desktop or mobile browser while using WebdriverIO and the WebDriver protocol to automate and interact what gets rendered on the page. This approach has many advantages compared to other test frameworks that only allow testing against JSDOM. - [Component Testing](/docs/component-testing.md): With WebdriverIOs Browser Runner you can run tests within an actual desktop or mobile browser while using WebdriverIO and the WebDriver protocol to automate and interact what gets rendered on the page. This approach has many advantages compared to other test frameworks that only allow testing against JSDOM. - [Coverage](/docs/component-testing/coverage.md): WebdriverIO's browser runner supports code coverage reporting using istanbul. The testrunner will automatically instrument your code using Vite and capture code coverage for you. - [Lit](/docs/component-testing/lit.md): Lit is a simple library for building fast, lightweight web components. Testing Lit web components with WebdriverIO is very easy thanks to WebdriverIOs shadow DOM selectors you can query in shadow roots nested elements with just one single command. - [Mocking](/docs/component-testing/mocking.md): When writing tests it's only a matter of time before you need to create a "fake" version of an internal — or external — service. This is commonly referred to as mocking. WebdriverIO provides utility functions to help you out. You can import { fn, spyOn, mock, unmock } from '@wdio/browser-runner' to access it. See more information about the available mocking utilities in the API docs. - [Preact](/docs/component-testing/preact.md): Preact is a fast 3kB alternative to React with the same modern API. You can test Preact components directly in a real browser using WebdriverIO and its browser runner. - [React](/docs/component-testing/react.md): React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes. You can test React components directly in a real browser using WebdriverIO and its browser runner. - [SolidJS](/docs/component-testing/solid.md): SolidJS is a framework to build user interfaces with simple and performant reactivity. You can test SolidJS components directly in a real browser using WebdriverIO and its browser runner. - [Stencil](/docs/component-testing/stencil.md): Stencil is a library for building reusable, scalable component libraries. You can test Stencil components directly in a real browser using WebdriverIO and its browser runner. - [Svelte](/docs/component-testing/svelte.md): Svelte is a radical new approach to building user interfaces. Whereas traditional frameworks like React and Vue do the bulk of their work in the browser, Svelte shifts that work into a compile step that happens when you build your app. You can test Svelte components directly in a real browser using WebdriverIO and its browser runner. - [Vue.js](/docs/component-testing/vue.md): Vue.js is an approachable, performant and versatile framework for building web user interfaces. You can test Vue.js components directly in a real browser using WebdriverIO and its browser runner. ### concise-reporter A WebdriverIO plugin to report in concise style. - [Concise Reporter](/docs/concise-reporter.md): A WebdriverIO plugin to report in concise style. ### configuration Based on the setup type (e.g. using the raw protocol bindings, WebdriverIO as standalone package or the WDIO testrunner) there is a different set of options available to control the environment. - [Configuration](/docs/configuration.md): Based on the setup type (e.g. using the raw protocol bindings, WebdriverIO as standalone package or the WDIO testrunner) there is a different set of options available to control the environment. ### configurationfile The configuration file contains all necessary information to run your test suite. It’s a NodeJS module that exports a JSON. - [Configuration File](/docs/configurationfile.md): The configuration file contains all necessary information to run your test suite. It’s a NodeJS module that exports a JSON. ### contribute You like WebdriverIO and want to help making it better? Awesome! We are working to make this process as easy and transparent as possible. We might be not quite there yet but this guide will help you to ramp you up as a contributor and give you everything you need to make your first contribution. If there is any information missing that prevents you from sending in a pull request, please let us know. We treat these kind of issues like actual bugs. - [Contribute](/docs/contribute.md): You like WebdriverIO and want to help making it better? Awesome! We are working to make this process as easy and transparent as possible. We might be not quite there yet but this guide will help you to ramp you up as a contributor and give you everything you need to make your first contribution. If there is any information missing that prevents you from sending in a pull request, please let us know. We treat these kind of issues like actual bugs. ### customcommands If you want to extend the browser instance with your own set of commands, the browser method addCommand is here for you. You can write your command in an asynchronous way, just as in your specs. - [Custom Commands](/docs/customcommands.md): If you want to extend the browser instance with your own set of commands, the browser method addCommand is here for you. You can write your command in an asynchronous way, just as in your specs. ### custommatchers WebdriverIO uses a Jest style expect assertion library that comes with special features and custom matchers specific for running web and mobile tests. While the library of matchers is big, it certainly doesn't fit all possible situations. Therefore it is possible to extend the existing matchers with custom ones defined by you. - [Custom Matchers](/docs/custommatchers.md): WebdriverIO uses a Jest style expect assertion library that comes with special features and custom matchers specific for running web and mobile tests. While the library of matchers is big, it certainly doesn't fit all possible situations. Therefore it is possible to extend the existing matchers with custom ones defined by you. ### customreporter You can write your own custom reporter for the WDIO test runner that is tailored to your needs. And it’s easy! - [Custom Reporter](/docs/customreporter.md): You can write your own custom reporter for the WDIO test runner that is tailored to your needs. And it’s easy! ### customservices You can write your own custom service for the WDIO test runner to custom-fit your needs. - [Custom Services](/docs/customservices.md): You can write your own custom service for the WDIO test runner to custom-fit your needs. ### debugging Debugging is significantly more difficult when several processes spawn dozens of tests in multiple browsers. - [Debugging](/docs/debugging.md): Debugging is significantly more difficult when several processes spawn dozens of tests in multiple browsers. ### desktop-testing - [Dioxus](/docs/desktop-testing/dioxus.md): Dioxus is a Rust framework for building cross-platform apps from a single codebase. Its desktop apps render in the operating system's native webview (Wry), and WebdriverIO's Dioxus service automates their discovery, launch, and driving on Windows (WebView2), macOS (WKWebView), and Linux (WebKitGTK) so the same test suite works everywhere. - [API Reference](/docs/desktop-testing/dioxus/api.md): Complete API reference for @wdio/dioxus-service. - [Browser Mode](/docs/desktop-testing/dioxus/browser-mode.md): Browser mode lets you test your Dioxus frontend UI in plain Chrome against a running dev server — no Dioxus binary, no driver. The Dioxus invoke API is intercepted at the JavaScript boundary in the renderer, so you can mock individual commands and assert on call arguments just like in native mode. - [Coexistence](/docs/desktop-testing/dioxus/coexistence.md): This guide explains how to run @wdio/dioxus-service alongside @wdio/tauri-service and @wdio/electron-service in the same monorepo. - [Configuration](/docs/desktop-testing/dioxus/configuration.md): Complete guide to configuring @wdio/dioxus-service in your WebdriverIO setup. - [Deeplink Testing](/docs/desktop-testing/dioxus/deeplink-testing.md): The service provides the ability to test custom protocol handlers and deeplinks in your Dioxus application using the browser.dioxus.triggerDeeplink() method. - [Edge WebDriver on Windows](/docs/desktop-testing/dioxus/edge-webdriver-windows.md): Overview - [Log Forwarding](/docs/desktop-testing/dioxus/log-forwarding.md): Capture and forward logs from your Dioxus application to WebdriverIO's logger system. - [Platform Support](/docs/desktop-testing/dioxus/platform-support.md): Complete guide to platform-specific requirements, limitations, and driver setup for Dioxus testing. - [Bridge Setup](/docs/desktop-testing/dioxus/plugin-setup.md): Overview - [Quick Start](/docs/desktop-testing/dioxus/quick-start.md): Get up and running with WebdriverIO and Dioxus E2E testing in minutes. - [Troubleshooting](/docs/desktop-testing/dioxus/troubleshooting.md): Solutions for common issues when testing Dioxus applications with WebdriverIO. - [Usage Examples](/docs/desktop-testing/dioxus/usage-examples.md): Practical examples for testing Dioxus applications with WebdriverIO. - [Electron](/docs/desktop-testing/electron.md): Electron is a framework for building desktop applications using JavaScript, HTML, and CSS. By embedding Chromium and Node.js into its binary, Electron allows you to maintain one JavaScript codebase and create cross-platform apps that work on Windows, macOS, and Linux — no native development experience is required. - [Accessing Electron APIs](/docs/desktop-testing/electron/api.md): This guide covers how to work with Electron APIs in your tests, including accessing APIs from the main process and mocking them for testing. - [API Reference](/docs/desktop-testing/electron/api-reference.md): This document provides a complete reference for all browser.electron.* methods and exported utility functions provided by the service. - [Common Issues](/docs/desktop-testing/electron/common-issues.md): These are some common issues which others have encountered whilst using the service. For debugging tools and features, see the Debugging guide. - [Configuration](/docs/desktop-testing/electron/configuration.md): This document covers all configuration options for the WDIO Electron Service, including service options and Chromedriver configuration. - [Debugging](/docs/desktop-testing/electron/debugging.md): This guide covers the debugging tools and features available in the Electron service to help you gain visibility into your application's behavior during tests. - [Deeplink Testing](/docs/desktop-testing/electron/deeplink-testing.md): The service provides the ability to test custom protocol handlers and deeplinks in your Electron application using the browser.electron.triggerDeeplink() method. This feature automatically handles platform-specific differences, particularly on Windows where deeplinks would normally launch a new instance instead of reaching the test instance. - [Standalone Mode](/docs/desktop-testing/electron/standalone.md): You can also use the service without the WDIO testrunner, e.g. in a normal Node.js script. - [Window Management](/docs/desktop-testing/electron/window-management.md): The service automatically tracks the active Electron BrowserWindow and ensures WebdriverIO commands target it. You can write tests against your app without manually shuffling window handles when the renderer changes (for example, splash screen → main window). - [MacOS](/docs/desktop-testing/macos.md): WebdriverIO can automate arbitrary MacOS application using Appium. All you need is XCode installed on your system, Appium and the Mac2 Driver installed as dependency and the correct capabilities set. - [Tauri](/docs/desktop-testing/tauri.md): Tauri is a framework for building lightweight, secure cross-platform desktop applications using a Rust backend and the operating system's native webview. WebdriverIO's Tauri service automates the discovery, launch, and driving of Tauri apps on Windows (WebView2), macOS (WKWebView), and Linux (WebKitGTK) so the same test suite works everywhere. - [API Reference](/docs/desktop-testing/tauri/api.md): Complete API reference for @wdio/tauri-service. - [Configuration](/docs/desktop-testing/tauri/configuration.md): Complete guide to configuring @wdio/tauri-service in your WebdriverIO setup. - [CrabNebula Setup](/docs/desktop-testing/tauri/crabnebula-setup.md): This guide walks you through setting up CrabNebula's tauri-driver for cross-platform Tauri testing. - [Deeplink Testing](/docs/desktop-testing/tauri/deeplink-testing.md): The service provides the ability to test custom protocol handlers and deeplinks in your Tauri application using the browser.tauri.triggerDeeplink() method. - [Edge WebDriver on Windows](/docs/desktop-testing/tauri/edge-webdriver-windows.md): Overview - [Log Forwarding](/docs/desktop-testing/tauri/log-forwarding.md): Capture and forward logs from your Tauri application to WebDriverIO's logger system. - [Platform Support](/docs/desktop-testing/tauri/platform-support.md): Complete guide to platform-specific requirements, limitations, and WebDriver setup for Tauri testing. - [Plugin Setup](/docs/desktop-testing/tauri/plugin-setup.md): Overview - [Quick Start](/docs/desktop-testing/tauri/quick-start.md): Get up and running with WebdriverIO and Tauri E2E testing in minutes. - [Troubleshooting](/docs/desktop-testing/tauri/troubleshooting.md): Solutions for common issues when testing Tauri applications with WebdriverIO. - [Usage Examples](/docs/desktop-testing/tauri/usage-examples.md): Practical examples for testing Tauri applications with WebdriverIO. - [Windows](/docs/desktop-testing/windows.md): Unfortunately there is at the moment no stable driver for automating Windows applications. Even though Appium maintains a Windows Driver that is based on Microsoft's WinAppDriver server, we would not recommend using it given that Microsoft has stopped maintaining the server and there are a lot of known bugs. ### devtools DevTools is a powerful browser-based debugging interface for visualizing, controlling, and inspecting your test executions in real-time. It works with WebdriverIO, Nightwatch.js, and Selenium WebDriver (any runner) — same backend, same UI, same capture infrastructure. - [DevTools](/docs/devtools.md): DevTools is a powerful browser-based debugging interface for visualizing, controlling, and inspecting your test executions in real-time. It works with WebdriverIO, Nightwatch.js, and Selenium WebDriver (any runner) — same backend, same UI, same capture infrastructure. - [Allure Integration](/docs/devtools/allure.md): Trace-mode artifacts — the trace zip and each test's per-test screenshot and video — attach to an Allure report automatically, so you can open them straight from the report. See Trace Mode for how to enable trace mode and produce these artifacts. - [Cross-Framework Support](/docs/devtools/cross-framework.md): The trace format and the show-trace player are identical across WebdriverIO / Selenium / Nightwatch; this page shows where capture completeness differs. For the full trace-mode reference, see Trace Mode. - [The Dashboard](/docs/devtools/dashboard.md): Live mode opens the DevTools UI in an external browser window and streams your test run in real time. It's the interactive counterpart to Trace Mode, which skips the UI and writes a portable offline artifact instead. Live mode is enabled by default (mode: 'live'), so simply running your WebdriverIO tests launches the dashboard. - [Getting Started](/docs/devtools/getting-started.md): WebdriverIO DevTools gives your end-to-end browser tests a developer-tools UI for running, debugging, and inspecting automation — DOM replay, per-command screenshots, network and console capture, and session screencasts. It runs in two modes. Live mode opens an interactive dashboard in a browser window while your tests execute, so you can watch and rerun them in real time. Trace mode skips the UI and writes a portable, offline trace artifact (trace.zip) you can open later in the show-trace player — ideal for CI. This page gets you into live mode fast; trace mode is one option away. - [Trace Mode Limitations](/docs/devtools/limitations.md): What Trace Mode deliberately skips, plus the known gaps across adapters. - [Nightwatch DevTools](/docs/devtools/nightwatch.md): Nightwatch adapter for WebdriverIO DevTools - brings the same visual debugging UI to your Nightwatch test suite with zero test code changes. - [Configuration Reference](/docs/devtools/reference.md): All DevTools options at a glance, across the three adapters. Option names, types, and defaults are identical on every adapter; where behaviour differs, it's noted. For the full explanation of each trace option see the linked section on the Trace Mode page. - [Selenium DevTools](/docs/devtools/selenium.md): Selenium WebDriver adapter for WebdriverIO DevTools - brings the same visual debugging UI to any Selenium test, in Node.js or Python, regardless of the test runner. - [Trace Player](/docs/devtools/trace-player.md): The show-trace player opens any trace produced in Trace Mode in the WebdriverIO DevTools UI itself — a dedicated, read-only player mode for offline replay, review, and AI-agent diffing. - [WebDriverIO DevTools](/docs/devtools/wdio.md): A WebdriverIO service that provides a developer tools UI for running, debugging, and inspecting browser automation tests. Features include DOM mutation replay, per-command screenshots, network request inspection, console log capture, and session screencast recording. - [Console Logs](/docs/devtools/wdio/console-logs.md): Capture and inspect all browser console output during test execution. DevTools records console messages from your application (console.log(), console.warn(), console.error(), console.info(), console.debug()) as well as WebDriverIO framework logs based on the logLevel configured in your wdio.conf.ts. - [Interactive Test Rerunning & Visualization](/docs/devtools/wdio/interactive-test-rerunning.md): Watch your tests execute in real-time with live browser previews and automatic screenshots captured after each WebDriver command. The UI displays a complete visual timeline of your test execution, showing the exact browser state at each step. - [Metadata](/docs/devtools/wdio/metadata.md): Inspect the full context of every browser session your test opens. The Metadata tab surfaces the capabilities, environment, and timing behind each run, so you can confirm exactly what was under test without digging through logs. - [Multi-Framework Support](/docs/devtools/wdio/multi-framework-support.md): DevTools automatically works with Mocha, Jasmine, and Cucumber without requiring any framework-specific configuration. Simply add the service to your WebDriverIO config and all features work seamlessly regardless of which test framework you're using. - [Network Logs](/docs/devtools/wdio/network-logs.md): Monitor and inspect all network activity during your tests. DevTools captures every HTTP request and response, giving you complete visibility into API calls, resource loading, and network timing - just like browser DevTools. - [Preserve & Rerun (Compare)](/docs/devtools/wdio/preserve-and-rerun.md): When a test fails, the usual debugging loop is: rerun it, then compare two walls of logs to work out what changed. Preserve & Rerun collapses that into a single click. It snapshots the failing run and re-executes the test in one action, then shows both runs side-by-side in a Compare view aligned command-by-command - so you can see exactly where the two diverged without re-reading anything. - [Session Screencast](/docs/devtools/wdio/screencast.md): Records browser sessions as .webm videos. Videos are displayed in the DevTools UI alongside the snapshot and DOM mutation views. - [TestLens](/docs/devtools/wdio/testlens.md): TestLens provides intelligent code navigation between the DevTools UI and your test source files. Click on any test in the UI to jump directly to that test's definition in your code editor, complete with exact line numbers. - [Trace Mode](/docs/devtools/wdio/trace-mode.md): Headless capture path — no DevTools UI window opens. At session end the adapter writes trace artifacts into a test-results/ folder next to your spec / config directory. For session / spec granularity that's a trace-.zip (or a trace-/ directory); for test granularity each test gets its own subfolder (see Trace granularity). The artifact is portable and ships everything needed for offline replay, AI-agent diffing, or any consumer that prefers a file over a live UI. ### docker Docker is a powerful containerization technology that allows to encapsulate your test suite into a container that behaves the same on every system. This can avoid flakiness due to different browser or platform versions. In order to run your tests within a container, create a Dockerfile in your project directory, e.g.: - [Docker](/docs/docker.md): Docker is a powerful containerization technology that allows to encapsulate your test suite into a container that behaves the same on every system. This can avoid flakiness due to different browser or platform versions. In order to run your tests within a container, create a Dockerfile in your project directory, e.g.: ### dot-reporter A WebdriverIO plugin to report in dot style. - [Dot Reporter](/docs/dot-reporter.md): A WebdriverIO plugin to report in dot style. ### driverbinaries To run automation based on the WebDriver protocol you need to have browser drivers set up that translate the automation commands and are able to execute them in the browser. - [Driver Binaries](/docs/driverbinaries.md): To run automation based on the WebDriver protocol you need to have browser drivers set up that translate the automation commands and are able to execute them in the browser. ### emulation With WebdriverIO you can emulate Web APIs using the emulate command to return custom values that help you emulate certain browser behaviors. Note that this requires your application to explicitly use these APIs. - [Emulation](/docs/emulation.md): With WebdriverIO you can emulate Web APIs using the emulate command to return custom values that help you emulate certain browser behaviors. Note that this requires your application to explicitly use these APIs. ### enterprise Available as part of the Tidelift Subscription - [WebdriverIO for Enterprise](/docs/enterprise.md): Available as part of the Tidelift Subscription ### extension-testing - [VS Code Extension Testing](/docs/extension-testing/vscode-extensions.md): WebdriverIO allows you to seamlessly test your VS Code extensions from end to end in the VS Code Desktop IDE or as web extension. You only need to provide a path to your extension and the framework does the rest. With the wdio-vscode-service everything is taken care of and much more: - [Web Extension Testing](/docs/extension-testing/web-extensions.md): WebdriverIO is the ideal tool to automate a browser. Web Extensions are a part of the browser and can be automated in the same way. Whenever your web extension uses content scripts to run JavaScript on websites or offer a popup modal, you can run an e2e test for that using WebdriverIO. ### firefox-profile-service You want to run your Firefox browser with a specific extension or need to set a couple preferences? Selenium allows you to use a profile for the Firefox browser by passing this profile as base64 string to the moz:firefoxOptions.profile property in your desired capabilities. This requires building that profile and converting it into base64. This service for the wdio testrunner takes the work of compiling the profile out of your hand and lets you define your desired options comfortably from the wdio.conf.js file. - [Firefox Profile Service](/docs/firefox-profile-service.md): You want to run your Firefox browser with a specific extension or need to set a couple preferences? Selenium allows you to use a profile for the Firefox browser by passing this profile as base64 string to the moz:firefoxOptions.profile property in your desired capabilities. This requires building that profile and converting it into base64. This service for the wdio testrunner takes the work of compiling the profile out of your hand and lets you define your desired options comfortably from the wdio.conf.js file. ### flowcharts - [Create worker process](/docs/flowcharts/createlocalworkerprocess.md): This flowchart explains how a worker process is created. - [High level overview](/docs/flowcharts/highleveloverview.md): Flow chart provides a high level overview of how the WebdriverIO ecosystem interacts with the core packages. - [Test Execution](/docs/flowcharts/testexecution.md): This flowchart explains the test execution process and the interaction between @wdio/runner and the most of the other WebdriverIO packages. - [WDIO Commands](/docs/flowcharts/wdiocommands.md): This flowchart provides a high level overview of the @wdio/cli run, repl, config and install commands. ### flutter-testing - [Base Appium Configuration](/docs/flutter-testing/base-appium-configuration.md): WebdriverIO uses Appium to run tests across mobile emulators, simulators, and real devices. The @wdio/appium-service automatically manages the Appium server lifecycle during test execution. - [Introduction](/docs/flutter-testing/introduction.md): This guide covers configuring, structuring, and running End-to-End (E2E) tests for Flutter applications using WebdriverIO and Appium. - [Preparing the Flutter App](/docs/flutter-testing/preparing-flutter-application.md): For WebdriverIO and Appium to inspect and interact with internal elements inside the Flutter canvas, the application must expose a communication channel. This is achieved by enabling Flutter's test extension in the application's source code. - [Setting up WebdriverIO in your environment](/docs/flutter-testing/setting-up-webdriverio.md): The wdio.conf.ts file is the core configuration file of any WebdriverIO project. This is where you define where tests run, which test frameworks to use, and the necessary capabilities for Appium to correctly initialize the Flutter application. - [Writing Tests](/docs/flutter-testing/writing-tests.md): This section covers the practical structure for creating automated test scenarios, how to interact directly with Flutter's internal component tree using WebdriverIO. ### frameworks WebdriverIO Runner has built-in support for Mocha, Jasmine, and Cucumber.js. You can also integrate it with 3rd-party open-source frameworks, such as Serenity/JS. - [Frameworks](/docs/frameworks.md): WebdriverIO Runner has built-in support for Mocha, Jasmine, and Cucumber.js. You can also integrate it with 3rd-party open-source frameworks, such as Serenity/JS. ### gettingstarted Welcome to the WebdriverIO documentation. It will help you to get started fast. If you run into problems, you can find help and answers on our Discord Support Server or you can hit us on 𝕏. - [Getting Started](/docs/gettingstarted.md): Welcome to the WebdriverIO documentation. It will help you to get started fast. If you run into problems, you can find help and answers on our Discord Support Server or you can hit us on 𝕏. ### githubactions If your repository is hosted on Github, you can use Github Actions to run your tests on Github's infrastructure. - [Github Actions](/docs/githubactions.md): If your repository is hosted on Github, you can use Github Actions to run your tests on Github's infrastructure. ### gmangiapelo-wdio-azure-devops-service @gmangiapelo/wdio-azure-devops-service is a 3rd party package, for more information please see GitHub | npm - [Azure DevOps Test Plans Service](/docs/gmangiapelo-wdio-azure-devops-service.md): @gmangiapelo/wdio-azure-devops-service is a 3rd party package, for more information please see GitHub | npm ### headless-and-xvfb How WebdriverIO uses Xvfb for headless testing on Linux, configuration options, CI recipes, and troubleshooting. - [Headless & Xvfb with the Testrunner](/docs/headless-and-xvfb.md): How WebdriverIO uses Xvfb for headless testing on Linux, configuration options, CI recipes, and troubleshooting. ### jenkins WebdriverIO offers a tight integration to CI systems like Jenkins. With the junit reporter, you can easily debug your tests as well as keep track of your test results. The integration is pretty easy. - [Jenkins](/docs/jenkins.md): WebdriverIO offers a tight integration to CI systems like Jenkins. With the junit reporter, you can easily debug your tests as well as keep track of your test results. The integration is pretty easy. ### json-reporter Installation - [Json Reporter](/docs/json-reporter.md): Installation ### junit-reporter A WebdriverIO reporter that creates Jenkins compatible XML based JUnit reports - [Junit Reporter](/docs/junit-reporter.md): A WebdriverIO reporter that creates Jenkins compatible XML based JUnit reports ### lighthouse-service A WebdriverIO service that allows you to run accessibility and performance tests with Google Lighthouse. - [Lighthouse Service](/docs/lighthouse-service.md): A WebdriverIO service that allows you to run accessibility and performance tests with Google Lighthouse. ### mcp What can it do? - [MCP (Model Context Protocol)](/docs/mcp.md): What can it do? - [Cloud Providers](/docs/mcp/cloud-providers.md): The WebdriverIO MCP server has native support for running browser and mobile automation sessions on cloud device farms. No local drivers, emulators, or simulators required. Four providers are supported: - [Configuration](/docs/mcp/configuration.md): This page documents all configuration options for the WebdriverIO MCP server. - [FAQ](/docs/mcp/faq.md): Frequently asked questions about WebdriverIO MCP. - [Resources](/docs/mcp/resources.md): MCP resources provide read-only access to live session state. Unlike tools, resources are pulled by the AI model at will; they don't execute actions. All resources use the wdio:// URI scheme. - [Selectors](/docs/mcp/selectors.md): The WebdriverIO MCP server supports multiple selector strategies for locating elements on web pages and mobile apps. - [Tools](/docs/mcp/tools.md): The WebdriverIO MCP server exposes 29 tools organized by function. Tools marked browser-only require a platform "ios" or platform: "android". - [Transport](/docs/mcp/transport.md): The WebdriverIO MCP server supports two transport modes: stdio (default) and HTTP. ### mocksandspies WebdriverIO comes with built-in support for modifying network responses that allows you to focus testing your frontend application without having to setup your backend or a mock server. You can define custom responses for web resources like REST API requests in your test and modify them dynamically. - [Request Mocks and Spies](/docs/mocksandspies.md): WebdriverIO comes with built-in support for modifying network responses that allows you to focus testing your frontend application without having to setup your backend or a mock server. You can define custom responses for web resources like REST API requests in your test and modify them dynamically. ### multiremote WebdriverIO allows you to run multiple automated sessions in a single test. This becomes handy when you’re testing features that require multiple users (for example, chat or WebRTC applications). - [Multiremote](/docs/multiremote.md): WebdriverIO allows you to run multiple automated sessions in a single test. This becomes handy when you’re testing features that require multiple users (for example, chat or WebRTC applications). ### ocr-testing - [CLI Wizard](/docs/ocr-testing/cli-wizard.md): You can validate which text can be found in an image without running a test by using the OCR CLI Wizard. The only thing that are needed are: - [Getting Started](/docs/ocr-testing/getting-started.md): Installation - [Test execution time](/docs/ocr-testing/more-test-optimization.md): By default, this module will check if you have a local installation of Tesseract on your machine/in your pipeline. If you don't have a local installation it will automatically use a NodeJS version. This might cause some slowness because the image processing will be done by Node.js. NodeJS is not the best system to do - [ocrClickOnText](/docs/ocr-testing/ocr-click-on-text.md): Click on an element based on the provided texts. The command will search for the provided text and try to find a match based on Fuzzy Logic from Fuse.js. This means that if you might provide a selector with a typo, or the found text might not be a 100% match it will still try to give you back an element. See the logs below. - [Frequently Asked Questions](/docs/ocr-testing/ocr-faq.md): My tests are very slow - [ocrGetElementPositionByText](/docs/ocr-testing/ocr-get-element-position-by-text.md): Get the position of a text on the screen. The command will search for the provided text and try to find a match based on Fuzzy Logic from Fuse.js. This means that if you might provide a selector with a typo, or the found text might not be a 100% match it will still try to give you back an element. See the logs below. - [ocrGetText](/docs/ocr-testing/ocr-get-text.md): Get the text on an image. - [ocrSetValue](/docs/ocr-testing/ocr-set-value.md): Send a sequence of key strokes to an element. It will: - [OCR Testing](/docs/ocr-testing/ocr-testing.md): Automated testing on mobile native apps and desktop sites can be particularly challenging when dealing with elements that lack unique identifiers. Standard WebdriverIO selectors may not always help you. Enter the world of the @wdio/ocr-service, a powerful service that leverages OCR (Optical Character Recognition) to search, wait for, and interact with on-screen elements based on their visible text. - [ocrWaitForTextDisplayed](/docs/ocr-testing/ocr-wait-for-text-displayed.md): Wait for a specific text to be displayed on the screen. ### organizingsuites As projects grow, inevitably more and more integration tests are added. This increases build time and slows productivity. - [Organizing Test Suite](/docs/organizingsuites.md): As projects grow, inevitably more and more integration tests are added. This increases build time and slows productivity. ### pageobjects Version 5 of WebdriverIO was designed with Page Object Pattern support in mind. By introducing the "elements as first class citizens" principle, it is now possible to build up large test suites using this pattern. - [Page Object Pattern](/docs/pageobjects.md): Version 5 of WebdriverIO was designed with Page Object Pattern support in mind. By introducing the "elements as first class citizens" principle, it is now possible to build up large test suites using this pattern. ### parameterize-tests You can simply parameterize tests on a test level, via simple for loops e.g.: - [Parameterize Tests](/docs/parameterize-tests.md): You can simply parameterize tests on a test level, via simple for loops e.g.: ### percy-overview Introduction - [Unlocking Percy - An Overview](/docs/percy-overview.md): Introduction ### protractor-migration This tutorial is for people who are using Protractor and want to migrate their framework to WebdriverIO. It was initiated after the Angular team has announced that Protractor won't be longer supported. WebdriverIO has been influenced by a lot of Protractors design decisions which is why it is probably the closest framework to migrate over. The WebdriverIO team appreciates the work of every single Protractor contributor and hopes that this tutorial makes the transition to WebdriverIO easy and straightforward. - [From Protractor](/docs/protractor-migration.md): This tutorial is for people who are using Protractor and want to migrate their framework to WebdriverIO. It was initiated after the Angular team has announced that Protractor won't be longer supported. WebdriverIO has been influenced by a lot of Protractors design decisions which is why it is probably the closest framework to migrate over. The WebdriverIO team appreciates the work of every single Protractor contributor and hopes that this tutorial makes the transition to WebdriverIO easy and straightforward. ### proxy You can tunnel two different types of request through a proxy: - [Proxy Setup](/docs/proxy.md): You can tunnel two different types of request through a proxy: ### qajonatasmartins-wdio-google-chat-service @qajonatasmartins/wdio-google-chat-service is a 3rd party package, for more information please see GitHub | npm - [Google Chat Service](/docs/qajonatasmartins-wdio-google-chat-service.md): @qajonatasmartins/wdio-google-chat-service is a 3rd party package, for more information please see GitHub | npm ### record Chrome DevTools has a Recorder panel that allows users to record and playback automated steps within Chrome. These steps can be exported into WebdriverIO tests with an extension making writing test very easy. - [Record Tests](/docs/record.md): Chrome DevTools has a Recorder panel that allows users to record and playback automated steps within Chrome. These steps can be exported into WebdriverIO tests with an extension making writing test very easy. ### repl With v4.5.0, WebdriverIO introduced a REPL interface that helps you to not only learn the framework API, but also debug and inspect your tests. It can be used in multiple ways. - [REPL interface](/docs/repl.md): With v4.5.0, WebdriverIO introduced a REPL interface that helps you to not only learn the framework API, but also debug and inspect your tests. It can be used in multiple ways. ### retry You can rerun certain tests with the WebdriverIO testrunner that turn out to be unstable due to things like a flaky network or race conditions. (However, it is not recommended to simply increase the rerun rate if tests become unstable!) - [Retry Flaky Tests](/docs/retry.md): You can rerun certain tests with the WebdriverIO testrunner that turn out to be unstable due to things like a flaky network or race conditions. (However, it is not recommended to simply increase the rerun rate if tests become unstable!) ### runner A runner in WebdriverIO orchestrates how and where tests are being run when using the testrunner. WebdriverIO currently supports two different types of runner: local and browser runner. - [Runner](/docs/runner.md): A runner in WebdriverIO orchestrates how and where tests are being run when using the testrunner. WebdriverIO currently supports two different types of runner: local and browser runner. ### sap_oss-wdio-qmate-service @saposs/wdio-qmate-service is a 3rd party package, for more information please see GitHub | npm - [Qmate Service](/docs/sap_oss-wdio-qmate-service.md): @saposs/wdio-qmate-service is a 3rd party package, for more information please see GitHub | npm ### sauce-service WebdriverIO service that provides a better integration into Sauce Labs. This service can be used for: - [Sauce Service](/docs/sauce-service.md): WebdriverIO service that provides a better integration into Sauce Labs. This service can be used for: ### security WebdriverIO has the security aspect in mind when providing solutions. Below are some ways to better secure your test. - [Security](/docs/security.md): WebdriverIO has the security aspect in mind when providing solutions. Below are some ways to better secure your test. ### selectors The WebDriver Protocol provides several selector strategies to query an element. WebdriverIO simplifies them to keep selecting elements simple. Please note that even though the command to query elements is called $ and $$, they have nothing to do with jQuery or the Sizzle Selector Engine. - [Selectors](/docs/selectors.md): The WebDriver Protocol provides several selector strategies to query an element. WebdriverIO simplifies them to keep selecting elements simple. Please note that even though the command to query elements is called $ and $$, they have nothing to do with jQuery or the Sizzle Selector Engine. ### seleniumgrid You can use WebdriverIO with your existing Selenium Grid instance. To connect your tests to Selenium Grid, you just need to update the options in your test runner configurations. - [Selenium Grid](/docs/seleniumgrid.md): You can use WebdriverIO with your existing Selenium Grid instance. To connect your tests to Selenium Grid, you just need to update the options in your test runner configurations. ### serenity-js-html-reporter @serenity-js/html-reporter is a 3rd party package, for more information please see GitHub | npm - [Serenity/JS HTML Reporter](/docs/serenity-js-html-reporter.md): @serenity-js/html-reporter is a 3rd party package, for more information please see GitHub | npm ### setuptypes WebdriverIO can be used for various purposes. It implements the WebDriver protocol API and can run a browser in an automated way. The framework is designed to work in any arbitrary environment and for any kind of task. It is independent from any 3rd party frameworks and only requires Node.js to run. - [Setup Types](/docs/setuptypes.md): WebdriverIO can be used for various purposes. It implements the WebDriver protocol API and can run a browser in an automated way. The framework is designed to work in any arbitrary environment and for any kind of task. It is independent from any 3rd party frameworks and only requires Node.js to run. ### sharding By default, WebdriverIO runs tests in parallel and strives for optimal utilization of CPU cores on your machine. In order to achieve even greater parallelisation, you can further scale WebdriverIO test execution by running tests on multiple machines simultaneously. We call this mode of operation "sharding". - [Sharding](/docs/sharding.md): By default, WebdriverIO runs tests in parallel and strives for optimal utilization of CPU cores on your machine. In order to achieve even greater parallelisation, you can further scale WebdriverIO test execution by running tests on multiple machines simultaneously. We call this mode of operation "sharding". ### shared-store-service Exchange data between main process and workers (specs). - [Shared Store Service](/docs/shared-store-service.md): Exchange data between main process and workers (specs). ### snapshot Snapshot tests can be very useful for asserting a wide range of aspects of your component or logic at the same time. In WebdriverIO you can take snapshots of any arbitrary object as well as a WebElement DOM structure or WebdriverIO command results. - [Snapshot](/docs/snapshot.md): Snapshot tests can be very useful for asserting a wide range of aspects of your component or logic at the same time. In WebdriverIO you can take snapshots of any arbitrary object as well as a WebElement DOM structure or WebdriverIO command results. ### spec-reporter A WebdriverIO plugin to report in spec style. - [Spec Reporter](/docs/spec-reporter.md): A WebdriverIO plugin to report in spec style. ### sponsor WebdriverIO, an open-source project under the MIT license, is freely accessible for use. The sustainability of this expansive ecosystem, along with the development of innovative features, is made possible through the generous financial support of our sponsors, who contribute significantly to the maintenance and continuous growth of the project. - [Become a WebdriverIO Sponsor](/docs/sponsor.md): WebdriverIO, an open-source project under the MIT license, is freely accessible for use. The sustainability of this expansive ecosystem, along with the development of innovative features, is made possible through the generous financial support of our sponsors, who contribute significantly to the maintenance and continuous growth of the project. ### static-server-service Some projects are front-end assets only, and don't run on more than a static server. This service helps you to run a static file server during testing. - [Static Server Service](/docs/static-server-service.md): Some projects are front-end assets only, and don't run on more than a static server. This service helps you to run a static file server during testing. ### sumologic-reporter A WebdriverIO reporter that sends test results to Sumologic for data analyses - [Sumologic Reporter](/docs/sumologic-reporter.md): A WebdriverIO reporter that sends test results to Sumologic for data analyses ### testingbot-service WebdriverIO service that provides a better integration into TestingBot. It updates the job metadata ('name', 'passed', 'tags', 'public', 'build', 'extra') and runs TestingBot Tunnel if desired. - [Testingbot Service](/docs/testingbot-service.md): WebdriverIO service that provides a better integration into TestingBot. It updates the job metadata ('name', 'passed', 'tags', 'public', 'build', 'extra') and runs TestingBot Tunnel if desired. ### testplanit-wdio-reporter @testplanit/wdio-reporter is a 3rd party package, for more information please see GitHub | npm - [TestPlanIt Reporter Reporter](/docs/testplanit-wdio-reporter.md): @testplanit/wdio-reporter is a 3rd party package, for more information please see GitHub | npm ### testrunner WebdriverIO comes with its own test runner to help you start testing as quickly as possible. It is supposed to do all the work for you, allows integrate to 3rd party services, and helps you to run your tests as efficiently as possible. - [Testrunner](/docs/testrunner.md): WebdriverIO comes with its own test runner to help you start testing as quickly as possible. It is supposed to do all the work for you, allows integrate to 3rd party services, and helps you to run your tests as efficiently as possible. ### timeouts Each command in WebdriverIO is an asynchronous operation. A request is fired to the Selenium server (or a cloud service like Sauce Labs), and its response contains the result once the action has completed or failed. - [Timeouts](/docs/timeouts.md): Each command in WebdriverIO is an asynchronous operation. A request is fired to the Selenium server (or a cloud service like Sauce Labs), and its response contains the result once the action has completed or failed. ### tvlabs-wdio-service @tvlabs/wdio-service is a 3rd party package, for more information please see GitHub | npm - [TV Labs Service](/docs/tvlabs-wdio-service.md): @tvlabs/wdio-service is a 3rd party package, for more information please see GitHub | npm ### typescript You can write tests using TypeScript to get auto-completion and type safety. - [TypeScript Setup](/docs/typescript.md): You can write tests using TypeScript to get auto-completion and type safety. ### v6-migration This tutorial is for people who are still using v5 of WebdriverIO and want to migrate to v6 or to the latest version of WebdriverIO. As mentioned in our release blog post the changes for this version upgrade can be summarised as following: - [From v5 to v6](/docs/v6-migration.md): This tutorial is for people who are still using v5 of WebdriverIO and want to migrate to v6 or to the latest version of WebdriverIO. As mentioned in our release blog post the changes for this version upgrade can be summarised as following: ### v7-migration This tutorial is for people who are still using v6 of WebdriverIO and want to migrate to v7. As mentioned in our release blog post the changes are mostly under the hood and upgrading should be a straight forward process. - [From v6 to v7](/docs/v7-migration.md): This tutorial is for people who are still using v6 of WebdriverIO and want to migrate to v7. As mentioned in our release blog post the changes are mostly under the hood and upgrading should be a straight forward process. ### visual-testing What can it do? - [Visual Testing](/docs/visual-testing.md): What can it do? - [Elevate Your Visual Testing with Argos](/docs/visual-testing/argos.md): Introduction - [Compare Options](/docs/visual-testing/compare-options.md): Compare options are options that influence the way the comparison is being executed. - [Key Considerations for Optimal Use](/docs/visual-testing/considerations.md): Before diving into the powerful features of the @wdio/visual-service, it's crucial to understand some key considerations that ensure you get the most out of this tool. The following points are designed to guide you through best practices and common pitfalls, helping you achieve accurate and efficient visual testing results. These considerations are not just recommendations, but essential aspects to keep in mind for effectively utilizing the service in real-world scenarios. - [FAQ](/docs/visual-testing/faq.md): Do I need to use a save(Screen/Element/FullPageScreen) methods when I want to run check(Screen/Element/FullPageScreen)? - [For Mobile Application](/docs/visual-testing/integrate-with-app-percy.md): Integrate your WebdriverIO tests with App Percy - [For Web Application](/docs/visual-testing/integrate-with-percy.md): Integrate your WebdriverIO tests with Percy - [SmartUI](/docs/visual-testing/integrate-with-smartui.md): TestMu AI (Formerly LambdaTest) SmartUI provides AI-powered visual regression testing for your WebdriverIO tests. It captures screenshots, compares them against baselines, and highlights visual differences with intelligent comparison algorithms. - [Save Options](/docs/visual-testing/method-options.md): Methods options are the options that can be set per method. If the option has the same key as an option that has been set during the instantiation of the plugin, this method option will override the plugin option value. - [Methods](/docs/visual-testing/methods.md): The following methods are added to the global WebdriverIO browser-object. - [Default Options](/docs/visual-testing/service-options.md): Service options are the options that can be set when the service is instantiated and will be used for each method call. - [Test Output](/docs/visual-testing/test-output.md): This WebdriverIO demo site has been used for the example image output. - [Prerequisites](/docs/visual-testing/visual-reporter.md): The Visual Reporter is a new feature introduced in the @wdio/visual-service, starting from version v5.2.0. This reporter allows users to visualize the JSON diff reports generated by the Visual Testing service and transform them into a human-readable format. It helps teams better analyze and manage the visual testing results by providing a graphical interface for reviewing the output. - [Writing Tests](/docs/visual-testing/writing-tests.md): Testrunner Framework Support ### watcher With the WDIO testrunner you can watch files while you are working on them. They automatically rerun if you change either something in your app or in your test files. By adding a --watch flag when calling the wdio command the testrunner will wait for file changes after it ran all tests, e.g. - [Watch Test Files](/docs/watcher.md): With the WDIO testrunner you can watch files while you are working on them. They automatically rerun if you change either something in your app or in your test files. By adding a --watch flag when calling the wdio command the testrunner will wait for file changes after it ran all tests, e.g. ### wdio-aws-device-farm-service wdio-aws-device-farm-service is a 3rd party package, for more information please see GitHub | npm - [AWS Device Farm Service](/docs/wdio-aws-device-farm-service.md): wdio-aws-device-farm-service is a 3rd party package, for more information please see GitHub | npm ### wdio-camera-service wdio-camera-service is a 3rd party package, for more information please see GitHub | npm - [Camera Service Service](/docs/wdio-camera-service.md): wdio-camera-service is a 3rd party package, for more information please see GitHub | npm ### wdio-cleanuptotal-service wdio-cleanuptotal-service is a 3rd party package, for more information please see GitHub | npm - [CleanupTotal Service](/docs/wdio-cleanuptotal-service.md): wdio-cleanuptotal-service is a 3rd party package, for more information please see GitHub | npm ### wdio-cucumber-viewport-logger-service wdio-cucumber-viewport-logger-service is a 3rd party package, for more information please see GitHub | npm - [Cucumber Viewport Logger Service](/docs/wdio-cucumber-viewport-logger-service.md): wdio-cucumber-viewport-logger-service is a 3rd party package, for more information please see GitHub | npm ### wdio-cucumberjs-json-reporter wdio-cucumberjs-json-reporter is a 3rd party package, for more information please see GitHub | npm - [CucumberJS JSON Reporter](/docs/wdio-cucumberjs-json-reporter.md): wdio-cucumberjs-json-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-delta-reporter-service wdio-delta-reporter-service is a 3rd party package, for more information please see GitHub | npm - [Delta Reporter Reporter](/docs/wdio-delta-reporter-service.md): wdio-delta-reporter-service is a 3rd party package, for more information please see GitHub | npm ### wdio-devtools-service @wdio/devtools-service is a 3rd party package, for more information please see GitHub | npm - [DevTools (Test Debugging & Visualization) Service](/docs/wdio-devtools-service.md): @wdio/devtools-service is a 3rd party package, for more information please see GitHub | npm ### wdio-dioxus-service @wdio/dioxus-service is a 3rd party package, for more information please see GitHub | npm - [Dioxus Service](/docs/wdio-dioxus-service.md): @wdio/dioxus-service is a 3rd party package, for more information please see GitHub | npm ### wdio-docker-service wdio-docker-service is a 3rd party package, for more information please see GitHub | npm - [Docker Service](/docs/wdio-docker-service.md): wdio-docker-service is a 3rd party package, for more information please see GitHub | npm ### wdio-electron-service @wdio/electron-service is a 3rd party package, for more information please see GitHub | npm - [Electron Service](/docs/wdio-electron-service.md): @wdio/electron-service is a 3rd party package, for more information please see GitHub | npm ### wdio-eslinter-service wdio-eslinter-service is a 3rd party package, for more information please see GitHub | npm - [Auto-detect missing imports w/eslint Service](/docs/wdio-eslinter-service.md): wdio-eslinter-service is a 3rd party package, for more information please see GitHub | npm ### wdio-gmail-service wdio-gmail-service is a 3rd party package, for more information please see GitHub | npm - [Gmail Service](/docs/wdio-gmail-service.md): wdio-gmail-service is a 3rd party package, for more information please see GitHub | npm ### wdio-html-nice-reporter wdio-html-nice-reporter is a 3rd party package, for more information please see GitHub | npm - [wdio-html-nice-reporter](/docs/wdio-html-nice-reporter.md): wdio-html-nice-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-intercept-service wdio-intercept-service is a 3rd party package, for more information please see GitHub | npm - [Intercept Service](/docs/wdio-intercept-service.md): wdio-intercept-service is a 3rd party package, for more information please see GitHub | npm ### wdio-json-html-reporter wdio-json-html-reporter is a 3rd party package, for more information please see GitHub | npm - [JSON HTML Reporter Reporter](/docs/wdio-json-html-reporter.md): wdio-json-html-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-lambdatest-service wdio-lambdatest-service is a 3rd party package, for more information please see GitHub | npm - [TestMu AI (Formerly LambdaTest) Service](/docs/wdio-lambdatest-service.md): wdio-lambdatest-service is a 3rd party package, for more information please see GitHub | npm ### wdio-light-reporter wdio-light-reporter is a 3rd party package, for more information please see GitHub | npm - [Light Reporter Reporter](/docs/wdio-light-reporter.md): wdio-light-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-ng-apimock-service wdio-ng-apimock-service is a 3rd party package, for more information please see GitHub | npm - [Ng-apimock Service](/docs/wdio-ng-apimock-service.md): wdio-ng-apimock-service is a 3rd party package, for more information please see GitHub | npm ### wdio-novus-visual-regression-service wdio-novus-visual-regression-service is a 3rd party package, for more information please see GitHub | npm - [Novus Visual Regression Service](/docs/wdio-novus-visual-regression-service.md): wdio-novus-visual-regression-service is a 3rd party package, for more information please see GitHub | npm ### wdio-null-driver-service wdio-null-driver-service is a 3rd party package, for more information please see GitHub | npm - [Null Driver Service](/docs/wdio-null-driver-service.md): wdio-null-driver-service is a 3rd party package, for more information please see GitHub | npm ### wdio-nuxt-service wdio-nuxt-service is a 3rd party package, for more information please see GitHub | npm - [Nuxt Service Service](/docs/wdio-nuxt-service.md): wdio-nuxt-service is a 3rd party package, for more information please see GitHub | npm ### wdio-obsidian-service wdio-obsidian-service is a 3rd party package, for more information please see GitHub | npm - [Obsidian Plugin Testing Service](/docs/wdio-obsidian-service.md): wdio-obsidian-service is a 3rd party package, for more information please see GitHub | npm ### wdio-ocr-service @wdio/ocr-service is a 3rd party package, for more information please see GitHub | npm - [OCR Testing Service](/docs/wdio-ocr-service.md): @wdio/ocr-service is a 3rd party package, for more information please see GitHub | npm ### wdio-performancetotal-service wdio-performancetotal-service is a 3rd party package, for more information please see GitHub | npm - [PerformanceTotal Service](/docs/wdio-performancetotal-service.md): wdio-performancetotal-service is a 3rd party package, for more information please see GitHub | npm ### wdio-qunit-service wdio-qunit-service is a 3rd party package, for more information please see GitHub | npm - [QUnit Service](/docs/wdio-qunit-service.md): wdio-qunit-service is a 3rd party package, for more information please see GitHub | npm ### wdio-reportportal-reporter wdio-reportportal-reporter is a 3rd party package, for more information please see GitHub | npm - [Report Portal Reporter](/docs/wdio-reportportal-reporter.md): wdio-reportportal-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-reportportal-service wdio-reportportal-service is a 3rd party package, for more information please see GitHub | npm - [Report Portal Service](/docs/wdio-reportportal-service.md): wdio-reportportal-service is a 3rd party package, for more information please see GitHub | npm ### wdio-rerun-service wdio-rerun-service is a 3rd party package, for more information please see GitHub | npm - [Re-run Service](/docs/wdio-rerun-service.md): wdio-rerun-service is a 3rd party package, for more information please see GitHub | npm ### wdio-robonut-service wdio-robonut-service is a 3rd party package, for more information please see GitHub | npm - [Robonut Service](/docs/wdio-robonut-service.md): wdio-robonut-service is a 3rd party package, for more information please see GitHub | npm ### wdio-roku-service wdio-roku-service is a 3rd party package, for more information please see GitHub | npm - [Roku Service](/docs/wdio-roku-service.md): wdio-roku-service is a 3rd party package, for more information please see GitHub | npm ### wdio-slack-reporter wdio-slack-reporter is a 3rd party package, for more information please see GitHub | npm - [Slack Reporter Reporter](/docs/wdio-slack-reporter.md): wdio-slack-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-slack-service wdio-slack-service is a 3rd party package, for more information please see GitHub | npm - [Slack Service](/docs/wdio-slack-service.md): wdio-slack-service is a 3rd party package, for more information please see GitHub | npm ### wdio-tauri-service @wdio/tauri-service is a 3rd party package, for more information please see GitHub | npm - [Tauri Service](/docs/wdio-tauri-service.md): @wdio/tauri-service is a 3rd party package, for more information please see GitHub | npm ### wdio-teamcity-reporter wdio-teamcity-reporter is a 3rd party package, for more information please see GitHub | npm - [Teamcity Reporter Reporter](/docs/wdio-teamcity-reporter.md): wdio-teamcity-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-testrail-reporter @wdio/testrail-reporter is a 3rd party package, for more information please see GitHub | npm - [Testrail Reporter Reporter](/docs/wdio-testrail-reporter.md): @wdio/testrail-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-tesults-service wdio-tesults-service is a 3rd party package, for more information please see GitHub | npm - [Tesults Service](/docs/wdio-tesults-service.md): wdio-tesults-service is a 3rd party package, for more information please see GitHub | npm ### wdio-timeline-reporter wdio-timeline-reporter is a 3rd party package, for more information please see GitHub | npm - [Timeline Reporter](/docs/wdio-timeline-reporter.md): wdio-timeline-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-ui5-service wdio-ui5-service is a 3rd party package, for more information please see GitHub | npm - [UI5 Service](/docs/wdio-ui5-service.md): wdio-ui5-service is a 3rd party package, for more information please see GitHub | npm ### wdio-video-reporter wdio-video-reporter is a 3rd party package, for more information please see GitHub | npm - [Installation](/docs/wdio-video-reporter.md): wdio-video-reporter is a 3rd party package, for more information please see GitHub | npm ### wdio-visual-service @wdio/visual-service is a 3rd party package, for more information please see GitHub | npm - [Image Comparison (Visual Regression Testing) Service](/docs/wdio-visual-service.md): @wdio/visual-service is a 3rd party package, for more information please see GitHub | npm ### wdio-vscode-service wdio-vscode-service is a 3rd party package, for more information please see GitHub | npm - [VSCode Extension Testing Service](/docs/wdio-vscode-service.md): wdio-vscode-service is a 3rd party package, for more information please see GitHub | npm ### wdio-wait-for wdio-wait-for is a 3rd party package, for more information please see GitHub | npm - [Library of useful expected conditions Service](/docs/wdio-wait-for.md): wdio-wait-for is a 3rd party package, for more information please see GitHub | npm ### wdio-winappdriver-service wdio-winappdriver-service is a 3rd party package, for more information please see GitHub | npm - [winappdriver Service](/docs/wdio-winappdriver-service.md): wdio-winappdriver-service is a 3rd party package, for more information please see GitHub | npm ### wdio-wiremock-service wdio-wiremock-service is a 3rd party package, for more information please see GitHub | npm - [WireMock Service](/docs/wdio-wiremock-service.md): wdio-wiremock-service is a 3rd party package, for more information please see GitHub | npm ### wdio-ywinappdriver-service wdio-ywinappdriver-service is a 3rd party package, for more information please see GitHub | npm - [ywinappdriver Service](/docs/wdio-ywinappdriver-service.md): wdio-ywinappdriver-service is a 3rd party package, for more information please see GitHub | npm ### wdio-zafira-listener-service wdio-zafira-listener-service is a 3rd party package, for more information please see GitHub | npm - [Zafira Listener Service](/docs/wdio-zafira-listener-service.md): wdio-zafira-listener-service is a 3rd party package, for more information please see GitHub | npm ### webdriver-mock-service Internal mock service to stub all endpoints for testing purposes. - [Webdriver Mock Service](/docs/webdriver-mock-service.md): Internal mock service to stub all endpoints for testing purposes. ### why-webdriverio WebdriverIO is a progressive automation framework built to automate modern web and mobile applications. It simplifies the interaction with your app and provides a set of plugins that help you create a scalable, robust and stable test suite. - [Why Webdriver.IO?](/docs/why-webdriverio.md): WebdriverIO is a progressive automation framework built to automate modern web and mobile applications. It simplifies the interaction with your app and provides a set of plugins that help you create a scalable, robust and stable test suite.