TestCafe - Как проверить, существует ли веб-элемент или не существует без провала теста?

Я пытаюсь написать сценарий, который должен адаптировать его поведение рабочего процесса в зависимости от того, существует или нет какой-либо конкретный объект браузера, установленный в селекторе CSS.

Я не хочу использовать метод document.getElementByID, так как это не является технически селектором CSS, и все наше предприятие стандартизировано в селекторе CSS, поэтому все, что подходит к DOM другому, тогда селектор CSS не пройдет мимо нашего процесса проверки кода тем не мение.

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

Где вещьSelector:

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

Где OpenThing:

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

Мне нужно иметь возможность продолжить выполнение, если объекта нет, и я проверяю, что он существует, или если объект есть, и я проверяю, что он не существует, а также случаи, когда объекта нет. и его не существует, и объекта нет, и я проверяю, что его не существует.

Во всех случаях мне все равно нужно продолжить рабочий процесс.

Я пробовал обе стороны логической монеты:

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

А также

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

Если одно из указанных выше не терпит неудачу в одном сценарии, оно не будет выполнено в другом, а другое - в сценарии, который первый не завершился неудачей. Мне нужно что-то, что даст мне логику, но никогда не завершит выполнение скрипта и все же позволит мне возвращать True или False в зависимости от того, присутствует или нет объект.

Заранее благодарю за то, что помогли мне решить эту проблему, а также научиться и расти в своих навыках Javascript!

Ответ 1

Вы можете проверить свойство async exists в if следующим образом:

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

Ответ 2

Вы можете использовать следующие утверждения для проверки элементов существования и несуществования:

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