Problèmes
Le testeur WDIO est fourni avec une bibliothèque d'assertions intégrée qui vous permet de faire de puissantes assertions sur différents aspects du navigateur ou des éléments de votre application (web). Il étend la fonctionnalité Jests Matchers avec supplémentaire, pour les tests optimisés e2e, les matchers, par exemple.:
const $button = attendre $('button')
attendent expect($button).toBeDisplayed()
ou
const selectOptions = wait $$('form select>option')
// assurez-vous qu'il y a au moins une option dans select
wait expect(selectOptions).toHaveChildren({ gte: 1 })
Pour la liste complète, consultez la documentation expect API doc.
Migration à partir de Canary
Chai et expect-webdriverio peuvent coexister, et avec quelques ajustements mineurs, une transition en douceur vers expect-webdriverio peut être réalisée. Si vous avez mis à niveau vers WebdriverIO v6, alors par défaut, vous aurez accès à toutes les assertions de expect-webdriverio
hors de la boîte. Cela signifie que partout où vous utilisez vous attendez
vous appellerez une assertion expect-webdriverio
. C'est-à-dire, à moins que vous ne définissiez injectGlobals
à false
ou que vous n'ayez explicitement outrepassé le global attendent
d'utiliser Chai. Dans ce cas, vous n'auriez accès à aucune des assertions expect-webdriverio sans importer explicitement le paquet expect-webdriverio où vous en avez besoin.
Ce guide montrera des exemples de migration depuis Chai si elle a été remplacée localement et comment migrer depuis Chai si elle a été remplacée dans le monde entier.
Locale
Assume Chai a été importé explicitement dans un fichier, par exemple:
// myfile.js - original code
import { expect as expectChai } from 'chai'
describe('Homepage', () => {
it('should assert', async () => {
await browser.url('./')
expectChai(await browser.getUrl()).to.include('/login')
})
})
Pour migrer ce code, supprimez l'importation de Chai et utilisez la nouvelle méthode d'assertion 'expect-webdriverio' toHaveUrl
à la place :
// myfile.js - migrated code
describe('Homepage', () => {
it('should assert', async () => {
await browser.url('./')
await expect(browser).toHaveUrl('/login') // new expect-webdriverio API method https://webdriver.io/docs/api/expect-webdriverio.html#tohaveurl
});
});
Si vous voulez utiliser à la fois Chai et expect-webdriverio dans le même fichier, vous conserverez l'import de Chai et vous attendez
par défaut à l'assertion expect-webdriverio, par exemple:
// myfile.js
import { expect as expectChai } from 'chai'
import { expect as expectWDIO } from '@wdio/globals'
describe('Element', () => {
it('should be displayed', async () => {
const isDisplayed = await $("#element").isDisplayed()
expectChai(isDisplayed).to.equal(true); // Chai assertion
})
});
describe('Other element', () => {
it('should not be displayed', async () => {
await expectWDIO($("#element")).not.toBeDisplayed(); // expect-webdriverio assertion
})
})
Global
Supposons que s'attendent à
a été remplacée globalement pour utiliser Chai. Afin d'utiliser les assertions webdriverio attendues, nous devons définir globalement une variable dans le crochet "avant", par exemple:
// wdio.conf.js
before: async () => {
await import('expect-webdriverio');
global.wdioExpect = global.expect;
const chai = await import('chai');
global.expect = chai.expect;
}
Maintenant Chai et expect-webdriverio peuvent être utilisés les uns avec les autres. Dans votre code, vous utiliseriez les assertions Chai et expect-webdriverio comme suit:
// myfile.jsdescribe('Element from 'chai'import from '@wdio/globals'
describe('Element', () => {
it('should be displayed', async () => {
const isDisplayed = await $("#element").isDisplayed()
expectChai(isDisplayed).to.equal(true); // Chai assertion
})
});
describe('Other element', () => {
it('should not be displayed', async () => {
await expectWDIO($("#element")).not.toBeDisplayed(); // expect-webdriverio assertion
})
});
Pour migrer vous déplaceriez lentement chaque assertion Chai vers expect-webdriverio. Une fois que toutes les assertions Chai ont été remplacées tout au long de la base de code, le crochet "avant" peut être supprimé. Une recherche globale et un remplacement pour remplacer toutes les instances de wdioExpect
à attendre
se terminera alors la migration.