Sha256: 8c64e5272f505d59ebbd6104c932c0f4f9a678cdf387c3ecb9a6e35caecc2293

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

module Watir
  module WindowSwitching

    def windows(*args)
      wins = @driver.window_handles.map do |id|
        Window.new(@driver, id)
      end

      if args.empty?
        wins
      else
        filter_windows(args, wins, :select)
      end
    end

    def window(*args, &blk)
      win = filter_windows(args, windows, :find)

      if win && block_given?
        win.use(&blk)
      end

      win
    end

    private

    def filter_windows(args, wins, method)
      sel = extract_selector(args)

      unless sel.keys.all? { |k| [:title, :url].include? k }
        raise ArgumentError, "invalid window selector: #{sel}"
      end

      wins.send(method) do |win|
        sel.all? { |key, value| value === win.send(key) }
      end
    end
  end # WindowSwitching

  class Window
    def initialize(driver, id)
      @driver, @id = driver, id
    end


    def inspect
      '#<%s:0x%x id=%s>' % [self.class, hash*2, @id.to_s]
    end

    def current?
      @driver.window_handle == @id
    end

    def close
      use { @driver.close }
    end

    def title
      title = nil
      use { title = @driver.title }

      title
    end

    def url
      url = nil
      use { url = @driver.current_url }

      url
    end

    def use(&blk)
      @driver.switch_to.window(@id, &blk)
      self
    end
  end # Window
end # Watir

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
watir-webdriver-0.0.9 lib/watir-webdriver/window_switching.rb
watir-webdriver-0.0.8 lib/watir-webdriver/window_switching.rb