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 回答