class Watir::Window

Public Class Methods

new(driver, selector) click to toggle source
# File lib/watir-webdriver/window.rb, line 5
def initialize(driver, selector)
  @driver = driver
  @selector = selector

  if selector.empty?
    @handle = current_window
  elsif selector.key? :handle
    @handle = selector.delete :handle
  else
    unless selector.keys.all? { |k| [:title, :url, :index].include? k }
      raise ArgumentError, "invalid window selector: #{selector.inspect}"
    end
  end
end

Public Instance Methods

==(other) click to toggle source

Returns true if two windows are equal.

@example

browser.window(index: 0) == browser.window(index: 1)
#=> false

@param [Window] other

# File lib/watir-webdriver/window.rb, line 125
def ==(other)
  return false unless other.kind_of?(self.class)

  handle == other.handle
end
Also aliased as: eql?
close() click to toggle source

Closes window.

# File lib/watir-webdriver/window.rb, line 152
def close
  use { @driver.close }
end
current?() click to toggle source

Returns true if window is current.

@example

browser.window.current?
#=> true
# File lib/watir-webdriver/window.rb, line 144
def current?
  current_window == handle
end
eql?(other)
Alias for: ==
exist?()
Alias for: exists?
exists?() click to toggle source

Returns true if window exists.

@return [Boolean]

# File lib/watir-webdriver/window.rb, line 105
def exists?
  assert_exists
  true
rescue Exception::NoMatchingWindowFoundException
  false
end
Also aliased as: present?, exist?
hash() click to toggle source
# File lib/watir-webdriver/window.rb, line 132
def hash
  handle.hash ^ self.class.hash
end
inspect() click to toggle source
# File lib/watir-webdriver/window.rb, line 20
def inspect
  '#<%s:0x%x located=%s>' % [self.class, hash*2, !!@handle]
end
maximize() click to toggle source

Maximizes window.

@example

browser.window.maximize
# File lib/watir-webdriver/window.rb, line 95
def maximize
  use { @driver.manage.window.maximize }
end
move_to(x, y) click to toggle source

Moves window to given x and y coordinates.

@example

browser.window.move_to 300, 200

@param [Fixnum] x @param [Fixnum] y

# File lib/watir-webdriver/window.rb, line 81
def move_to(x, y)
  point = Selenium::WebDriver::Point.new(Integer(x), Integer(y))
  use { @driver.manage.window.position = point }

  point
end
position() click to toggle source

Returns window position.

@example

position = browser.window.position
[position.x, position.y] #=> [92, 76]
# File lib/watir-webdriver/window.rb, line 47
def position
  pos = nil
  use { pos = @driver.manage.window.position }

  pos
end
present?()
Alias for: exists?
resize_to(width, height) click to toggle source

Resizes window to given width and height.

@example

browser.window.resize_to 1600, 1200

@param [Fixnum] width @param [Fixnum] height

# File lib/watir-webdriver/window.rb, line 64
def resize_to(width, height)
  dimension = Selenium::WebDriver::Dimension.new(Integer(width), Integer(height))
  use { @driver.manage.window.size = dimension }

  dimension
end
size() click to toggle source

Returns window size.

@example

size = browser.window.size
[size.width, size.height] #=> [1600, 1200]
# File lib/watir-webdriver/window.rb, line 32
def size
  size = nil
  use { size = @driver.manage.window.size }

  size
end
title() click to toggle source

Returns window title.

@return [String]

# File lib/watir-webdriver/window.rb, line 162
def title
  title = nil
  use { title = @driver.title }

  title
end
url() click to toggle source

Returns window URL.

@return [String]

# File lib/watir-webdriver/window.rb, line 175
def url
  url = nil
  use { url = @driver.current_url }

  url
end
use(&blk) click to toggle source

Switches to given window and executes block, then switches back.

@example

browser.window(title: "closeable window").use do
  browser.a(id: "close").click
end
# File lib/watir-webdriver/window.rb, line 191
def use(&blk)
  assert_exists
  @driver.switch_to.window(handle, &blk)
  self
end

Protected Instance Methods

handle() click to toggle source
# File lib/watir-webdriver/window.rb, line 199
def handle
  @handle ||= locate
end

Private Instance Methods

assert_exists() click to toggle source
# File lib/watir-webdriver/window.rb, line 220
def assert_exists
  raise(Exception::NoMatchingWindowFoundException, @selector.inspect) unless @driver.window_handles.include?(handle)
end
current_window() click to toggle source

return a handle to the currently active window if it is still open; otherwise nil

# File lib/watir-webdriver/window.rb, line 225
def current_window
  @driver.window_handle
rescue Selenium::WebDriver::Error::NoSuchWindowError
  nil
end
locate() click to toggle source
# File lib/watir-webdriver/window.rb, line 210
def locate
  if @selector.empty?
    nil
  elsif @selector.key?(:index)
    @driver.window_handles[Integer(@selector[:index])]
  else
    @driver.window_handles.find { |wh| matches?(wh) }
  end
end
matches?(handle) click to toggle source
# File lib/watir-webdriver/window.rb, line 231
def matches?(handle)
  @driver.switch_to.window(handle) {
    matches_title = @selector[:title].nil? || @selector[:title] === @driver.title
    matches_url   = @selector[:url].nil? || @selector[:url] === @driver.current_url

    matches_title && matches_url
  }
rescue Selenium::WebDriver::Error::NoSuchWindowError, Selenium::WebDriver::Error::NoSuchDriverError
  # the window may disappear while we're iterating.
  false
end
selector_string() click to toggle source

Referenced in EventuallyPresent

# File lib/watir-webdriver/window.rb, line 206
def selector_string
  @selector.inspect
end