Class: Watir::IE

Inherits:
Object
  • Object
show all
Includes:
Container, Exception, PageContainer, WaitHelper
Defined in:
lib/watir-classic/ie-class.rb,
lib/watir-classic/process.rb,
lib/watir-classic/ie-process.rb

Overview

Main browser class.

Defined Under Namespace

Classes: Process

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes included from Container

#page_container

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PageContainer

#contains_text, #execute_script, #html, #text

Methods included from Exception

message_for_unable_to_locate

Methods included from Container

#a, #abbr, #address, #alert, #area, #article, #aside, #audio, #b, #base, #bdi, #bdo, #blockquote, #body, #br, #button, #canvas, #caption, #checkbox, #cite, #code, #col, #colgroup, #command, #data, #datalist, #dd, #del, #details, #dfn, #div, #dl, #dt, #element, #em, #embed, #fieldset, #figcaption, #figure, #file_field, #font, #footer, #form, #frame, #frameset, #h1, #h2, #h3, #h4, #h5, #h6, #head, #header, #hgroup, #hidden, #hr, #i, #img, #input, #ins, #kbd, #keygen, #label, #legend, #li, #map, #mark, #menu, #meta, #meter, #modal_dialog, #nav, #noscript, #object, #ol, #optgroup, #option, #output, #p, #param, #pre, #progress, #q, #radio, #rp, #rt, #ruby, #s, #samp, #script, #section, #select, #small, #source, #span, #strong, #style, #sub, #summary, #sup, #table, #tbody, #td, #text_field, #textarea, #tfoot, #th, #thead, #time, #tr, #track, #u, #ul, #var, #video, #wbr

Methods included from WaitHelper

#wait_until, #wait_while

Constructor Details

#initialize(suppress_new_window = nil) ⇒ IE

Create an IE browser instance.



235
236
237
# File 'lib/watir-classic/ie-class.rb', line 235

def initialize(suppress_new_window=nil)
  _new_window_init unless suppress_new_window
end

Class Attribute Details

.attach_timeoutObject



13
14
15
# File 'lib/watir-classic/ie-class.rb', line 13

def attach_timeout
  @attach_timeout ||= 2
end

.speedObject



34
35
36
# File 'lib/watir-classic/ie-class.rb', line 34

def speed
  @speed ||= :slow
end

.visibleObject



41
42
43
# File 'lib/watir-classic/ie-class.rb', line 41

def visible
  @visible ||= true
end

Instance Attribute Details

#down_load_timeObject (readonly)

The time, in seconds, it took for the new page to load after executing the last command.



221
222
223
# File 'lib/watir-classic/ie-class.rb', line 221

def down_load_time
  @down_load_time
end

#hwndFixnum

Returns current IE window handle.

Raises:

  • (RuntimeError)

    when not attached to a browser.



307
308
309
310
# File 'lib/watir-classic/ie-class.rb', line 307

def hwnd
  raise "Not attached to a browser" if @ie.nil?
  @hwnd ||= @ie.hwnd
end

#ieObject

The OLE Internet Explorer object.



224
225
226
# File 'lib/watir-classic/ie-class.rb', line 224

def ie
  @ie
end

#url_listObject (readonly)

The list of unique urls that have been visited.



227
228
229
# File 'lib/watir-classic/ie-class.rb', line 227

def url_list
  @url_list
end

Class Method Details

.attach(how, what) ⇒ Object

Note:

This method will not work when Watir/Ruby is run under a service (instead of a user).

Attach to an existing IE Browser.

Examples:

Attach with full title:

Watir::Browser.attach(:title, "Full title of IE")

Attach with part of the title using Regexp:

Watir::Browser.attach(:title, /part of the title of IE/)

Attach with part of the url:

Watir::Browser.attach(:url, /google/)

Attach with window handle:

Watir::Browser.attach(:hwnd, 123456)


103
104
105
106
107
# File 'lib/watir-classic/ie-class.rb', line 103

def attach(how, what)
  ie = new true # don't create window

  ie._attach_init(how, what)
  ie
end

.each {|ie| ... } ⇒ Object

Note:

This method will not work when Watir/Ruby is run under a service (instead of a user).

Yields successively to each IE window on the current desktop. Takes a block.

Yield Parameters:

  • ie (IE)

    instances of IE found.



