Class: Webrat::SeleniumSession

Inherits:
Object
  • Object
show all
Includes:
SaveAndOpenPage, Webrat::Selenium::SilenceStream
Defined in:
lib/webrat/selenium/selenium_session.rb

Instance Method Summary collapse

Methods included from Webrat::Selenium::SilenceStream

#silence_stream

Methods included from SaveAndOpenPage

#doc_root, #open_in_browser, #rewrite_css_and_image_references, #save_and_open_page, #saved_page_dir

Constructor Details

#initialize(*args) ⇒ SeleniumSession

:nodoc:



30
31
# File 'lib/webrat/selenium/selenium_session.rb', line 30

def initialize(*args) # :nodoc:
end

Instance Method Details

#automateObject



36
37
38
# File 'lib/webrat/selenium/selenium_session.rb', line 36

def automate
  yield
end

#check(label_text) ⇒ Object Also known as: uncheck



121
122
123
124
125
# File 'lib/webrat/selenium/selenium_session.rb', line 121

def check(label_text)
  locator = "webrat=#{label_text}"
  selenium.wait_for_element locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.click locator
end

#choose(label_text) ⇒ Object



113
114
115
116
117
# File 'lib/webrat/selenium/selenium_session.rb', line 113

def choose(label_text)
  locator = "webrat=#{label_text}"
  selenium.wait_for_element locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.click locator
end

#click_button(button_text_or_regexp = nil, options = {}) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/webrat/selenium/selenium_session.rb', line 66

def click_button(button_text_or_regexp = nil, options = {})
  if button_text_or_regexp.is_a?(Hash) && options == {}
    pattern, options = nil, button_text_or_regexp
  elsif button_text_or_regexp
    pattern = adjust_if_regexp(button_text_or_regexp)
  end
  pattern ||= '*'
  locator = "button=#{pattern}"

  selenium.wait_for_element locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.click locator
end


81
82
83
84
85
86
# File 'lib/webrat/selenium/selenium_session.rb', line 81

def click_link(link_text_or_regexp, options = {})
  pattern = adjust_if_regexp(link_text_or_regexp)
  locator = "webratlink=#{pattern}"
  selenium.wait_for_element locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.click locator
end


90
91
92
93
94
# File 'lib/webrat/selenium/selenium_session.rb', line 90

def click_link_within(selector, link_text, options = {})
  locator = "webratlinkwithin=#{selector}|#{link_text}"
  selenium.wait_for_element locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.click locator
end

#current_urlObject



62
63
64
# File 'lib/webrat/selenium/selenium_session.rb', line 62

def current_url
  selenium.location
end

#fill_in(field_identifier, options) ⇒ Object



46
47
48
49
50
# File 'lib/webrat/selenium/selenium_session.rb', line 46

def fill_in(field_identifier, options)
  locator = "webrat=#{field_identifier}"
  selenium.wait_for_element locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.type(locator, "#{options[:with]}")
end

#fire_event(field_identifier, event) ⇒ Object



130
131
132
133
# File 'lib/webrat/selenium/selenium_session.rb', line 130

def fire_event(field_identifier, event)
  locator = "webrat=#{Regexp.escape(field_identifier)}"
  selenium.fire_event(locator, "#{event}")
end

#key_down(field_identifier, key_code) ⇒ Object



135
136
137
138
# File 'lib/webrat/selenium/selenium_session.rb', line 135

def key_down(field_identifier, key_code)
  locator = "webrat=#{Regexp.escape(field_identifier)}"
  selenium.key_down(locator, key_code)
end

#key_up(field_identifier, key_code) ⇒ Object



140
141
142
143
# File 'lib/webrat/selenium/selenium_session.rb', line 140

def key_up(field_identifier, key_code)
  locator = "webrat=#{Regexp.escape(field_identifier)}"
  selenium.key_up(locator, key_code)
end

#responseObject



54
55
56
# File 'lib/webrat/selenium/selenium_session.rb', line 54

def response
  SeleniumResponse.new(self, response_body)
end

#response_bodyObject

:nodoc:



58
59
60
# File 'lib/webrat/selenium/selenium_session.rb', line 58

def response_body #:nodoc:
  selenium.get_html_source
end

#save_and_open_screengrabObject



180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/webrat/selenium/selenium_session.rb', line 180

def save_and_open_screengrab
  return unless File.exist?(saved_page_dir)

  filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.png"

  if $browser.chrome_backend?
    $browser.capture_entire_page_screenshot(filename, '')
  else
    $browser.capture_screenshot(filename)
  end
  open_in_browser(filename)

end

#select(option_text, options = {}) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/webrat/selenium/selenium_session.rb', line 98

def select(option_text, options = {})
  id_or_name_or_label = options[:from]

  if id_or_name_or_label
    select_locator = "webrat=#{id_or_name_or_label}"
  else
    select_locator = "webratselectwithoption=#{option_text}"
  end

  selenium.wait_for_element select_locator, :timeout_in_seconds => Webrat.configuration.selenium_response_wait_time
  selenium.select(select_locator, option_text)
end

#seleniumObject



171
172
173
174
175
# File 'lib/webrat/selenium/selenium_session.rb', line 171

def selenium
  return $browser if $browser
  setup
  $browser
end

#simulateObject



33
34
# File 'lib/webrat/selenium/selenium_session.rb', line 33

def simulate
end

#visit(url) ⇒ Object



40
41
42
# File 'lib/webrat/selenium/selenium_session.rb', line 40

def visit(url)
  selenium.open(url)
end

#wait_for(params = {}) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/webrat/selenium/selenium_session.rb', line 145

def wait_for(params={})
  timeout = params[:timeout] || Webrat.configuration.selenium_response_wait_time
  message = params[:message] || "Timeout exceeded"

  begin_time = Time.now

  while (Time.now - begin_time) < timeout
    value = nil

    begin
      value = yield
    rescue Exception => e
      unless is_ignorable_wait_for_exception?(e)
        raise e
      end
    end

    return value if value

    sleep 0.25
  end

  raise Webrat::TimeoutError.new(message + " (after #{timeout} sec)")
  true
end