Class: Watir::Element

Inherits:
Object
  • Object
show all
Defined in:
lib/watir/dom/elements/element.rb

Instance Method Summary collapse

Instance Method Details

#wait_until_dom_changed(opts = {}) ⇒ Object

Waits until DOM is changed within the element.

Parameters:

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • timeout (Fixnum)

    seconds to wait before timing out

  • interval (Float)

    How long to wait between DOM nodes adding/removing in seconds. Defaults to 0.5

  • delay (Float)

    How long to wait for DOM modifications to start in seconds. Defaults to 1



58
59
60
61
62
# File 'lib/watir/dom/elements/element.rb', line 58

def wait_until_dom_changed(opts = {})
  when_dom_changed(opts) do
    # just trigger waiting
  end
end

#when_dom_changed(opts = {}) ⇒ Object

Waits until DOM is changed within the element and returns/yields self.

Examples:

With self returned

browser.div(id: 'test').when_dom_changed.a(id: 'link').click

With passing block

browser.div(id: 'test').when_dom_changed do |div|
  div.a(id: 'link').click
end

With timeout of 10 seconds

browser.div(id: 'test').when_dom_changed(timeout: 10).a(id: 'link').click

With interval of checking for subtree modifications of 2 seconds

browser.div(id: 'test').when_dom_changed(interval: 2).a(id: 'link').click

With 5 seconds delay of how long to waiting for DOM to start modifying

browser.div(id: 'test').when_dom_changed(delay: 5).a(id: 'link').click

Parameters:

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • timeout (Fixnum)

    seconds to wait before timing out

  • interval (Float)

    How long to wait between DOM nodes adding/removing in seconds. Defaults to 0.5

  • delay (Float)

    How long to wait for DOM modifications to start in seconds. Defaults to 1



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/watir/dom/elements/element.rb', line 30

def when_dom_changed(opts = {})
  message = "waiting for DOM subtree to finish modifying in #{selector_string}"
  opts[:timeout]  ||= Dom::Wait.timeout
  opts[:interval] ||= Dom::Wait.interval
  opts[:delay]    ||= Dom::Wait.delay

  if block_given?
    js = Dom::Wait::JAVASCRIPT.dup
    browser.execute_script js, self, opts[:interval], opts[:delay]
    Wait.until(opts[:timeout], message) { browser.execute_script(Dom::Wait::DOM_READY) == 0 }
    yield self
  else
    WhenDOMChangedDecorator.new(self, opts, message)
  end

rescue Selenium::WebDriver::Error::StaleElementReferenceError
  locate
end