113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/watir-classic/ie-class.rb', line 113

def each
  shell = WIN32OLE.new('Shell.Application')
  ie_browsers = []
  shell.Windows.each do |window|
    next unless (window.path =~ /Internet Explorer/ rescue false)
    next unless (hwnd = window.hwnd rescue false)
    ie = bind(window)
    ie.hwnd = hwnd
    ie_browsers << ie
  end
  ie_browsers.each do |ie|
    yield ie
  end
end

.find(how, what) ⇒ Object

Find existing IE window with locators.

See Also:



149
150
151
152
# File 'lib/watir-classic/ie-class.rb', line 149

def find(how, what)
  ie_ole = _find(how, what)
  bind ie_ole if ie_ole
end

.new_processObject

Note:

This method will not work when Watir/Ruby is run under a service (instead of a user).

Create a new IE window in a new process.



69
70
71
72
73
# File 'lib/watir-classic/ie-class.rb', line 69

def new_process
  ie = new true
  ie._new_process_init
  ie
end

.new_windowObject

Create a new IE window.



46
47
48
49
50
# File 'lib/watir-classic/ie-class.rb', line 46

def new_window
  ie = new true
  ie._new_window_init
  ie
end

.optionsObject

Return the options used when creating new instances of IE. BUG: this interface invites misunderstanding/misuse such as IE.options = :zippy]



19
20
21
# File 'lib/watir-classic/ie-class.rb', line 19

def options
  {:speed => self.speed, :visible => self.visible, :attach_timeout => self.attach_timeout}
end

.process_countFixnum

Returns the number of IEXPLORE processes currently running.



18
19
20
# File 'lib/watir-classic/process.rb', line 18

def self.process_count
  Watir::Process.count 'iexplore.exe'
end

.set_options(options) ⇒ Object

set values for options used when creating new instances of IE.



24
25
26
27
28
# File 'lib/watir-classic/ie-class.rb', line 24

def set_options options
  options.each do |name, value|
    send "#{name}=", value
  end
end

.start(url = nil) ⇒ Object

Create a new IE, starting at the specified url.



54
55
56
# File 'lib/watir-classic/ie-class.rb', line 54

def start(url=nil)
  start_window url
end

.start_process(url = nil) ⇒ Object

Create a new IE window in a new process, starting at the specified URL.



77
78
79
80
81
# File 'lib/watir-classic/ie-class.rb', line 77

def start_process(url=nil)
  ie = new_process
  ie.goto url if url
  ie
end

.start_window(url = nil) ⇒ Object

Create a new IE window, starting at the specified url.



60
61
62
63
64
# File 'lib/watir-classic/ie-class.rb', line 60

def start_window(url=nil)
  ie = new_window
  ie.goto url if url
  ie
end

.versionString



129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/watir-classic/ie-class.rb', line 129

def version
  @ie_version ||= begin
                    require 'win32/registry'
                    ::Win32::Registry::HKEY_LOCAL_MACHINE.open("SOFTWARE\\Microsoft\\Internet Explorer") do |ie_key|
                      begin
                        ie_key['svcVersion']
                      rescue ::Win32::Registry::Error
                        ie_key['Version']
                      end
                    end
                  end
end

.version_partsArray<String>



143
144
145
# File 'lib/watir-classic/ie-class.rb', line 143

def version_parts
  version.split('.')
end

Instance Method Details

#activateObject Also known as: bring_to_front

Make the window come to the front.



420
421
422
# File 'lib/watir-classic/ie-class.rb', line 420

def activate
  rautomation.activate
end

#active?Boolean Also known as: front?



427
428
429
# File 'lib/watir-classic/ie-class.rb', line 427

def active?
  rautomation.active?
end

#add_checker(checker) ⇒ Object

Add an error checker that gets executed after every page load, click etc.

Examples:

browser.add_checker lambda { |browser| raise "Error!" if browser.text.include? "Error" }


515
516
517
# File 'lib/watir-classic/ie-class.rb', line 515

def add_checker(checker)
  @error_checkers << checker
end

#autoitObject

Deprecated.

use #rautomation instead.



440
441
442
443
# File 'lib/watir-classic/ie-class.rb', line 440

