Class: HeadlessBrowserTool::BrowserAdapter
- Inherits:
-
Object
- Object
- HeadlessBrowserTool::BrowserAdapter
- Defined in:
- lib/headless_browser_tool/browser_adapter.rb
Overview
Adapter to make Capybara::Session compatible with our Browser interface
Instance Attribute Summary collapse
-
#previous_state ⇒ Object
Returns the value of attribute previous_state.
-
#session ⇒ Object
readonly
Returns the value of attribute session.
-
#session_id ⇒ Object
readonly
Returns the value of attribute session_id.
Instance Method Summary collapse
- #accept_alert ⇒ Object
- #accept_confirm ⇒ Object
- #all(selector) ⇒ Object
- #attach_file(locator, path) ⇒ Object
- #check(locator) ⇒ Object
- #choose(locator) ⇒ Object
-
#click(selector) ⇒ Object
Interaction methods.
- #click_button(button_text_or_selector) ⇒ Object
- #click_link(link_text_or_selector) ⇒ Object
- #click_on(locator) ⇒ Object
- #close_window(window) ⇒ Object
- #current_path ⇒ Object
-
#current_url ⇒ Object
Page information.
-
#current_window ⇒ Object
Window management.
- #dismiss_alert ⇒ Object
- #dismiss_confirm ⇒ Object
- #double_click(selector) ⇒ Object
- #drag(source_selector, target_selector) ⇒ Object
-
#driver ⇒ Object
Driver access (for advanced operations).
- #evaluate_script(script) ⇒ Object
-
#execute_script(script) ⇒ Object
JavaScript execution.
- #fill_in(field, value) ⇒ Object
-
#find(selector) ⇒ Object
Finding elements.
- #find_all(selector) ⇒ Object
-
#find_element(selector) ⇒ Object
Alias for compatibility with our tools - just needs to not throw error.
- #get_attribute(selector, attribute_name) ⇒ Object
- #get_current_path ⇒ Object
- #get_current_url ⇒ Object
- #get_page_source ⇒ Object
- #get_page_title ⇒ Object
-
#get_text(selector) ⇒ Object
Additional methods to match Browser class.
- #get_value(selector) ⇒ Object
- #get_window_handles ⇒ Object
- #go_back ⇒ Object
- #go_forward ⇒ Object
- #has_element?(selector, wait = nil) ⇒ Boolean
- #has_no_selector?(selector) ⇒ Boolean
- #has_no_text?(text) ⇒ Boolean
- #has_selector?(selector) ⇒ Boolean
- #has_text?(text) ⇒ Boolean
- #hover(selector) ⇒ Object
- #html ⇒ Object
-
#initialize(capybara_session, session_id) ⇒ BrowserAdapter
constructor
A new instance of BrowserAdapter.
- #is_visible?(selector) ⇒ Boolean
- #maximize_window ⇒ Object
- #open_new_window ⇒ Object
-
#quit ⇒ Object
Cleanup.
- #refresh ⇒ Object
- #reset! ⇒ Object
- #resize_window(width, height) ⇒ Object
- #resize_window_to(width, height) ⇒ Object (also: #resize_to)
- #right_click(selector) ⇒ Object
- #save_page(path) ⇒ Object
-
#save_screenshot(path) ⇒ Object
Screenshots.
- #select(value, dropdown_selector = nil, from: nil) ⇒ Object
- #switch_to_window(window_handle) ⇒ Object
- #text ⇒ Object
- #title ⇒ Object
- #uncheck(locator) ⇒ Object
-
#visit(url) ⇒ Object
Navigation methods.
- #window_handles ⇒ Object
- #windows ⇒ Object
-
#within ⇒ Object
Capybara-specific delegations.
- #within_window(window) ⇒ Object
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(, session_id) @session = @session_id = session_id @previous_state = {} end |
Instance Attribute Details
#previous_state ⇒ Object
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 |
#session ⇒ Object (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_id ⇒ Object (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_alert ⇒ Object
278 279 280 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 278 def accept_alert(&) @session.accept_alert(&) end |
#accept_confirm ⇒ Object
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 () @session.() end |
#click_link(link_text_or_selector) ⇒ Object
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_path ⇒ Object
253 254 255 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 253 def current_path @session.current_path end |
#current_url ⇒ Object
Page information
249 250 251 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 249 def current_url @session.current_url end |
#current_window ⇒ Object
Window management
212 213 214 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 212 def current_window @session.current_window end |
#dismiss_alert ⇒ Object
282 283 284 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 282 def dismiss_alert(&) @session.dismiss_alert(&) end |
#dismiss_confirm ⇒ Object
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 |
#driver ⇒ Object
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_path ⇒ Object
169 170 171 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 169 def get_current_path @session.current_path end |
#get_current_url ⇒ Object
165 166 167 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 165 def get_current_url @session.current_url end |
#get_page_source ⇒ Object
177 178 179 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 177 def get_page_source @session.html end |
#get_page_title ⇒ Object
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_handles ⇒ Object
181 182 183 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 181 def get_window_handles @session.windows.map(&:handle) end |
#go_back ⇒ Object
24 25 26 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 24 def go_back @session.go_back end |
#go_forward ⇒ Object
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
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
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
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
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
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 |
#html ⇒ Object
261 262 263 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 261 def html @session.html end |
#is_visible?(selector) ⇒ 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_window ⇒ Object
237 238 239 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 237 def maximize_window @session.current_window.maximize end |
#open_new_window ⇒ Object
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 |
#quit ⇒ Object
Cleanup
300 301 302 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 300 def quit @session.quit end |
#refresh ⇒ Object
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 |
#text ⇒ Object
265 266 267 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 265 def text @session.text end |
#title ⇒ Object
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_handles ⇒ Object
233 234 235 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 233 def window_handles @session.windows.map(&:handle) end |
#windows ⇒ Object
216 217 218 |
# File 'lib/headless_browser_tool/browser_adapter.rb', line 216 def windows @session.windows end |
#within ⇒ Object
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 |