Runner
Un runner dans WebdriverIO orchestre comment et oĂč les tests sont exĂ©cutĂ©s lors de l'utilisation du testrunner. WebdriverIO prend actuellement en charge deux types diffĂ©rents de runners : le runner local et le runner de navigateur.
Runner Localâ
Le Runner Local initialise votre framework (par exemple Mocha, Jasmine ou Cucumber) dans un processus de travail et exécute tous vos fichiers de test dans votre environnement Node.js. Chaque fichier de test est exécuté dans un processus de travail distinct par capacité, permettant une concurrence maximale. Chaque processus de travail utilise une seule instance de navigateur et exécute donc sa propre session de navigateur, permettant une isolation maximale.
Ătant donnĂ© que chaque test est exĂ©cutĂ© dans son propre processus isolĂ©, il n'est pas possible de partager des donnĂ©es entre les fichiers de test. Il existe deux façons de contourner ce problĂšme :
- utiliser le
@wdio/shared-store-servicepour partager des données entre tous les workers - regrouper les fichiers de spécification (en savoir plus dans Organisation de la suite de tests)
Si rien d'autre n'est défini dans le wdio.conf.js, le Runner Local est le runner par défaut dans WebdriverIO.
Installationâ
Pour utiliser le Runner Local, vous pouvez l'installer via :
npm install --save-dev @wdio/local-runner
Configurationâ
Le Runner Local est le runner par défaut dans WebdriverIO, il n'est donc pas nécessaire de le définir dans votre wdio.conf.js. Si vous souhaitez le définir explicitement, vous pouvez le faire comme suit :
// wdio.conf.js
export const {
// ...
runner: 'local',
// ...
}
Runner de Navigateurâ
Contrairement au Runner Local, le Runner de Navigateur initialise et exécute le framework dans le navigateur. Cela vous permet d'exécuter des tests unitaires ou des tests de composants dans un navigateur réel plutÎt que dans un JSDOM comme de nombreux autres frameworks de test.
Bien que JSDOM soit largement utilisé à des fins de test, ce n'est finalement pas un véritable navigateur et vous ne pouvez pas émuler des environnements mobiles avec lui. Avec ce runner, WebdriverIO vous permet d'exécuter facilement vos tests dans le navigateur et d'utiliser les commandes WebDriver pour interagir avec les éléments rendus sur la page.
Voici un aperçu de l'exécution de tests dans JSDOM par rapport au Runner de Navigateur WebdriverIO
| JSDOM | WebdriverIO Browser Runner | |
|---|---|---|
| 1. | Exécute vos tests dans Node.js en utilisant une réimplémentation des standards web, notamment les standards WHATWG DOM et HTML | Exécute votre test dans un navigateur réel et exécute le code dans un environnement que vos utilisateurs utilisent |
| 2. | Les interactions avec les composants ne peuvent ĂȘtre imitĂ©es que via JavaScript | Vous pouvez utiliser l'API WebdriverIO pour interagir avec les Ă©lĂ©ments via le protocole WebDriver |
| 3. | Le support Canvas nécessite des dépendances supplémentaires et a des limitations | Vous avez accÚs à la véritable API Canvas |
| 4. | JSDOM a certaines mises en garde et des API Web non prises en charge | Toutes les API Web sont prises en charge car les tests s'exécutent dans un navigateur réel |
| 5. | Impossible de détecter les erreurs entre navigateurs | Prise en charge de tous les navigateurs, y compris les navigateurs mobiles |
| 6. | Ne peut pas tester les états pseudo des éléments | Prise en charge des états pseudo tels que :hover ou :active |
Ce runner utilise Vite pour compiler votre code de test et le charger dans le navigateur. Il est livré avec des préréglages pour les frameworks de composants suivants :
- React
- Preact
- Vue.js
- Svelte
- SolidJS
- Stencil
Chaque fichier de test / groupe de fichiers de test s'exécute dans une seule page, ce qui signifie qu'entre chaque test, la page est rechargée pour garantir l'isolation entre les tests.
Installationâ
Pour utiliser le Runner de Navigateur, vous pouvez l'installer via :
npm install --save-dev @wdio/browser-runner
Configurationâ
Pour utiliser le Runner de Navigateur, vous devez définir une propriété runner dans votre fichier wdio.conf.js, par exemple :
// wdio.conf.js
export const {
// ...
runner: 'browser',
// ...
}
Options du Runnerâ
Le Runner de Navigateur permet les configurations suivantes :
presetâ
Si vous testez des composants utilisant l'un des frameworks mentionnĂ©s ci-dessus, vous pouvez dĂ©finir un prĂ©rĂ©glage qui garantit que tout est configurĂ© prĂȘt Ă l'emploi. Cette option ne peut pas ĂȘtre utilisĂ©e avec viteConfig.
Type : vue | svelte | solid | react | preact | stencil
Exemple :
export const {
// ...
runner: ['browser', {
preset: 'svelte'
}],
// ...
}
viteConfigâ
Définissez votre propre configuration Vite. Vous pouvez soit passer un objet personnalisé, soit importer un fichier vite.conf.ts existant si vous utilisez Vite.js pour le développement. Notez que WebdriverIO conserve des configurations Vite personnalisées pour configurer le harnais de test.
Type : string ou UserConfig ou (env: ConfigEnv) => UserConfig | Promise<UserConfig>
Exemple :
import viteConfig from '../vite.config.ts'
export const {
// ...
runner: ['browser', { viteConfig }],
// ou simplement :
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// ou utilisez une fonction si votre configuration vite contient beaucoup de plugins
// que vous souhaitez résoudre uniquement lorsque la valeur est lue
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}
headlessâ
Si dĂ©fini sur true, le runner mettra Ă jour les capacitĂ©s pour exĂ©cuter les tests en mode headless. Par dĂ©faut, ceci est activĂ© dans les environnements CI oĂč une variable d'environnement CI est dĂ©finie sur '1' ou 'true'.
Type : boolean
Défaut : false, défini sur true si la variable d'environnement CI est définie
rootDirâ
Répertoire racine du projet.
Type : string
Défaut : process.cwd()
coverageâ
WebdriverIO prend en charge les rapports de couverture de test via istanbul. Voir Options de couverture pour plus de détails.
Type : object
Défaut : undefined
Options de couvertureâ
Les options suivantes permettent de configurer les rapports de couverture.
enabledâ
Active la collecte de couverture.
Type : boolean
Défaut : false
includeâ
Liste des fichiers inclus dans la couverture sous forme de motifs glob.
Type : string[]
Défaut : [**]
excludeâ
Liste des fichiers exclus de la couverture sous forme de motifs glob.
Type : string[]
Défaut :
[
'coverage/**',
'dist/**',
'packages/*/test{,s}/**',
'**/*.d.ts',
'cypress/**',
'test{,s}/**',
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}spec.{js,cjs,mjs,ts,tsx,jsx}',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
'**/.{eslint,mocha,prettier}rc.{js,cjs,yml}',
]
extensionâ
Liste des extensions de fichiers que le rapport doit inclure.
Type : string | string[]
Défaut : ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']
reportsDirectoryâ
Répertoire dans lequel écrire le rapport de couverture.
Type : string
Défaut : ./coverage
reporterâ
Rapporteurs de couverture à utiliser. Voir la documentation d'istanbul pour une liste détaillée de tous les rapporteurs.
Type : string[]
Défaut : ['text', 'html', 'clover', 'json-summary']
perFileâ
Vérifier les seuils par fichier. Voir lines, functions, branches et statements pour les seuils réels.
Type : boolean
Défaut : false
cleanâ
Nettoyer les résultats de couverture avant d'exécuter les tests.
Type : boolean
Défaut : true
linesâ
Seuil pour les lignes.
Type : number
Défaut : undefined
functionsâ
Seuil pour les fonctions.
Type : number
Défaut : undefined
branchesâ
Seuil pour les branches.
Type : number
Défaut : undefined
statementsâ
Seuil pour les déclarations.
Type : number
Défaut : undefined
Limitationsâ
Lors de l'utilisation du runner de navigateur WebdriverIO, il est important de noter que les boĂźtes de dialogue bloquantes comme alert ou confirm ne peuvent pas ĂȘtre utilisĂ©es nativement. Cela est dĂ» au fait qu'elles bloquent la page web, ce qui signifie que WebdriverIO ne peut pas continuer Ă communiquer avec la page, provoquant un blocage de l'exĂ©cution.
Dans de telles situations, WebdriverIO fournit des mocks par défaut avec des valeurs de retour par défaut pour ces API. Cela garantit que si l'utilisateur utilise accidentellement des API web de popup synchrones, l'exécution ne se bloquera pas. Cependant, il est toujours recommandé à l'utilisateur de mocker ces API web pour une meilleure expérience. En savoir plus dans Mocking.
Exemplesâ
Assurez-vous de consulter la documentation sur les tests de composants et jetez un Ćil au dĂ©pĂŽt d'exemples pour des exemples utilisant ces frameworks et divers autres.