Ответ
Тестирование радиокнопок фокусируется на их основном свойстве — взаимном исключении выбора в рамках одной группы (name).
1. Проверка логики взаимного исключения (Наиболее важная):
- При выборе одной кнопки другие в группе должны снимать выделение.
- Должна быть возможность выбрать любую из трех.
- Пример HTML-структуры для тестирования:
<input type="radio" id="opt1" name="choice" value="A"> <label for="opt1">Option A</label> <input type="radio" id="opt2" name="choice" value="B"> <label for="opt2">Option B</label> <input type="radio" id="opt3" name="choice" value="C"> <label for="opt3">Option C</label>
2. Проверка состояний:
- Состояние по умолчанию: либо ни одна не выбрана, либо выбрана предопределенная (проверить атрибут
checked). - Состояние после взаимодействия: выбранная кнопка имеет
checked=true, остальные —false.
3. Функциональное и UI-тестирование:
- Клик: по кнопке и по связанной текстовой метке (
<label>). - Клавиатура: навигация с помощью
Tabи выбор с помощьюSpaceилиEnter. - Визуальная обратная связь: изменение стиля для выбранного состояния.
- Доступность: наличие
aria-checkedи связьaria-labelledby.
4. Интеграционное тестирование:
- При отправке формы передается значение (
value) выбранной кнопки. - Если выбор обязателен, попытка отправки без выбора должна вызывать валидационную ошибку.
5. Пример автотеста (Python + Selenium WebDriver):
def test_radio_button_group():
driver.get("page_url")
options = driver.find_elements(By.NAME, "choice")
# Проверяем начальное состояние
assert all(not opt.is_selected() for opt in options), "Изначально выбрана кнопка"
# Последовательно выбираем каждую
for i, option in enumerate(options):
option.click()
assert option.is_selected(), f"Опция {i} не выбрана после клика"
# Проверяем, что выбрана только она
selected_count = sum(1 for opt in options if opt.is_selected())
assert selected_count == 1, "Выбрано более одной кнопки"