Первый раскрывающийся список (занятость) требует выбора.
После выбора параметра второй раскрывающийся список ( periodOfCoverage) становится видимым и динамически заполняет свои параметры.
В каждом раскрывающемся списке используется поле ввода с такими атрибутами, как
< цитата>
data-test-field-widget="SelectWidget"
Мой рабочий процесс тестирования выглядит следующим образом:< /p>
Нажмите на первый раскрывающийся список, чтобы открыть его.
Получите список параметров (элементы li) и успешно выберите один.
После выбора станет видимым второй раскрывающийся список.
Проблема:
Драматург правильно взаимодействует со вторым полем раскрывающегося списка (он щелкает и открывает его).
Однако вместо взаимодействия с параметрами, специфичными для второго раскрывающегося списка, , похоже, что параметры из первого раскрывающегося списка используются повторно.
Я полагаю, что это может произойти, потому что параметры второго раскрывающегося списка появляются в DOM только после первого раскрывающегося списка. заполняется и выбирается.
И Драматург "удерживает" состояние первого раскрывающегося списка. Локатор (dropdownOption + " li") может по-прежнему указывать на параметры предыдущего раскрывающегося списка вместо обновления второго.
Как я могу гарантировать, что что Драматург взаимодействует с опциями текущего раскрывающегося списка вместо того, чтобы удерживать параметры из предыдущего раскрывающегося списка? Есть ли способ сбросить состояние локатора или явно изменить параметры раскрывающегося списка для каждого взаимодействия?
Код: Выделить всё
if (element.getAttribute("data-test-field-widget").equals("SelectWidget")) {
if (currentValue == null || currentValue.trim().isEmpty() || currentValue.equals("0")) {
click(element);
int count = dropdownOptionsList.count();
if (count > 0) {
List validIndices = new ArrayList();
for (int i = 0; i < count; i++) {
String optionText = dropdownOptionsList.nth(i).textContent().trim();
if (!optionText.equalsIgnoreCase("Custom") &&
!optionText.isEmpty()) {
validIndices.add(i);
}
}
if (!validIndices.isEmpty()) {
int maxOptions = Math.min(5, validIndices.size());
List restrictedIndices = validIndices.subList(0, maxOptions);
Random random = new Random();
int randomIndex = restrictedIndices.get(random.nextInt(restrictedIndices.size()));
Locator randomOption = dropdownOptionsList.nth(randomIndex);
click(randomOption);
}
}
}

Код: Выделить всё
// Employment Information Dropdown
const employmentDropdown = document.getElementById('employmentDropdown');
const employmentOptions = document.getElementById('employmentOptions');
const coverageDropdownContainer = document.getElementById('coverageDropdownContainer');
const coverageDropdown = document.getElementById('coverageDropdown');
const coverageOptions = document.getElementById('coverageOptions');
// Employment Dropdown Interaction
employmentDropdown.addEventListener('click', () => {
employmentOptions.classList.toggle('visible');
});
employmentOptions.addEventListener('click', (event) => {
if (event.target.tagName === 'LI') {
employmentDropdown.value = event.target.textContent;
employmentOptions.classList.remove('visible');
// Show and enable the Coverage Period dropdown after selection
coverageDropdownContainer.classList.remove('hidden');
coverageDropdown.disabled = false;
}
});
// Coverage Period Dropdown Interaction
coverageDropdown.addEventListener('click', () => {
if (!coverageDropdown.disabled) {
coverageOptions.classList.toggle('visible');
}
});
coverageOptions.addEventListener('click', (event) => {
if (event.target.tagName === 'LI') {
coverageDropdown.value = event.target.textContent;
coverageOptions.classList.remove('visible');
}
});
Код: Выделить всё
/* General Styles */
body {
font-family: Arial, sans-serif;
background-color: #f5f6fa;
margin: 0;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.form-container {
background-color: #d1d5db;
padding: 20px;
border-radius: 8px;
width: 80%;
max-width: 900px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.form-title {
font-size: 18px;
font-weight: bold;
margin-bottom: 20px;
}
.form-row {
display: flex;
gap: 20px;
margin-bottom: 20px;
}
.form-field {
flex: 1;
display: flex;
flex-direction: column;
}
.form-field label {
font-size: 14px;
font-weight: bold;
margin-bottom: 5px;
color: #1f2937;
}
.form-field input {
padding: 10px;
font-size: 14px;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #e5e7eb;
color: #374151;
}
.form-field input[readonly] {
background-color: #d1d5db;
}
.form-field input:focus {
outline: none;
border-color: #2563eb;
}
/* Dropdown Styles */
.dropdown-options {
display: none;
list-style-type: none;
padding: 0;
margin: 5px 0 0 0;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #ffffff;
max-height: 150px;
overflow-y: auto;
}
.dropdown-options.visible {
display: block;
}
.dropdown-options li {
padding: 10px;
cursor: pointer;
}
.dropdown-options li:hover {
background-color: #e5e7eb;
}
/* Hidden Class */
.hidden {
display: none;
}
Код: Выделить всё
Styled Test Fields
[*]
Person
name*
E-mail address*
Street name and number*
Postcode*
Town/City*
Country*
Date of birth*
Age
Employment information*
[list]
Lawyer
[*]Landscaper
[*]Pharmacist
[*]Architect
[*]Insurance Agent
[*]Teacher
[/list]
Coverage Period (Mths)*
[list]
[*]6
[*]12
[*]24
[/list]
Limit/Insurance sum pr. month*
Подробнее здесь: https://stackoverflow.com/questions/792 ... ependent-d