Драматург Java: выбор раскрывающегося списка переносит параметры в следующий зависимый раскрывающийся список [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Драматург Java: выбор раскрывающегося списка переносит параметры в следующий зависимый раскрывающийся список [закрыто]

Сообщение Anonymous »

Я использую Playwright с Java для автоматизации теста, включающего два зависимых раскрывающихся списка:
Первый раскрывающийся список (занятость) требует выбора.
После выбора параметра второй раскрывающийся список ( 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»