Class: Maze::Driver::Browser
- Inherits:
-
Object
- Object
- Maze::Driver::Browser
- Defined in:
- lib/maze/driver/browser.rb
Overview
Handles browser automation fundamentals
Instance Attribute Summary collapse
-
#capabilities ⇒ Object
readonly
Returns the value of attribute capabilities.
Instance Method Summary collapse
-
#driver_quit ⇒ Object
Quits the driver.
- #find_element(*args) ⇒ Object
-
#initialize(driver_for, selenium_url = nil, capabilities = nil) ⇒ Browser
constructor
A new instance of Browser.
-
#javascript? ⇒ Boolean
check if Selenium supports running javascript in the current browser.
-
#local_storage? ⇒ Boolean
check if the browser supports local storage, e.g.
- #navigate ⇒ Object
-
#refresh ⇒ Object
Refreshes the page.
-
#restart_driver(attempts = 6) ⇒ Object
Restarts the underlying-driver in the case an unrecoverable error occurs.
-
#session_id ⇒ Object
Returns the driver session ID.
-
#start_driver(attempts = 6) ⇒ Object
Attempts to create a new selenium driver a given number of times.
Constructor Details
#initialize(driver_for, selenium_url = nil, capabilities = nil) ⇒ Browser
Returns a new instance of Browser.
14 15 16 17 18 19 |
# File 'lib/maze/driver/browser.rb', line 14 def initialize(driver_for, selenium_url=nil, capabilities=nil) capabilities ||= {} @capabilities = capabilities @driver_for = driver_for @selenium_url = selenium_url end |
Instance Attribute Details
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities.
12 13 14 |
# File 'lib/maze/driver/browser.rb', line 12 def capabilities @capabilities end |
Instance Method Details
#driver_quit ⇒ Object
Quits the driver
35 36 37 |
# File 'lib/maze/driver/browser.rb', line 35 def driver_quit @driver.quit end |
#find_element(*args) ⇒ Object
21 22 23 |
# File 'lib/maze/driver/browser.rb', line 21 def find_element(*args) @driver.find_element(*args) end |
#javascript? ⇒ Boolean
check if Selenium supports running javascript in the current browser
40 41 42 43 44 |
# File 'lib/maze/driver/browser.rb', line 40 def javascript? @driver.execute_script('return true') rescue Selenium::WebDriver::Error::UnsupportedOperationError false end |
#local_storage? ⇒ Boolean
check if the browser supports local storage, e.g. safari 10 on browserstack does not have working local storage
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/maze/driver/browser.rb', line 48 def local_storage? # Assume we can use local storage if we aren't able to verify by running JavaScript return true unless javascript? @driver.execute_script <<-JAVASCRIPT try { window.localStorage.setItem('__localstorage_test__', 1234) window.localStorage.removeItem('__localstorage_test__') return true } catch (err) { return false } JAVASCRIPT end |
#navigate ⇒ Object
25 26 27 |
# File 'lib/maze/driver/browser.rb', line 25 def navigate @driver.navigate end |
#refresh ⇒ Object
Refreshes the page
30 31 32 |
# File 'lib/maze/driver/browser.rb', line 30 def refresh @driver.navigate.refresh end |
#restart_driver(attempts = 6) ⇒ Object
Restarts the underlying-driver in the case an unrecoverable error occurs
67 68 69 70 71 72 73 |
# File 'lib/maze/driver/browser.rb', line 67 def restart_driver(attempts=6) # Remove the old driver @driver.quit @driver = nil start_driver(attempts) end |
#session_id ⇒ Object
Returns the driver session ID
99 100 101 |
# File 'lib/maze/driver/browser.rb', line 99 def session_id @driver.session_id end |
#start_driver(attempts = 6) ⇒ Object
Attempts to create a new selenium driver a given number of times
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/maze/driver/browser.rb', line 78 def start_driver(attempts=6) timeout = attempts * 10 wait = Maze::Wait.new(interval: 10, timeout: timeout) success = wait.until do begin create_driver(@driver_for, @selenium_url) rescue => error $logger.warn "#{error.class} occurred with message: #{error.}" end @driver end unless success $logger.error "Selenium driver failed to start after #{attempts} attempts in #{timeout} seconds" raise RuntimeError.new("Selenium driver failed to start in #{timeout} seconds") end end |