Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/teaspoon/driver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ module Driver
Teaspoon::Driver.register(:phantomjs, "Teaspoon::Driver::Phantomjs", "teaspoon/driver/phantomjs", default: true)
Teaspoon::Driver.register(:selenium, "Teaspoon::Driver::Selenium", "teaspoon/driver/selenium")
Teaspoon::Driver.register(:browserstack, "Teaspoon::Driver::BrowserStack", "teaspoon/driver/browserstack")
Teaspoon::Driver.register(:ferrum, "Teaspoon::Driver::Ferrum", "teaspoon/driver/ferrum")
50 changes: 50 additions & 0 deletions lib/teaspoon/driver/ferrum.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# :nocov:
begin
require "ferrum"
rescue LoadError
Teaspoon.abort("Could not find Ferrum. Install the ferrum gem.")
end
# :nocov:

require "teaspoon/driver/base"

module Teaspoon
module Driver
class Ferrum < Base
def initialize(options = nil)
options ||= {}
case options
when Hash then @options = options
when String then @options = JSON.parse(options)
else raise Teaspoon::DriverOptionsError.new(types: "hash or json string")
end
rescue JSON::ParserError
raise Teaspoon::DriverOptionsError.new(types: "hash or json string")
end

def run_specs(runner, url)
driver = ::Ferrum::Browser.new(driver_options)
driver.go_to(url)

if driver.evaluate("window.Teaspoon")
until driver.evaluate("window.Teaspoon.finished")
sleep 0.01
end
driver.evaluate("window.Teaspoon.getMessages() || []").each do |line|
runner.process("#{line}\n")
end
end
ensure
driver.quit if driver
end

protected

def driver_options
@driver_options ||= HashWithIndifferentAccess.new(
timeout: Teaspoon.configuration.driver_timeout.to_i
).merge(@options)
end
end
end
end