web-dev-qa-db-fra.com

TestCafe - Comment vérifier si un élément Web existe ou n'existe pas sans avoir échoué au test?

J'essaie d'écrire un script qui doit adapter son comportement de flux de travail selon qu'un objet de navigateur particulier trouvé par le sélecteur CSS existe ou n'existe pas.

Je ne veux pas utiliser une méthode document.getElementByID car ce n'est pas techniquement un sélecteur CSS, et toute notre entreprise est normalisée sur le sélecteur CSS, donc tout ce qui marche dans le DOM autre qu'un sélecteur CSS ne dépassera pas notre processus de révision de code en tous cas.

var thing = await things.thingSelector(thingName);
if (await t.expect(thing.exists).notOk()) {
   await t.click(things.OpenThing(thingName));
} else {
   return false;
}
return true;

Où se trouve thingSelector:

const thingSelector = name =>
  Selector('p.thing-header-title span')
    .withText(name)
    .parent('div.thing');

Où OpenThing est:

const OpenThing = name =>
    thingSelector(name)
        .find('a.thing-footer-item')
        .withText('Open');

J'ai besoin de pouvoir continuer l'exécution si l'objet n'est pas là et je vérifie qu'il existe, ou si l'objet est là et je vérifie qu'il n'existe pas, et aussi les cas où l'objet n'est pas là et il n'existe pas et l'objet n'est pas là et je vérifie qu'il n'existe pas.

Dans tous les cas, j'ai encore besoin de poursuivre le workflow.

J'ai essayé les deux côtés de la pièce logique:

if (!await t.expect(thing.exists).ok())

Et

if (await t.expect(thing.exists).notOk())

Si l'un des éléments ci-dessus n'échoue pas dans un scénario, il échouera dans l'autre, et l'autre échouera dans le scénario où le premier n'a pas échoué. J'ai besoin de quelque chose qui me donnera la logique, mais n'échouera jamais l'exécution du script et me permettra toujours de renvoyer True ou False selon que l'objet est présent ou non.

Merci d'avance de m'aider à résoudre ce problème, et aussi d'apprendre et de développer mes compétences Javascript!

13
Seth Eden

Vous pouvez vérifier la propriété async exists dans la condition if de la manière suivante:

if(await things.thingSelector(thingName).exists) {
    // do something 
} 
17

Vous pouvez utiliser les assertions suivantes pour tester les éléments d'existence et de non-existence:

test('Test existence and non-existence elements', async t => {
    await t
        .expect(Selector('#existing-element').exists)
        .expect(Selector('#non-existing-element').exists).notOk()
});
3
Mauricio Sánchez