Стажер: проверка элементов, которых не должно быть

Я пишу функциональный тест для пользовательского выпадающего элемента управления, который мы создали, который имеет функциональность «только для чтения». Первоначальный план тестирования, который мы придумали для этого, заключался в том, чтобы убедиться, что «список» не рисуется при нажатии на раскрывающийся список, что обычно происходит. Разметка для списка не существует в DOM до тех пор, пока он не будет отрисован.

Функциональный тест выглядит так:

'can respond to clicks while in read-only mode, but will not open the menu': function() {
    return this.remote
      .get(require.toUrl('/tests/dropdown/readonly'))
      .setFindTimeout(10)
      // Click the dropdown pseudo element
      .findById('readonly-dropdown-shdo')
        .click()
        .end()
      // attempt to find the dropdown list (should not exist because this is a "readonly" dropdown)
      .findById('dropdown-list')
        .then(function(element) {
          expect(element).to.be.empty;
        })
        .end()
      // Check the currently active element (should be the psuedo-element)
      .getActiveElement()
        .getAttribute('id')
        .then(function(id) {
          expect(id).to.equal('readonly-dropdown-shdo');
        })
        .end();
},

Тест завершается неудачей на .findById('dropdown-list'), потому что Selenium генерирует исключение «NoSuchElement», что верно, потому что элемент не существует. Проблема в том, что средство запуска тестов Intern автоматически проваливает тесты, которые выдают эти ошибки, насколько я могу судить, даже если такое поведение ожидается.

Мой вопрос: есть ли предпочтительный способ ожидать, что элемент не должен существовать на странице в определенное время?


person Edward Coyle Jr.    schedule 15.12.2015    source источник


Ответы (2)


Вы можете попробовать использовать findDisplayedById() вместо findById() следующим образом:

.findDisplayedById('dropdown-list')
        .then(...)
        .catch(...)
        .end()
person boombox    schedule 15.12.2015
comment
Нет такой удачи. findDisplayedById() по-прежнему пытается физически найти элемент DOM на странице, и в этом случае он не существует. - person Edward Coyle Jr.; 15.12.2015
comment
@ЭдвардКойлДжр. - попробуйте .catch() после findDisplayedById(), так как это обещание. - person boombox; 15.12.2015

Не проверяйте, чего там быть не должно, проверяйте, что там ДОЛЖНО быть, т.е. ваш псевдоэлемент.

(FWIW, если бы я был вами, я бы просто отключил раскрывающийся список вместо того, чтобы менять местами элементы. Это упростило бы тестирование и по-прежнему семантически правильно. Выпадающие списки не расширяются, когда они отключены.)

person MBielski    schedule 16.12.2015