Class: HeadlessBrowserTool::BrowserAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/headless_browser_tool/browser_adapter.rb

Overview

Adapter to make Capybara::Session compatible with our Browser interface

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(capybara_session, session_id) ⇒ BrowserAdapter

Returns a new instance of BrowserAdapter.



9
10
11
12
13
# File 'lib/headless_browser_tool/browser_adapter.rb', line 9

def initialize(capybara_session, session_id)
  @session = capybara_session
  @session_id = session_id
  @previous_state = {}
end

Instance Attribute Details

#previous_stateObject

Returns the value of attribute previous_state.



7
8
9
# File 'lib/headless_browser_tool/browser_adapter.rb', line 7

def previous_state
  @previous_state
end

#sessionObject (readonly)

Returns the value of attribute session.



6
7
8
# File 'lib/headless_browser_tool/browser_adapter.rb', line 6

def session
  @session
end

#session_idObject (readonly)

Returns the value of attribute session_id.



6
7
8
# File 'lib/headless_browser_tool/browser_adapter.rb', line 6

def session_id
  @session_id
end

Instance Method Details

#accept_alertObject



278
279
280
# File 'lib/headless_browser_tool/browser_adapter.rb', line 278

def accept_alert(&)
  @session.accept_alert(&)
end

#accept_confirmObject



286
287
288
# File 'lib/headless_browser_tool/browser_adapter.rb', line 286

def accept_confirm(&)
  @session.accept_confirm(&)
end

#all(selector) ⇒ Object



43
44
45
# File 'lib/headless_browser_tool/browser_adapter.rb', line 43

def all(selector, **)
  @session.all(selector, **)
end

#attach_file(locator, path) ⇒ Object



96
97
98
# File 'lib/headless_browser_tool/browser_adapter.rb', line 96

def attach_file(locator, path, **)
  @session.attach_file(locator, path, **)
end

#check(locator) ⇒ Object



82
83
84
# File 'lib/headless_browser_tool/browser_adapter.rb', line 82

def check(locator, **)
  @session.check(locator, **)
end

#choose(locator) ⇒ Object



78
79
80
# File 'lib/headless_browser_tool/browser_adapter.rb', line 78

def choose(locator, **)
  @session.choose(locator, **)
end

#click(selector) ⇒ Object

Interaction methods



64
65
66
67
# File 'lib/headless_browser_tool/browser_adapter.rb', line 64

def click(selector)
  element = @session.find(selector)
  element.click
end

#click_button(button_text_or_selector) ⇒ Object



127
128
129
# File 'lib/headless_browser_tool/browser_adapter.rb', line 127

def click_button(button_text_or_selector)
  @session.click_button(button_text_or_selector)
end


131
132
133
# File 'lib/headless_browser_tool/browser_adapter.rb', line 131

def click_link(link_text_or_selector)
  @session.click_link(link_text_or_selector)
end

#click_on(locator) ⇒ Object



69
70
71
# File 'lib/headless_browser_tool/browser_adapter.rb', line 69

def click_on(locator, **)
  @session.click_on(locator, **)
end

#close_window(window) ⇒ Object



226
227
228
229
230
231
# File 'lib/headless_browser_tool/browser_adapter.rb', line 226

def close_window(window)
  current = @session.current_window
  @session.switch_to_window(window)
  window.close
  @session.switch_to_window(current) if current.exists?
end

#current_pathObject



253
254
255
# File 'lib/headless_browser_tool/browser_adapter.rb', line 253

def current_path
  @session.current_path
end

#current_urlObject

Page information



249
250
251
# File 'lib/headless_browser_tool/browser_adapter.rb', line 249

def current_url
  @session.current_url
end

#current_windowObject

Window management



212
213
214
# File 'lib/headless_browser_tool/browser_adapter.rb', line 212

def current_window
  @session.current_window
end

#dismiss_alertObject



282
283
284
# File 'lib/headless_browser_tool/browser_adapter.rb', line 282

def dismiss_alert(&)
  @session.dismiss_alert(&)
end

#dismiss_confirmObject



290
291
292
# File 'lib/headless_browser_tool/browser_adapter.rb', line 290

def dismiss_confirm(&)
  @session.dismiss_confirm(&)
end

#double_click(selector) ⇒ Object



139
140
141
# File 'lib/headless_browser_tool/browser_adapter.rb', line 139

def double_click(selector)
  @session.find(selector).double_click
end

#drag(source_selector, target_selector) ⇒ Object



147
148
149
150
151
# File 'lib/headless_browser_tool/browser_adapter.rb', line 147

