2

今、私はそのようなwatirコードを持っています:

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...
4

2 に答える 2

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
于 2012-10-27T19:08:02.790 に答える
1

自分で設立:

 Watir::Wait.while { browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').include?('95') }
于 2012-10-27T18:51:17.897 に答える