Проверьте, есть ли в select_list опции

Теперь у меня есть такой код ватира:

require "watir-webdriver"

  browser = Watir::Browser.new :ff
  browser.driver.manage.timeouts.implicit_wait = 3 #3 seconds
  browser.goto "https://page***/default.aspx"


  browser.select_list(:name => 'ctl00$tresc$cbListaKrajow').select_value('6')
  puts "Selected country"  
  browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').wait_until_present
  browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').select_value('95')
  puts "Selected city"  

Но главная беда в том, что ctl00$tresc$cbListaPlacowek загружает свои опции только через

ctl00$tresc$cbListaKrajow  is changed. It could take 1 or 30 seconds so `browser.driver.manage.timeouts.implicit_wait = 3 #3 seconds`  is not a good idea. How can i write that it try to select option unless it is present? Now i get errors like it could find such option...

person brabertaser19    schedule 27.10.2012    source источник


Ответы (2)


Обратите внимание, что вы могли бы также сделать:

browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').option(:value => '95').wait_until_present

Просто немного приятнее писать.

Обновление:

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

browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').option.wait_until_present

Технически это ожидание появления первого варианта. Обратите внимание, что в зависимости от того, что вы делаете, это может дать вам ложные срабатывания. Например, если список выбора уже заполнен опциями, вы инициируете какое-то событие для повторного заполнения списка, в списке выбора уже будет первая опция. В этом случае вам, возможно, придется также проверить, изменился ли список опций.

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

browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').options.find do |option|
  somearray.include?(option.value)
end.select
person Justin Ko    schedule 27.10.2012
comment
ок, а как еще дождаться пока что-то появится в селекте? например один вариант (не знаю значения и т.д.)... только не ноль.. - person brabertaser19; 28.10.2012
comment
а также как увидеть .option(:value =› somearray) (если значение находится в массиве?) - person brabertaser19; 28.10.2012
comment
Попробуйте задавать новые вопросы в новых вопросах. Вы получите больше просмотров вопроса и, следовательно, больше шансов получить больше ответов. - person Justin Ko; 28.10.2012

Основано мной:

 Watir::Wait.while { browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').include?('95') }
person brabertaser19    schedule 27.10.2012