def drag(source_selector, target_selector)
  source = @session.find(source_selector)
  target = @session.find(target_selector)
  source.drag_to(target)
end

#driverObject

Driver access (for advanced operations)



295
296
297
# File 'lib/headless_browser_tool/browser_adapter.rb', line 295

def driver
  @session.driver
end

#evaluate_script(script) ⇒ Object



198
199
200
# File 'lib/headless_browser_tool/browser_adapter.rb', line 198

def evaluate_script(script, *)
  @session.evaluate_script(script, *)
end

#execute_script(script) ⇒ Object

JavaScript execution



194
195
196
# File 'lib/headless_browser_tool/browser_adapter.rb', line 194

def execute_script(script, *)
  @session.execute_script(script, *)
end

#fill_in(field, value) ⇒ Object



73
74
75
76
# File 'lib/headless_browser_tool/browser_adapter.rb', line 73

def fill_in(field, value)
  # Match original Browser class signature
  @session.fill_in(field, with: value)
end

#find(selector) ⇒ Object

Finding elements



33
34
35
# File 'lib/headless_browser_tool/browser_adapter.rb', line 33

def find(selector, **)
  @session.find(selector, **)
end

#find_all(selector) ⇒ Object



153
154
155
156
157
158
159
160
161
162
163
# File 'lib/headless_browser_tool/browser_adapter.rb', line 153

def find_all(selector)
  @session.all(selector).map do |element|
    {
      tag_name: element.tag_name,
      text: element.text,
      visible: element.visible?,
      attributes: extract_attributes(element),
      value: element.value
    }
  end
end

#find_element(selector) ⇒ Object

Alias for compatibility with our tools - just needs to not throw error



38
39
40
41
# File 'lib/headless_browser_tool/browser_adapter.rb', line 38

def find_element(selector)
  @session.find(selector)
  # Tool will return its own message
end

#get_attribute(selector, attribute_name) ⇒ Object



105
106
107
# File 'lib/headless_browser_tool/browser_adapter.rb', line 105

def get_attribute(selector, attribute_name)
  @session.find(selector)[attribute_name]
end

#get_current_pathObject



169
170
171
# File 'lib/headless_browser_tool/browser_adapter.rb', line 169

def get_current_path
  @session.current_path
end

#get_current_urlObject



165
166
167
# File 'lib/headless_browser_tool/browser_adapter.rb', line 165

def get_current_url
  @session.current_url
end

#get_page_sourceObject



177
178
179
# File 'lib/headless_browser_tool/browser_adapter.rb', line 177

def get_page_source
  @session.html
end

#get_page_titleObject



173
174
175
# File 'lib/headless_browser_tool/browser_adapter.rb', line 173

def get_page_title
  @session.title
end

#get_text(selector) ⇒ Object

Additional methods to match Browser class



101
102
103
# File 'lib/headless_browser_tool/browser_adapter.rb', line 101

def get_text(selector)
  @session.find(selector).text
end

#get_value(selector) ⇒ Object



109
110
111
# File 'lib/headless_browser_tool/browser_adapter.rb', line 109

def get_value(selector)
  @session.find(selector).value
end

#get_window_handlesObject



181
182
183
# File 'lib/headless_browser_tool/browser_adapter.rb', line 181

def get_window_handles
  @session.windows.map(&:handle)
end

#go_backObject



24
25
26
# File 'lib/headless_browser_tool/browser_adapter.rb', line 24

def go_back
  @session.go_back
end

#go_forwardObject



28
29
30
# File 'lib/headless_browser_tool/browser_adapter.rb', line 28

def go_forward
  @session.go_forward
end

#has_element?(selector, wait = nil) ⇒ Boolean

Returns:

  • (Boolean)


119
120
121
122
123
124
125
# File 'lib/headless_browser_tool/browser_adapter.rb', line 119

def has_element?(selector, wait = nil)
  if wait
    @session.has_selector?(selector, wait: wait)
  else
    @session.has_selector?(selector)
  end
end

#has_no_selector?(selector) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/headless_browser_tool/browser_adapter.rb', line 51

def has_no_selector?(selector, **)
  @session.has_no_selector?(selector, **)
end

#has_no_text?(text) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/headless_browser_tool/browser_adapter.rb', line 59

def has_no_text?(text, **)
  @session.has_no_text?(text, **)
end

#has_selector?(selector) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/headless_browser_tool/browser_adapter.rb', line 47

def has_selector?(selector, **)
  @session.has_selector?(selector, **)
end

#has_text?(text) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/headless_browser_tool/browser_adapter.rb', line 55

