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

#open_in_browser, #save_and_open_page

Constructor Details

#initialize(*args) ⇒ SeleniumSession

:nodoc:


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

def initialize(*args) # :nodoc:
end

Instance Method Details

#automateObject


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

def automate
  yield
end

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


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

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

#choose(label_text) ⇒ Object


123
124
125
126
127
# File 'lib/webrat/selenium/selenium_session.rb', line 123

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

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


71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/webrat/selenium/selenium_session.rb', line 71

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 => 5
  selenium.click locator
end

86
87
88
89
90
91
92
93
94
95
96
# File 'lib/webrat/selenium/selenium_session.rb', line 86

def click_link(link_text_or_regexp, options = {})
  if link_text_or_regexp.is_a?(Regexp)
    pattern = "evalregex:#{link_text_or_regexp.inspect}"
  else
    pattern = link_text_or_regexp.to_s
  end

  locator = "webratlink=#{pattern}"
  selenium.wait_for_element locator, :timeout_in_seconds => 5
  selenium.click locator
end

100
101
102
103
104
# File 'lib/webrat/selenium/selenium_session.rb', line 100

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

#current_urlObject


67
68
69
# File 'lib/webrat/selenium/selenium_session.rb', line 67

def current_url
  selenium.location
end

#fill_in(field_identifier, options) ⇒ Object


51
52
53
54
55
# File 'lib/webrat/selenium/selenium_session.rb', line 51

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

#fire_event(field_identifier, event) ⇒ Object


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

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


145
146
147
148
# File 'lib/webrat/selenium/selenium_session.rb', line 145

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


150
151
152
153
# File 'lib/webrat/selenium/selenium_session.rb', line 150

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

#responseObject


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

def response
  SeleniumResponse.new(self, response_body)
end

#response_bodyObject

:nodoc:


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

def response_body #:nodoc:
  selenium.get_html_source
end

#save_and_open_screengrabObject


202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/webrat/selenium/selenium_session.rb', line 202

def save_and_open_screengrab
  return unless File.exist?(Webrat.configuration.saved_pages_dir)

  filename = "#{Webrat.configuration.saved_pages_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


108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/webrat/selenium/selenium_session.rb', line 108

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 => 5
  selenium.select(select_locator, option_text)
end

#seleniumObject


193
194
195
196
197
# File 'lib/webrat/selenium/selenium_session.rb', line 193

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

#simulateObject


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

def simulate
end

#visit(url) ⇒ Object


45
46
47
# File 'lib/webrat/selenium/selenium_session.rb', line 45

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

#wait_for(params = {}) ⇒ Object


155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/webrat/selenium/selenium_session.rb', line 155

def wait_for(params={})
  timeout = params[:timeout] || 5
  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

  error_message = "#{message} (after #{timeout} sec)"
  
  if $browser && Webrat.configuration.selenium_verbose_output
    error_message += <<-EOS


HTML of the page was:

#{selenium.get_html_source}"
EOS
  end

  raise Webrat::TimeoutError.new(error_message)
  true
end