* New translations GettingStarted.md (Polish) * New translations GettingStarted.md (Tamil) * New translations GettingStarted.md (French) * New translations GettingStarted.md (Spanish) * New translations GettingStarted.md (German) * New translations GettingStarted.md (Russian) * New translations GettingStarted.md (Ukrainian) * New translations GettingStarted.md (Chinese Simplified) * New translations GettingStarted.md (Persian) * New translations GettingStarted.md (Hindi) * New translations Browser.md (Chinese Simplified) * New translations BoilerplateProjects.md (Chinese Simplified) * New translations Capabilities.md (Chinese Simplified) * New translations Configuration.md (Chinese Simplified) * New translations Protocols.md (Chinese Simplified) * New translations GettingStarted.md (Chinese Simplified) * New translations API.md (Chinese Simplified) * New translations Accessibility.md (Chinese Simplified) * New translations Assertion.md (Chinese Simplified) * New translations AutoWait.md (Chinese Simplified) * New translations Autocompletion.md (Chinese Simplified) * New translations AutomationProtocols.md (Chinese Simplified) * New translations BambooIntegration.md (Chinese Simplified) * New translations CloudServices.md (Chinese Simplified) * New translations ComponentTesting.md (Chinese Simplified) * New translations ConfigurationFile.md (Chinese Simplified) * New translations CustomCommands.md (Chinese Simplified) * New translations CustomReporter.md (Chinese Simplified) * New translations CustomServices.md (Chinese Simplified) * New translations Debugging.md (Chinese Simplified) * New translations Docker.md (Chinese Simplified) * New translations DriverBinaries.md (Chinese Simplified) * New translations Enterprise.md (Chinese Simplified) * New translations GithubActions.md (Chinese Simplified) * New translations JenkinsIntegration.md (Chinese Simplified) * New translations MocksAndSpies.md (Chinese Simplified) * New translations Multiremote.md (Chinese Simplified) * New translations OrganizingTestSuites.md (Chinese Simplified) * New translations PageObjects.md (Chinese Simplified) * New translations ProtractorMigration.md (Chinese Simplified) * New translations Record.md (Chinese Simplified) * New translations Retry.md (Chinese Simplified) * New translations Runner.md (Chinese Simplified) * New translations Selectors.md (Chinese Simplified) * New translations SetupTypes.md (Chinese Simplified) * New translations SyncAsyncMigration.md (Chinese Simplified) * New translations Testrunner.md (Chinese Simplified) * New translations Timeouts.md (Chinese Simplified) * New translations TypeScript.md (Chinese Simplified) * New translations WatchFiles.md (Chinese Simplified) * New translations WhyWebdriverIO.md (Chinese Simplified) * New translations Element.md (Chinese Simplified) * New translations Environment.md (Chinese Simplified) * New translations Globals.md (Chinese Simplified) * New translations Mock.md (Chinese Simplified) * New translations Modules.md (Chinese Simplified) * New translations Lit.md (Chinese Simplified) * New translations Preact.md (Chinese Simplified) * New translations React.md (Chinese Simplified) * New translations Solid.md (Chinese Simplified) * New translations Svelte.md (Chinese Simplified) * New translations Vue.md (Chinese Simplified) * New translations mocking.md (Chinese Simplified) * New translations repl.md (Chinese Simplified) * New translations v6Migration.md (Chinese Simplified) * New translations v7Migration.md (Chinese Simplified) * New translations Donate.md (Chinese Simplified) * New translations Materials.md (Chinese Simplified) * New translations OpenOfficeHours.md (Chinese Simplified) * New translations Support.md (Chinese Simplified) * New translations WebExtensionTesting.md (Chinese Simplified) * New translations TipsAndTricks.md (Chinese Simplified) * New translations Donate.md (Tamil) * New translations Donate.md (Tamil) * New translations Donate.md (Tamil) * New translations Materials.md (Tamil) * New translations OpenOfficeHours.md (Tamil) * New translations CreateLocalWorkerProcess.md (Tamil) * New translations HighLevelOverview.md (Tamil) * New translations TestExecution.md (Tamil) * New translations Support.md (Tamil) * New translations Team.md (Tamil) * New translations TestExecution.md (Tamil) * New translations WDIOCommands.md (Tamil) * New translations TipsAndTricks.md (Tamil) * New translations Appium.md (Tamil) * New translations code.json (Arabic) * New translations options.json (Arabic) * New translations current.json (Arabic) * New translations current.json (Arabic) * New translations footer.json (Arabic) * New translations navbar.json (Arabic) * New translations API.md (Arabic) * New translations Accessibility.md (Arabic) * New translations Assertion.md (Arabic) * New translations AutoWait.md (Arabic) * New translations Autocompletion.md (Arabic) * New translations AutomationProtocols.md (Arabic) * New translations Babel.md (Arabic) * New translations BambooIntegration.md (Arabic) * New translations BoilerplateProjects.md (Arabic) * New translations Capabilities.md (Arabic) * New translations CloudServices.md (Arabic) * New translations ComponentTesting.md (Arabic) * New translations Configuration.md (Arabic) * New translations ConfigurationFile.md (Arabic) * New translations CustomCommands.md (Arabic) * New translations CustomReporter.md (Arabic) * New translations CustomServices.md (Arabic) * New translations Debugging.md (Arabic) * New translations Docker.md (Arabic) * New translations DriverBinaries.md (Arabic) * New translations Enterprise.md (Arabic) * New translations Flowcharts.md (Arabic) * New translations Frameworks.md (Arabic) * New translations GettingStarted.md (Arabic) * New translations GithubActions.md (Arabic) * New translations JenkinsIntegration.md (Arabic) * New translations MocksAndSpies.md (Arabic) * New translations Multiremote.md (Arabic) * New translations OrganizingTestSuites.md (Arabic) * New translations PageObjects.md (Arabic) * New translations ProtractorMigration.md (Arabic) * New translations Proxy.md (Arabic) * New translations Record.md (Arabic) * New translations Retry.md (Arabic) * New translations Runner.md (Arabic) * New translations Selectors.md (Arabic) * New translations SetupTypes.md (Arabic) * New translations SyncAsyncMigration.md (Arabic) * New translations Testrunner.md (Arabic) * New translations Timeouts.md (Arabic) * New translations TypeScript.md (Arabic) * New translations WatchFiles.md (Arabic) * New translations WhyWebdriverIO.md (Arabic) * New translations Browser.md (Arabic) * New translations Element.md (Arabic) * New translations Environment.md (Arabic) * New translations Globals.md (Arabic) * New translations Mock.md (Arabic) * New translations Modules.md (Arabic) * New translations Protocols.md (Arabic) * New translations Lit.md (Arabic) * New translations Preact.md (Arabic) * New translations React.md (Arabic) * New translations Solid.md (Arabic) * New translations Svelte.md (Arabic) * New translations Vue.md (Arabic) * New translations coverage.md (Arabic) * New translations mocking.md (Arabic) * New translations CreateLocalWorkerProcess.md (Arabic) * New translations HighLevelOverview.md (Arabic) * New translations TestExecution.md (Arabic) * New translations WDIOCommands.md (Arabic) * New translations repl.md (Arabic) * New translations v6Migration.md (Arabic) * New translations v7Migration.md (Arabic) * New translations Donate.md (Arabic) * New translations Materials.md (Arabic) * New translations OpenOfficeHours.md (Arabic) * New translations Support.md (Arabic) * New translations Team.md (Arabic) * New translations WebExtensionTesting.md (Arabic) * New translations TipsAndTricks.md (Arabic) * New translations Appium.md (Arabic) * New translations Support.md (Polish) * New translations Browser.md (Polish) * New translations Support.md (Polish) * New translations Team.md (Polish) * New translations Globals.md (Tamil) * New translations Browser.md (Polish) * New translations coverage.md (Tamil) * New translations Browser.md (Polish) * New translations API.md (Tamil) * New translations API.md (Tamil) * New translations Browser.md (Tamil) * New translations Browser.md (Tamil) * New translations Browser.md (Tamil) * New translations Element.md (Tamil) * New translations Lit.md (Tamil) * New translations React.md (Tamil) * New translations React.md (Tamil) * New translations Solid.md (Tamil) * New translations Svelte.md (Tamil) * New translations Preact.md (Tamil) * New translations Solid.md (Tamil) * New translations Svelte.md (Tamil) * New translations Vue.md (Tamil) * New translations coverage.md (Tamil) * New translations Autocompletion.md (Tamil) * New translations Preact.md (Tamil) * New translations coverage.md (Tamil) * New translations mocking.md (Tamil) * New translations JenkinsIntegration.md (Tamil) * New translations Vue.md (Tamil) * New translations mocking.md (Tamil) * New translations TipsAndTricks.md (Tamil) * New translations JenkinsIntegration.md (Tamil) * New translations repl.md (Tamil) * New translations repl.md (Tamil) * New translations Configuration.md (Persian) * New translations Babel.md (Tamil) * New translations BambooIntegration.md (Tamil) * New translations repl.md (Tamil) * New translations Configuration.md (Persian) * New translations BambooIntegration.md (Tamil) * New translations BambooIntegration.md (Tamil) * New translations MocksAndSpies.md (Tamil) * New translations MocksAndSpies.md (Tamil) * New translations DriverBinaries.md (Tamil) * New translations Flowcharts.md (Tamil) * New translations MocksAndSpies.md (Tamil)
2.9 KiB
| id | title |
|---|---|
| react | React |
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.
Setup
To setup WebdriverIO within your React project, follow the instructions in our component testing docs. Make sure to select react as preset within your runner options, e.g.:
// wdio.conf.js
export const config = {
// ...
runner: ['browser', {
preset: 'react'
}],
// ...
}
:::info
If you are already using Vite as development server you can also just re-use your configuration in vite.config.ts within your WebdriverIO config. For more information, see viteConfig in runner options.
:::
The React preset requires @vitejs/plugin-react to be installed. Also we recommend using Testing Library for rendering the component into the test page. Therefor you'll need to install the following additional dependencies:
npm install --save-dev @testing-library/react @vitejs/plugin-react
You can then start the tests by running:
npx wdio run ./wdio.conf.js
Writing Tests
Given you have the following React component:
import React, { useState } from 'react'
function App() {
const [theme, setTheme] = useState('light')
const toggleTheme = () => {
const nextTheme = theme === 'light' ? 'dark' : 'light'
setTheme(nextTheme)
}
return <button onClick={toggleTheme}>
Current theme: {theme}
</button>
}
export default App
In your test use the render method from @testing-library/react to attach the component to the test page. To interact with the component we recommend to use WebdriverIO commands as they behave more close to actual user interactions, e.g.:
import { expect } from '@wdio/globals'
import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import * as matchers from '@testing-library/jest-dom/matchers'
expect.extend(matchers)
import App from './components/Component.jsx'
describe('React Component Testing', () => {
it('Test theme button toggle', async () => {
render(<App />)
const buttonEl = screen.getByText(/Current theme/i)
await $(buttonEl).click()
expect(buttonEl).toContainHTML('dark')
})
})
You can find a full example of a WebdriverIO component test suite for React in our example repository.