def has_text?(text, **)
  @session.has_text?(text, **)
end

#hover(selector) ⇒ Object



143
144
145
# File 'lib/headless_browser_tool/browser_adapter.rb', line 143

def hover(selector)
  @session.find(selector).hover
end

#htmlObject



261
262
263
# File 'lib/headless_browser_tool/browser_adapter.rb', line 261

def html
  @session.html
end

#is_visible?(selector) ⇒ Boolean

Returns:

  • (Boolean)


113
114
115
116
117
# File 'lib/headless_browser_tool/browser_adapter.rb', line 113

def is_visible?(selector)
  @session.find(selector).visible?
rescue Capybara::ElementNotFound
  false
end

#maximize_windowObject



237
238
239
# File 'lib/headless_browser_tool/browser_adapter.rb', line 237

def maximize_window
  @session.current_window.maximize
end

#open_new_windowObject



220
221
222
223
224
# File 'lib/headless_browser_tool/browser_adapter.rb', line 220

def open_new_window
  new_window = @session.open_new_window
  @session.switch_to_window(new_window)
  new_window
end

#quitObject

Cleanup



300
301
302
# File 'lib/headless_browser_tool/browser_adapter.rb', line 300

def quit
  @session.quit
end

#refreshObject



20
21
22
# File 'lib/headless_browser_tool/browser_adapter.rb', line 20

def refresh
  @session.refresh
end

#reset!Object



304
305
306
# File 'lib/headless_browser_tool/browser_adapter.rb', line 304

def reset!
  @session.reset!
end

#resize_window(width, height) ⇒ Object



189
190
191
# File 'lib/headless_browser_tool/browser_adapter.rb', line 189

def resize_window(width, height)
  @session.current_window.resize_to(width, height)
end

#resize_window_to(width, height) ⇒ Object Also known as: resize_to



241
242
243
# File 'lib/headless_browser_tool/browser_adapter.rb', line 241

def resize_window_to(width, height)
  @session.current_window.resize_to(width, height)
end

#right_click(selector) ⇒ Object



135
136
137
# File 'lib/headless_browser_tool/browser_adapter.rb', line 135

def right_click(selector)
  @session.find(selector).right_click
end

#save_page(path) ⇒ Object



207
208
209
# File 'lib/headless_browser_tool/browser_adapter.rb', line 207

def save_page(path, **)
  @session.save_page(path, **)
end

#save_screenshot(path) ⇒ Object

Screenshots



203
204
205
# File 'lib/headless_browser_tool/browser_adapter.rb', line 203

def save_screenshot(path, **)
  @session.save_screenshot(path, **)
end

#select(value, dropdown_selector = nil, from: nil) ⇒ Object



90
91
92
93
94
# File 'lib/headless_browser_tool/browser_adapter.rb', line 90

def select(value, dropdown_selector = nil, from: nil, **)
  # Support both signatures: select(value, dropdown) and select(value, from: dropdown)
  from ||= dropdown_selector
  @session.select(value, from: from, **)
end

#switch_to_window(window_handle) ⇒ Object



185
186
187
# File 'lib/headless_browser_tool/browser_adapter.rb', line 185

def switch_to_window(window_handle)
  @session.switch_to_window(window_handle)
end

#textObject



265
266
267
# File 'lib/headless_browser_tool/browser_adapter.rb', line 265

def text
  @session.text
end

#titleObject



257
258
259
# File 'lib/headless_browser_tool/browser_adapter.rb', line 257

def title
  @session.title
end

#uncheck(locator) ⇒ Object



86
87
88
# File 'lib/headless_browser_tool/browser_adapter.rb', line 86

def uncheck(locator, **)
  @session.uncheck(locator, **)
end

#visit(url) ⇒ Object

Navigation methods



16
17
18
# File 'lib/headless_browser_tool/browser_adapter.rb', line 16

def visit(url)
  @session.visit(url)
end

#window_handlesObject



233
234
235
# File 'lib/headless_browser_tool/browser_adapter.rb', line 233

def window_handles
  @session.windows.map(&:handle)
end

#windowsObject



216
217
218
# File 'lib/headless_browser_tool/browser_adapter.rb', line 216

def windows
  @session.windows
end

#withinObject

Capybara-specific delegations



270
271
272
# File 'lib/headless_browser_tool/browser_adapter.rb', line 270

def within(*, &)
  @session.within(*, &)
end

#within_window(window) ⇒ Object



274
275
276
# File 'lib/headless_browser_tool/browser_adapter.rb', line 274

def within_window(window, &)
  @session.within_window(window, &)
end