Является ли хорошей практикой давать атрибуты id элементов html, которые должны использоваться только для целей тестирования?

4 Michael Peterson [2012-11-27 02:24:00]

Предположим, что у меня есть такая форма:

<form action="/foo" method="POST">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="Login">
</form>

В моем случае мне не нужно указывать ни одному из входных тегов атрибут "id". Это не стилизовано с помощью CSS, нет ссылки на javascript и т.д. Однако, есть отдел QA, который бы любил его, если бы у него был жесткий код "id", такой как "login-button", чтобы их автоматизированный тест будет оставаться стабильным.

CONS. Как разработчик, я очень скептически отношусь к добавлению атрибутов id, которые не имеют функциональной цели.

  • Я думаю, что это загромождает код.
  • Смущает будущих разработчиков он.
  • Привязывает нас к тому, какой инструмент тестирования используется в то время.
  • Привязывает нас к кодированию вне кода продукта.
  • Начинает скользкий наклон кода, зная что-то о том, как он будет протестирован, и наоборот.

ПРОФИ: С точки зрения QA я могу, конечно, сочувствовать, что это:

  • упростить свою работу.
  • обеспечивают стабильность (в краткосрочной перспективе)

Могу ли я получить дополнительную помощь в списках "Плюсы/минусы", которые я начал здесь?

html css unit-testing selenium testing


4 ответа


4 steveax [2012-11-27 11:30:00]

Одна важная функциональная причина включения атрибутов id на входы формы заключается в том, что вы можете явно связать соответствующие элементы label с входами:

<form action="/foo" method="POST">
    <label for="username">User Name</label>
    <input type="text" id="username" name="username">
</form>

Это важно для доступности и удобства использования. Пользователи экранного считывателя полагаются на эту ассоциацию, чтобы они знали, какой ввод они вводят. Также существует разница в удобстве огромная, когда метки правильно связаны (пользователь может щелкнуть по метке, чтобы установить фокус на соответствующий вход). Это действительно заметно при вводе checkbox и radio.

Скрипт с примером как на флажках. (Заметьте, насколько проще щелкнуть по метке, а не самому входу)

Что касается вашей оппозиции... Я не уверен, что добавление атрибутов id делает любой из "минусов", которые вы заявляете. Беспорядок? нет, действительный полезный код. Смешение? nope, id и правильно связанные метки были бы первым, что я добавил бы, если бы увидел этот код. Привязывается к инструменту для тестирования и внешнему коду? как именно? Тот факт, что это облегчит жизнь вашей тестовой команде, - это просто обледенение на торте.


3 rjmunro [2012-11-27 02:35:00]

Если возможно, их инструмент тестирования должен заполнить поля на основе их атрибутов имени и атрибута действия формы, если на странице есть несколько форм. Они гарантированно будут такими же стабильными, как часть сервера, отвечающая на запрос POST.

Идентификаторы, упорядочение полей и другие атрибуты могут измениться из-за соображений front-end.


3 CIGuy [2012-11-27 02:40:00]

Ваши первые 2 минус действительны, но я не согласен с последними 3.

Вы могли бы принять позицию, что вы предоставите идентификатор логического элемента для ваших тестировщиков, но они несут ответственность за их использование с помощью любых инструментов тестирования и т.д., которые они используют. Это означает, что вы агностик test/tool, вы просто предоставляете Id для тестирования, не зная точно, как они будут использоваться.

Добавление идентификатора, подобного этому, является довольно стандартной практикой для многих веб-приложений сегодня.


0 Arran [2012-11-27 15:38:00]

Для меня это зависит. Это зависит от того, можно ли легко и надежно найти элементы без идентификатора.

В вашем примере да, поэтому добавление идентификатора не является отходами, но просто не нужно. Однако это все, что есть, пример.

Во многих веб-страницах, когда они становятся более сложными и сложными, ID становится вашим другом, потому что без него вам нужно будет искать другие способы поиска элементов.

Особенно в мире Selenium, когда вы сталкиваетесь с этой проблемой, вы обычно обращаетесь к селекторам CSS и/или XPath.

Другие селектора - это не плохие вещи, но они могут довольно медленно работать в старых браузерах, если вы их поддерживаете.