2016-12-01 7 views
2

Я пытаюсь выбрать вариант 2, но сначала он выбирает 2, то изменение 1.Как выбрать конкретную опцию в списке выбора?

Это HTML из списка выбора:

<select id="[email protected]|[email protected]@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,"[email protected]|[email protected]@id").select "2" 

ответ

2

Проблема заключается в том, что вы используете select метод Watir-Classic с параметром, который соответствует как текст опциона, а также значение другого опциона.

Если вы посмотрите на code for the Watir::SelectList#select method:

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 

Вы можете видеть, что:

  1. Он получает список подходящих вариантов на основе текста, метки и значения и
  2. Тогда для каждого подходящего варианта Watir-Classic выбирает его.

Для вашего конкретного примера, это означает, что

  1. 2 варианта соответствует вход "2":
    • <option value="2">1</option> матчи с момента его value "2"
    • <option value="3">2</option> матчей с момента его text является "2"
  2. Watir-Classic является выбор каждого из этих вариантов, в данном конкретном порядке, поэтому вы видите выпадающий переключатель в положение «1», а затем «2»

Учитывая то, как метод написано и как ваш выбор список написан, вы не можете использовать метод select. Хотя лучшим вариантом является переход на Watir (ранее Watir-Webdriver), в Watir-Classic есть обходные пути.

Удалить неоднозначность, специально выбирая вариант, основанный на только value атрибута:

id = "[email protected]|[email protected]@id" 
b.select_list(:id, id).select_value "3" 
#=> will select <option value="3">2</option> 

Если вы хотите придерживаться выбора по тексту, непосредственно найти/выбрать опцию элемент:

id = "[email protected]|[email protected]@id" 
b.select_list(:id, id).option(:text, "2").select 
#=> will select <option value="3">2</option> 
+0

Это очень интересная вещь, которую вы объяснили. – Gopal

+0

Будут ли они когда-нибудь пытаться решить эту проблему в Watir-classic? Или, поскольку он устарел, они даже не коснутся его? – Gopal

+0

@Gopal, я думаю, это будет зависеть от спроса и причин для пользователей, которые все еще используют Watir-Classic. Я, вероятно, последний человек в команде Watir, которая использует Watir-Classic, поэтому последняя, ​​которая заинтересована в поддержании проекта. Если вы не возражаете, я спрашиваю, каковы ваши причины для использования Watir-Classic над Watir-Webdriver? –

0

#select соответствует тексту. Если вы хотите выбрать по значению вам нужно использовать #select_value:

b.select_list(id: "[email protected]|[email protected]@id").select_value "2" 
+0

На самом деле select_value - неправильный способ сделать это, потому что люди хотят выбирать по тексту. Мы можем вызвать метод select для объекта option 'b.select_list (: id, given_id) .option (: text,« 2 »). Select' – Gopal

1

Для Watir вы можете использовать индексированные параметры, где вам нужно только беспокоиться об индексе.Такие, как для:

<option value="2">1</option> 

Мы можем использовать,

browser.select_list(id: '[email protected]|[email protected]@id').options[2].select 

Как это третий показатель данного список_выбора и следует упорядочение индексов на основе нулевой. Точно так же для,

<option value="3">2</option> 

Мы можем использовать

browser.select_list(id: '[email protected]|[email protected]@id').options[3].select 

Как это четвёртая индекс данного список_выбора.

Смежные вопросы