class Capybara::Window
The Window class represents a browser window.
You can get an instance of the class by calling either of:
-
{Capybara::Session#windows}
-
{Capybara::Session#current_window}
-
{Capybara::Session#window_opened_by}
-
{Capybara::Session#switch_to_window}
Note that some drivers (e.g. Selenium) support getting size of/resizing/closing only
current window. So if you invoke such method for: * window that is current, Capybara will make 2 Selenium method invocations (get handle of current window + get size/resize/close). * window that is not current, Capybara will make 4 Selenium method invocations (get handle of current window + switch to given handle + get size/resize/close + switch to original handle)
Attributes
@return [String] a string that uniquely identifies window within session
@return [Capybara::Session] session that this window belongs to
Public Class Methods
@api private
# File lib/capybara/window.rb, line 30 def initialize(session, handle) @session = session @driver = session.driver @handle = handle end
Public Instance Methods
Close window.
If this method was called for window that is current, then after calling this method
future invocations of other Capybara methods should raise `session.driver.no_such_window_error` until another window will be switched to.
@!macro about_current
If this method was called for window that is not current, then after calling this method current window shouldn remain the same as it was before calling this method.
# File lib/capybara/window.rb, line 67 def close @driver.close_window(handle) end
@return [Boolean] whether the window is closed
# File lib/capybara/window.rb, line 44 def closed? !exists? end
@return [Boolean] whether this window is the window in which commands are being executed
# File lib/capybara/window.rb, line 50 def current? @driver.current_window_handle == @handle rescue @driver.no_such_window_error false end
# File lib/capybara/window.rb, line 115 def eql?(other) other.is_a?(self.class) && @session == other.session && @handle == other.handle end
@return [Boolean] whether the window is not closed
# File lib/capybara/window.rb, line 38 def exists? @driver.window_handles.include?(@handle) end
Fullscreen window.
If a particular driver doesn't have concept of fullscreen it may not support this method.
@macro about_current
# File lib/capybara/window.rb, line 111 def fullscreen @driver.fullscreen_window(handle) end
# File lib/capybara/window.rb, line 120 def hash @session.hash ^ @handle.hash end
# File lib/capybara/window.rb, line 124 def inspect "#<Window @handle=#{@handle.inspect}>" end
Maximize window.
If a particular driver (e.g. headless driver) doesn't have concept of maximizing it
may not support this method.
@macro about_current
# File lib/capybara/window.rb, line 100 def maximize wait_for_stable_size { @driver.maximize_window(handle) } end
Resize window.
@macro about_current @param width [String] the new window width in pixels @param height [String] the new window height in pixels
# File lib/capybara/window.rb, line 88 def resize_to(width, height) wait_for_stable_size { @driver.resize_window_to(handle, width, height) } end
Get window size.
@macro about_current @return [Array<(Integer, Integer)>] an array with width and height
# File lib/capybara/window.rb, line 77 def size @driver.window_size(handle) end
Private Instance Methods
# File lib/capybara/window.rb, line 142 def raise_unless_current(what) raise Capybara::WindowError, "#{what} not current window is not possible." unless current? end
# File lib/capybara/window.rb, line 130 def wait_for_stable_size(seconds = session.config.default_max_wait_time) res = yield if block_given? timer = Capybara::Helpers.timer(expire_in: seconds) loop do prev_size = size sleep 0.05 return res if prev_size == size break if timer.expired? end raise Capybara::WindowError, "Window size not stable within #{seconds} seconds." end