def autoit
  Kernel.warn "Deprecated(IE#autoit) - use IE#rautomation instead. Refer to https://github.com/jarmo/RAutomation for updating your scripts."
  @autoit ||= ::RAutomation::Window.new(:hwnd => hwnd, :adapter => :autoit)
end

#backObject

Go to the previous page - the same as clicking the browsers back button.

Raises:

  • (WIN32OLERuntimeError)

    when the browser can't go back.



355
356
357
358
# File 'lib/watir-classic/ie-class.rb', line 355

def back
  @ie.GoBack
  wait
end

#clear_url_listObject

Clear the list of urls that have been visited.



379
380
381
# File 'lib/watir-classic/ie-class.rb', line 379

def clear_url_list
  @url_list.clear
end

#closeObject

Close the Browser.



384
385
386
387
388
389
390
391
392
393
394
395
396
397
# File 'lib/watir-classic/ie-class.rb', line 384

def close
  return unless exists?
  @ie.stop
  wait rescue nil
  chwnd = @ie.hwnd.to_i
  @ie.quit
  t = ::Time.now
  while exists?
    # just in case to avoid possible endless loop if failing to close some

    # window or tab

    break if ::Time.now - t > 10
    sleep 0.3
  end
end

#cookiesObject

Retrieve Cookies instance.



505
506
507
# File 'lib/watir-classic/ie-class.rb', line 505

def cookies
  Cookies.new(self)
end

#disable_checker(checker) ⇒ Object

Disable an error checker added via #add_checker.



522
523
524
# File 'lib/watir-classic/ie-class.rb', line 522

def disable_checker(checker)
  @error_checkers.delete(checker)
end

#documentWIN32OLE



460
461
462
# File 'lib/watir-classic/ie-class.rb', line 460

def document
  @ie.document
end

#exists?Boolean Also known as: exist?



318
319
320
321
322
# File 'lib/watir-classic/ie-class.rb', line 318

def exists?
  !!(@ie.name =~ /Internet Explorer/)
rescue WIN32OLERuntimeError, NoMethodError
  false
end

#focusObject

Gives focus to the window frame.



527
528
529
530
531
# File 'lib/watir-classic/ie-class.rb', line 527

def focus
  active_element = document.activeElement
  active_element.blur if active_element && active_element.tagName != "BODY"
  document.focus
end

#forwardObject

Go to the next page - the same as clicking the browsers forward button.

Raises:

  • (WIN32OLERuntimeError)

    when the browser can't go forward.



362
363
364
365
# File 'lib/watir-classic/ie-class.rb', line 362

def forward
  @ie.GoForward
  wait
end

#goto(url) ⇒ Fixnum

Navigate to the specified URL.



346
347
348
349
350
351
# File 'lib/watir-classic/ie-class.rb', line 346

