Является ли хорошей практикой давать атрибуты 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.
Другие селектора - это не плохие вещи, но они могут довольно медленно работать в старых браузерах, если вы их поддерживаете.