Skip to content

Commit

Permalink
Add early safari support
Browse files Browse the repository at this point in the history
There will not be any CI tests because there is no headless mode for safaridriver
  • Loading branch information
Matthew McGarvey committed May 9, 2020
1 parent 4f59a52 commit 4fd02ae
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 11 deletions.
6 changes: 3 additions & 3 deletions spec/features/element_interactions_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ module Selenium::Command
end
end

it "can clear", tags: "firefox" do
it "can clear", tags: ["firefox", "safari"] do
TestServer.route "/home", <<-HTML
<input type="text" id="name" value="John">
HTML
Expand All @@ -30,7 +30,7 @@ module Selenium::Command
end
end

it "can send keys", tags: "firefox" do
it "can send keys", tags: ["firefox", "safari"] do
TestServer.route "/home", <<-HTML
<input type="text" id="name" value="">
HTML
Expand Down Expand Up @@ -76,7 +76,7 @@ module Selenium::Command
end
end

it "can determine if element is displayed" do
it "can determine if element is displayed", tags: "safari" do
TestServer.route "/home", <<-HTML
<input type="text" id="visible-input" value="">
<input type="hidden" id="hidden-input" value="">
Expand Down
2 changes: 1 addition & 1 deletion spec/features/error_handling_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module Selenium::Command
end
end

it "raises exceptions when trying to find element within element that no longer exists" do
it "raises exceptions when trying to find element within element that no longer exists", tags: "safari" do
TestServer.route "/home", "<div id=\"parent\"><a href=\"/about\">Click</a></div>"
TestServer.route "/about", "<h1>The Title</h1>"

Expand Down
2 changes: 1 addition & 1 deletion spec/features/window_interactions_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require "../spec_helper"

module Selenium::Command
describe "window", tags: "feature" do
it "can be interacted with" do
it "can be interacted with", tags: "safari" do
with_session do |session|
window_manager = session.window_manager
window_manager.maximize
Expand Down
11 changes: 5 additions & 6 deletions spec/support/test_driver_factory.cr
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ class Selenium::TestDriverFactory
build_firefox_driver
when "chrome-no-service"
build_chrome_driver_no_service
when "safari"
build_safari_driver
else
raise ArgumentError.new("unknown browser for running tests: #{browser}")
end
Expand All @@ -33,11 +35,8 @@ class Selenium::TestDriverFactory
{driver, capabilities}
end

private def self.chrome?(browser)
browser == "chrome"
end

private def self.firefox?(browser)
browser == "firefox"
def self.build_safari_driver : Tuple(Driver, Capabilities)
driver = Driver.for(:safari, service: Service.safari(driver_path: "/usr/bin/safaridriver"))
{driver, Safari::Capabilities.new}
end
end
1 change: 1 addition & 0 deletions src/selenium.cr
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require "./selenium/*"
require "./selenium/remote/**"
require "./selenium/firefox/**"
require "./selenium/chrome/**"
require "./selenium/safari/**"

module Selenium
VERSION = "0.4.0"
Expand Down
2 changes: 2 additions & 0 deletions src/selenium/driver.cr
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ class Selenium::Driver
Firefox::Driver.new(**opts)
when :remote
Remote::Driver.new(**opts)
when :safari
Safari::Driver.new(**opts)
else
raise ArgumentError.new "unknown driver: #{browser}"
end
Expand Down
3 changes: 3 additions & 0 deletions src/selenium/safari/capabilities.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class Selenium::Safari::Capabilities < Selenium::Capabilities
@browser_name = "safari"
end
5 changes: 5 additions & 0 deletions src/selenium/safari/driver.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Selenium::Safari::Driver < Selenium::Driver
def create_session(capabilities : Safari::Capabilities) : Session
super(capabilities)
end
end
9 changes: 9 additions & 0 deletions src/selenium/safari/service.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class Selenium::Safari::Service < Selenium::Service
def default_port : Int32
7050
end

def stop
stop_process(process)
end
end
4 changes: 4 additions & 0 deletions src/selenium/service.cr
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ abstract class Selenium::Service
Firefox::Service.new(**opts)
end

def self.safari(**opts)
Safari::Service.new(**opts)
end

private property process : Process?

def initialize(@driver_path : String, @port : Int32 = default_port, @args = [] of String)
Expand Down

0 comments on commit 4fd02ae

Please sign in to comment.