Ruby 如果选择列表有选项,请签入watir
现在我有了这样的watir代码:Ruby 如果选择列表有选项,请签入watir,ruby,watir,Ruby,Watir,现在我有了这样的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'
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...
我自己创立的:
Watir::Wait.while { browser.select_list(:name => 'ctl00$tresc$cbListaPlacowek').include?('95') }
请注意,您还可以执行以下操作:
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
好的,但是如何还要等到select中出现一些东西呢?例如一个选项(不知道值等)。。。不仅是nil..,还有如何查看for.选项(:value=>somearray)(如果value在数组中?)请尝试在新问题中提出新问题。你会对这个问题有更多的看法,因此更有可能得到更多的答案。