def goto(url)
  url = "http://" + url unless url =~ %r{://} || url == "about:blank"
  @ie.navigate(url)
  wait
  return @down_load_time
end

#inspectObject



374
375
376
# File 'lib/watir-classic/ie-class.rb', line 374

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

#maximizeObject

Maximize the window (expands to fill the screen).



400
401
402
# File 'lib/watir-classic/ie-class.rb', line 400

def maximize
  rautomation.maximize
end

#minimizeObject

Minimize the window (appears as icon on taskbar).



405
406
407
# File 'lib/watir-classic/ie-class.rb', line 405

def minimize
  rautomation.minimize
end

#minimized?Boolean



410
411
412
# File 'lib/watir-classic/ie-class.rb', line 410

def minimized?
  rautomation.minimized?
end

#nameSymbol



313
314
315
# File 'lib/watir-classic/ie-class.rb', line 313

def name
  :internet_explorer
end

#rautomationRAutomation::Window

Returns the RAutomation instance for this IE window.



435
436
437
# File 'lib/watir-classic/ie-class.rb', line 435

def rautomation
  @rautomation ||= ::RAutomation::Window.new(:hwnd => hwnd)
end

#refreshObject

Refresh the current page - the same as clicking the browsers refresh button.

Raises:

  • (WIN32OLERuntimeError)

    when the browser can't refresh.



369
370
371
372
# File 'lib/watir-classic/ie-class.rb', line 369

def refresh
  @ie.refresh2(3)
  wait
end

#restoreObject

Restore the window (after minimizing or maximizing).



415
416
417
# File 'lib/watir-classic/ie-class.rb', line 415

def restore
  rautomation.restore
end

#screenshotObject

Create a Screenshot instance.



470
471
472
# File 'lib/watir-classic/ie-class.rb', line 470

def screenshot
  Screenshot.new(hwnd)
end

#send_keys(*keys) ⇒ Object

Activates the window and sends keys to it.

Examples:

browser.send_keys("Hello World", :enter)

See Also:



451
452
453
# File 'lib/watir-classic/ie-class.rb', line 451

def send_keys(*keys)
  rautomation.send_keys *keys
end

#set_fast_speedObject

Deprecated.

Use #speed= with :fast argument instead.



282
283
284
285
# File 'lib/watir-classic/ie-class.rb', line 282

def set_fast_speed
  Kernel.warn "Deprecated(IE.set_fast_speed) - use Browser#speed = :fast instead."
  self.speed = :fast
end

#set_slow_speedObject

Deprecated.

Use #speed= with :slow argument instead.



288
289
290
291
# File 'lib/watir-classic/ie-class.rb', line 288

def set_slow_speed
  Kernel.warn "Deprecated(IE.set_slow_speed) - use Browser#speed = :slow instead."
  self.speed = :slow
end

#speedSymbol



276
277
278
279
# File 'lib/watir-classic/ie-class.rb', line 276

def speed
  return @speed if @speed == :slow
  return @type_keys ? :fast : :zippy
end

#speed=(how_fast) ⇒ Object

Note:

:zippy speed does not trigger JavaScript events like onChange etc.

Specifies the speed that commands will be executed at. Possible choices are:

  • :slow (default)
  • :fast
  • :zippy

With :zippy, text fields will be entered at once, instead of character by character.

Raises:

  • (ArgumentError)

    when invalid speed is specified.



253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/watir-classic/ie-class.rb', line 253

def speed=(how_fast)
  case how_fast
  when :zippy
    @typingspeed = 0
    @pause_after_wait = 0.01
    @type_keys = false
    @speed = :fast
  when :fast
    @typingspeed = 0
    @pause_after_wait = 0.01
    @type_keys = true
    @speed = :fast
  when :slow
    @typingspeed = 0.08
    @pause_after_wait = 0.1
    @type_keys = true
    @speed = :slow
  else
    raise ArgumentError, "Invalid speed: #{how_fast}. Possible choices are :slow, :fast and :zippy."
  end
end

#statusString



333
334
335
336
337
# File 'lib/watir-classic/ie-class.rb', line 333

def status
  @ie.statusText
rescue WIN32OLERuntimeError
  ""
end

#titleString



327
328
329
# File 'lib/watir-classic/ie-class.rb', line 327

def title
  @ie.document.title
end

#urlString



465
466
467
# File 'lib/watir-classic/ie-class.rb', line 465

def url
  @ie.LocationURL
end

#visibleBoolean



294
295
296
# File 'lib/watir-classic/ie-class.rb', line 294

def visible
  @ie.visible
end

#visible=(boolean) ⇒ Object

Set the visibility of IE window.



301
302
303
# File 'lib/watir-classic/ie-class.rb', line 301

def visible=(boolean)
  @ie.visible = boolean if boolean != @ie.visible
end

#window(specifiers = {}) { ... } ⇒ Window

Retrieve a Window instance.

Examples:

Retrieve a different window without block.

browser.window(:title => /other window title/).use
browser.title # => "other window title"

Use different window with block.

browser.window(:title => /other window title/) do
  browser.title # => "other window title"
end
browser.title # => "current window title"

Options Hash (specifiers):

  • :title (String, Regexp)

    Title of the window.

  • :url (String, Regexp)

    Url of the window.

  • :index (Fixnum)

    The index of the window.

Yields:

  • yield optionally to the found window.



492
493
494
495
496
# File 'lib/watir-classic/ie-class.rb', line 492

def window(specifiers={}, &blk)
  win = Window.new(self, specifiers, &blk)
  win.use &blk if blk
  win
end

#windows(specifiers = {}) ⇒ Array<Window>

Returns array of found windows.

See Also:



500
501
502
# File 'lib/watir-classic/ie-class.rb', line 500

def windows(specifiers={})
  self.class._find_all(specifiers.keys.first, specifiers.values.first).map {|ie| Window.new(self, specifiers, IE.bind(ie))}
end