Как выбрать конкретную опцию в списке выбора?
Я пытаюсь выбрать вариант 2, но сначала он выбирает 2, а затем меняется на 1.
Это HTML-код списка выбора:
<select id="IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id">
<option style="background-color: rgb(252, 218, 175);" value="-1">Select</option>
<option value="1">0</option>
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
<option value="1000000">5</option>
<option value="1000001">more than 5</option>
</select>
Это код Watir для выбора 2:
b.select_list(:id,"IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id").select "2"
3 ответа
Проблема в том, что вы используете Watir-Classic select
Метод с параметром, который соответствует как тексту опции, так и значению другой опции.
Если вы посмотрите на код для Watir::SelectList#select
метод:
def select(item)
matching_options = []
perform_action do
matching_options = matching_items_in_select_list(:text, item) +
matching_items_in_select_list(:label, item) +
matching_items_in_select_list(:value, item)
raise NoValueFoundException, "No option with :text, :label or :value of #{item.inspect} in this select element" if matching_options.empty?
matching_options.each(&:select)
end
first_present_option_value matching_options, :text
end
Ты это видишь:
- Он получает список подходящих опций на основе текста, метки и значения и
- Затем для каждого соответствующего параметра Watir-Classic выбирает его.
Для вашего конкретного примера это означает, что
- 2 варианта соответствуют вводу "2":
<option value="2">1</option>
совпадает с егоvalue
это "2"<option value="3">2</option>
совпадает с егоtext
это "2"
- Watir-Classic выбирает каждую из этих опций в определенном порядке, поэтому вы видите выпадающий переключатель "1", а затем "2"
Учитывая, как метод написан и как написан ваш список выбора, вы не можете использовать select
метод. Хотя лучшим выбором является переход на Watir (ранее Watir-Webdriver), в Watir-Classic есть обходные пути.
Устраните неоднозначность, выбрав опцию на основе только value
атрибут:
id = "IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id"
b.select_list(:id, id).select_value "3"
#=> will select <option value="3">2</option>
Если вы хотите придерживаться выбора по тексту, непосредственно найдите / выберите элемент option:
id = "IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id"
b.select_list(:id, id).option(:text, "2").select
#=> will select <option value="3">2</option>
Для Watir вы можете использовать опции, основанные на индексах, когда вам нужно беспокоиться только об индексе. Например, для:
<option value="2">1</option>
Мы можем использовать,
browser.select_list(id: 'IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id').options[2].select
Так как это 3-й индекс данного select_list, и он следует за порядком индекса на основе нуля. Аналогично для
<option value="3">2</option>
Мы можем использовать
browser.select_list(id: 'IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id').options[3].select
Так как это 4-й индекс данного select_list.
#select
соответствует тексту. Если вы хотите выбрать по значению, вы должны использовать #select_value
:
b.select_list(id: "IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id").select_value "2"