require 'rubygems' require 'watir-webdriver' require 'selenium-webdriver' def wait_for_new_handle(original_handles, driver) handles = nil wait = Selenium::WebDriver::Wait.new(:timeout => 10) wait.until do handles = driver.wd.window_handles handles.size == original_handles.size + 1 end handles end def open_modal(browser) original_handles = browser.wd.window_handles browser.button(:id => 'launch_modal_button').click handles = wait_for_new_handle(original_handles, browser) modal = (handles - original_handles).first browser.wd.switch_to.window modal end dir = Dir.mktmpdir("modal-dialog") htmls = DATA.read.scan(/--- (.+?) ---\n(.+?)(?=---|\z)/m) htmls.each do |name, content| File.open(File.join(dir, name), "w") { |io| io << content} end browser = Watir::Browser.new :ie wait = Selenium::WebDriver::Wait.new browser.goto "file://#{dir}/modal.html" open_modal browser browser.button(:id => 'close_window').click browser.window(:title => 'Main Modal').when_present.use browser.close browser = Watir::Browser.new :ie browser.goto "file://#{dir}/modal.html" open_modal browser open_modal browser browser.button(:id => 'close_window2').click browser.window(:title => 'Modal 1').when_present.use browser.button(:id => 'close_window').click browser.window(:title => 'Main Modal').when_present.use browser.close __END__ --- modal.html --- Main Modal --- modal_1.html --- Modal 1

Modal 1

Close buttons

Nested modal

--- modal_2.html --- Modal 2

Modal 2

Close buttons