or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/maven-org-seleniumhq-selenium--selenium-safari-driver

WebDriver implementation for controlling Safari browsers on macOS as part of the Selenium automation suite

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.seleniumhq.selenium/selenium-safari-driver@3.141.x

To install, run

npx @tessl/cli install tessl/maven-org-seleniumhq-selenium--selenium-safari-driver@3.141.0

index.mddocs/

Selenium Safari Driver

A WebDriver implementation that controls Safari browsers on macOS through a browser extension. Part of the Selenium WebDriver suite, this library enables automated testing and browser automation specifically for Safari 5.1+ and Safari Technology Preview.

Package Information

  • Package Name: selenium-safari-driver
  • Package Type: Maven
  • Language: Java
  • Maven Coordinates: org.seleniumhq.selenium:selenium-safari-driver:3.141.59
  • Module: org.openqa.selenium.safari

Dependencies

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-safari-driver</artifactId>
    <version>3.141.59</version>
</dependency>

Core Imports

import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariOptions;
import org.openqa.selenium.safari.SafariDriverService;

Basic Usage

import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariOptions;
import org.openqa.selenium.WebDriver;

// Basic Safari driver initialization
WebDriver driver = new SafariDriver();

// With Safari options
SafariOptions options = new SafariOptions();
options.setUseTechnologyPreview(true);
options.setAutomaticInspection(false);
WebDriver driver = new SafariDriver(options);

// Navigate and interact
driver.get("https://example.com");
String title = driver.getTitle();
driver.quit();

Architecture

The Safari Driver is built around several key components:

  • SafariDriver: Main WebDriver implementation extending RemoteWebDriver for Safari browser control
  • SafariOptions: Configuration class for Safari-specific settings including Technology Preview support
  • SafariDriverService: Service management for Safari driver executable lifecycle
  • WebDriverInfo: Factory classes providing metadata and driver instantiation capabilities
  • Module System: Java 9+ module integration with service providers for automatic discovery

Capabilities

Safari Driver

Main WebDriver implementation for controlling Safari browsers.

public class SafariDriver extends RemoteWebDriver {
    /**
     * Initializes a new SafariDriver with default SafariOptions.
     */
    public SafariDriver();
    
    /**
     * Initializes a new SafariDriver using SafariOptions.
     * @param safariOptions Configuration options for the driver
     */
    public SafariDriver(SafariOptions safariOptions);
    
    /**
     * Initializes a new SafariDriver with preconfigured service.
     * @param safariService Preconfigured SafariDriverService
     */
    public SafariDriver(SafariDriverService safariService);
    
    /**
     * Full constructor with both service and options.
     * @param safariService Preconfigured SafariDriverService
     * @param safariOptions Configuration options for the driver
     */
    public SafariDriver(SafariDriverService safariService, SafariOptions safariOptions);
    
    /**
     * @deprecated Use SafariDriver(SafariOptions) instead
     * @param desiredCapabilities Capabilities requested of the driver
     */
    @Deprecated
    public SafariDriver(Capabilities desiredCapabilities);
    
    /**
     * File detection is not supported in Safari.
     * @throws WebDriverException Always throws, as file detection is not supported
     */
    @Override
    public void setFileDetector(FileDetector detector);
    
    /**
     * Opens a new window or tab without switching to it.
     * This method uses Safari-specific WebDriver commands to create windows.
     * @param type The type of window to open (TAB or WINDOW)
     * @return The window handle of the new window
     */
    @Beta
    public String newWindow(WindowType type);
    
    public enum WindowType {
        TAB, WINDOW
    }
}

Safari Options

Configuration options for Safari browser automation.

public class SafariOptions extends MutableCapabilities {
    /** Browser name constant for Safari Technology Preview */
    public static final String SAFARI_TECH_PREVIEW = "Safari Technology Preview";
    
    /** @deprecated Use constructor methods instead */
    @Deprecated
    public static final String CAPABILITY = "safari.options";
    
    /**
     * Default constructor for SafariOptions.
     */
    public SafariOptions();
    
    /**
     * Initialize SafariOptions from existing capabilities.
     * @param source Existing capabilities to copy from
     */
    public SafariOptions(Capabilities source);
    
    /**
     * Factory method to create SafariOptions from capabilities.
     * @param capabilities Capabilities to convert
     * @return New SafariOptions instance
     */
    public static SafariOptions fromCapabilities(Capabilities capabilities);
    
    /**
     * Merge additional capabilities into these options.
     * @param extraCapabilities Additional capabilities to merge
     * @return This SafariOptions instance for chaining
     */
    public SafariOptions merge(Capabilities extraCapabilities);
    
    /**
     * Enable or disable automatic inspection.
     * @param automaticInspection Whether to enable automatic inspection
     * @return This SafariOptions instance for chaining
     */
    public SafariOptions setAutomaticInspection(boolean automaticInspection);
    
    /**
     * Enable or disable automatic profiling.
     * @param automaticProfiling Whether to enable automatic profiling
     * @return This SafariOptions instance for chaining
     */
    public SafariOptions setAutomaticProfiling(boolean automaticProfiling);
    
    /**
     * Configure use of Safari Technology Preview.
     * @param useTechnologyPreview Whether to use Safari Technology Preview
     * @return This SafariOptions instance for chaining
     */
    public SafariOptions setUseTechnologyPreview(boolean useTechnologyPreview);
    
    /**
     * Set proxy configuration.
     * @param proxy Proxy configuration to use
     * @return This SafariOptions instance for chaining
     */
    public SafariOptions setProxy(Proxy proxy);
    
    /**
     * Get current automatic inspection setting.
     * @return Whether automatic inspection is enabled
     */
    public boolean getAutomaticInspection();
    
    /**
     * Get current automatic profiling setting.
     * @return Whether automatic profiling is enabled
     */
    public boolean getAutomaticProfiling();
    
    /**
     * Get current technology preview setting.
     * @return Whether Safari Technology Preview is enabled
     */
    public boolean getUseTechnologyPreview();
    
    /**
     * Set a capability with special handling for technology preview.
     * @param key Capability key
     * @param value Capability value
     */
    @Override
    public void setCapability(String key, Object value);
    
    /**
     * Set a boolean capability with special handling for technology preview.
     * @param key Capability key  
     * @param value Boolean capability value
     */
    @Override
    public void setCapability(String key, boolean value);
    
    /**
     * Serialize options to map representation.
     * @return Map representation of these options
     */
    public Map<String, Object> asMap();
}

Safari Driver Service

Service management for Safari driver executable lifecycle.

public class SafariDriverService extends DriverService {
    /**
     * Create a service with default options.
     * @return New SafariDriverService instance
     */
    public static SafariDriverService createDefaultService();
    
    /**
     * Create a service with specified SafariOptions.
     * @param options SafariOptions to configure the service
     * @return New SafariDriverService instance
     */
    public static SafariDriverService createDefaultService(SafariOptions options);
    
    /**
     * Create a service from capabilities.
     * @param caps Capabilities to configure the service
     * @return New SafariDriverService instance
     */
    public static SafariDriverService createDefaultService(Capabilities caps);
    
    /**
     * Wait for the driver service to become available.
     */
    @Override
    protected void waitUntilAvailable();
    
    public static class Builder extends DriverService.Builder<SafariDriverService, SafariDriverService.Builder> {
        /**
         * Score how well this builder supports the given capabilities.
         * @param capabilities Capabilities to score
         * @return Compatibility score
         */
        public int score(Capabilities capabilities);
        
        /**
         * Configure whether to use Safari Technology Preview.
         * @param useTechnologyPreview Whether to use Technology Preview
         * @return This builder instance for chaining
         */
        public SafariDriverService.Builder usingTechnologyPreview(boolean useTechnologyPreview);
        
        /**
         * Find the default Safari driver executable.
         * @return File representing the default executable
         */
        @Override
        protected File findDefaultExecutable();
        
        /**
         * Create command line arguments for the service.
         * @return List of command line arguments
         */
        @Override
        protected ImmutableList<String> createArgs();
        
        /**
         * Create the driver service instance.
         * @param exe Executable file
         * @param port Port number
         * @param args Command line arguments
         * @param environment Environment variables
         * @return New SafariDriverService instance
         */
        @Override
        protected SafariDriverService createDriverService(
            File exe, 
            int port, 
            ImmutableList<String> args, 
            ImmutableMap<String, String> environment
        );
    }
}

Driver Factory and Discovery

WebDriverInfo implementations for driver discovery and instantiation.

public class SafariDriverInfo implements WebDriverInfo {
    /**
     * Get the display name for this driver.
     * @return "Safari"
     */
    @Override
    public String getDisplayName();
    
    /**
     * Get the canonical capabilities for Safari.
     * @return Default Safari capabilities
     */
    @Override
    public Capabilities getCanonicalCapabilities();
    
    /**
     * Check if this driver supports the given capabilities.
     * @param capabilities Capabilities to check
     * @return Whether capabilities are supported
     */
    @Override
    public boolean isSupporting(Capabilities capabilities);
    
    /**
     * Check if Safari driver is available on this system.
     * @return Whether Safari driver is available
     */
    @Override
    public boolean isAvailable();
    
    /**
     * Get maximum simultaneous sessions supported.
     * @return 1 (Safari limitation)
     */
    @Override
    public int getMaximumSimultaneousSessions();
    
    /**
     * Create a Safari WebDriver instance.
     * @param capabilities Desired capabilities
     * @return Optional WebDriver instance
     */
    @Override
    public Optional<WebDriver> createDriver(Capabilities capabilities);
}

public class SafariTechPreviewDriverInfo implements WebDriverInfo {
    /**
     * Get the display name for this driver.
     * @return "Safari Technology Preview"
     */
    @Override
    public String getDisplayName();
    
    /**
     * Get the canonical capabilities for Safari Technology Preview.
     * @return Default Safari Technology Preview capabilities
     */
    @Override
    public Capabilities getCanonicalCapabilities();
    
    /**
     * Check if this driver supports the given capabilities.
     * @param capabilities Capabilities to check
     * @return Whether capabilities are supported
     */
    @Override
    public boolean isSupporting(Capabilities capabilities);
    
    /**
     * Check if Safari Technology Preview driver is available.
     * @return Whether Safari Technology Preview driver is available
     */
    @Override
    public boolean isAvailable();
    
    /**
     * Get maximum simultaneous sessions supported.
     * @return 1 (Safari limitation)
     */
    @Override
    public int getMaximumSimultaneousSessions();
    
    /**
     * Create a Safari Technology Preview WebDriver instance.
     * @param capabilities Desired capabilities
     * @return Optional WebDriver instance
     */
    @Override
    public Optional<WebDriver> createDriver(Capabilities capabilities);
}

Exception Handling

Safari-specific exceptions for connection and service management.

public class ConnectionClosedException extends WebDriverException {
    /**
     * Create an exception for Safari driver connection failures.
     * @param message Error message describing the connection failure
     */
    public ConnectionClosedException(String message);
}

Usage Examples

Basic Safari Automation

import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By;

public class BasicSafariExample {
    public static void main(String[] args) {
        // Create Safari driver
        WebDriver driver = new SafariDriver();
        
        try {
            // Navigate to a page
            driver.get("https://www.example.com");
            
            // Find and interact with elements
            String title = driver.getTitle();
            System.out.println("Page title: " + title);
            
            // Find element and click
            driver.findElement(By.linkText("More information...")).click();
            
        } finally {
            driver.quit();
        }
    }
}

Safari Technology Preview

import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariOptions;
import org.openqa.selenium.WebDriver;

public class SafariTechPreviewExample {
    public static void main(String[] args) {
        // Configure Safari Technology Preview
        SafariOptions options = new SafariOptions();
        options.setUseTechnologyPreview(true);
        options.setAutomaticInspection(false);
        options.setAutomaticProfiling(false);
        
        // Create driver with Technology Preview
        WebDriver driver = new SafariDriver(options);
        
        try {
            driver.get("https://developer.mozilla.org");
            // Test modern web features
        } finally {
            driver.quit();
        }
    }
}

Custom Service Configuration

import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariDriverService;
import org.openqa.selenium.safari.SafariOptions;

public class CustomServiceExample {
    public static void main(String[] args) {
        // Build custom service
        SafariDriverService service = new SafariDriverService.Builder()
            .usingTechnologyPreview(true)
            .usingPort(4444)
            .build();
        
        SafariOptions options = new SafariOptions();
        options.setAutomaticInspection(true);
        
        SafariDriver driver = new SafariDriver(service, options);
        
        try {
            driver.get("https://webkit.org");
        } finally {
            driver.quit();
            service.stop();
        }
    }
}

Remote WebDriver with Safari

import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariOptions;
import java.net.URL;

public class RemoteSafariExample {
    public static void main(String[] args) throws Exception {
        SafariOptions options = new SafariOptions();
        options.setUseTechnologyPreview(false);
        
        // Connect to remote Selenium Grid
        RemoteWebDriver driver = new RemoteWebDriver(
            new URL("http://localhost:4444/wd/hub"), 
            options
        );
        
        try {
            driver.get("https://selenium.dev");
        } finally {
            driver.quit();
        }
    }
}

Types

Core WebDriver Types

// From org.openqa.selenium
interface WebDriver {
    void get(String url);
    String getCurrentUrl();
    String getTitle();
    void quit();
    WebElement findElement(By by);
    List<WebElement> findElements(By by);
    // ... other standard WebDriver methods
}

// From org.openqa.selenium.remote
class RemoteWebDriver implements WebDriver {
    protected RemoteWebDriver();
    public RemoteWebDriver(Capabilities capabilities);
    public RemoteWebDriver(URL remoteAddress, Capabilities capabilities);
    // ... WebDriver implementation methods
}

// From org.openqa.selenium
interface WebDriverInfo {
    String getDisplayName();
    Capabilities getCanonicalCapabilities();
    boolean isSupporting(Capabilities capabilities);
    boolean isAvailable();
    int getMaximumSimultaneousSessions();
    Optional<WebDriver> createDriver(Capabilities capabilities);
}

Capabilities and Configuration

// From org.openqa.selenium.Capabilities
interface Capabilities {
    String getBrowserName();
    String getVersion();
    String getPlatform();
    boolean is(String capabilityName);
    Object getCapability(String capabilityName);
    Map<String, Object> asMap();
}

// From org.openqa.selenium.MutableCapabilities
class MutableCapabilities implements Capabilities {
    public void setCapability(String key, Object value);
    public void setCapability(String key, boolean value);
    public Capabilities merge(Capabilities other);
}

// From org.openqa.selenium.Proxy
class Proxy {
    public enum ProxyType { DIRECT, MANUAL, PAC, AUTODETECT, SYSTEM }
    public void setHttpProxy(String httpProxy);
    public void setSslProxy(String sslProxy);
    public void setFtpProxy(String ftpProxy);
    public void setNoProxy(String noProxy);
}

Service and Builder Types

// From org.openqa.selenium.remote.service.DriverService
abstract class DriverService {
    public abstract void start();
    public abstract void stop();
    public abstract boolean isRunning();
    public abstract URL getUrl();
}

// From org.openqa.selenium.remote.service.DriverService.Builder
abstract class DriverService.Builder<DS extends DriverService, B extends DriverService.Builder<DS, B>> {
    public B usingPort(int port);
    public B withEnvironment(Map<String, String> environment);
    public B withLogFile(File logFile);
    public DS build();
}

Exception Types

// From org.openqa.selenium
class WebDriverException extends RuntimeException {
    public WebDriverException(String message);
    public WebDriverException(String message, Throwable cause);
}

// From org.openqa.selenium
class SessionNotCreatedException extends WebDriverException {
    public SessionNotCreatedException(String message);
    public SessionNotCreatedException(String message, Throwable cause);
}

// From org.openqa.selenium
class InvalidArgumentException extends WebDriverException {
    public InvalidArgumentException(String message);
    public InvalidArgumentException(String message, Throwable cause);
}

Utility Types

// From org.openqa.selenium.remote
class FileDetector {
    public File getLocalFile(CharSequence... keySequence);
}

// Java Standard Library Types
interface Optional<T> {
    static <T> Optional<T> empty();
    static <T> Optional<T> of(T value);
    boolean isPresent();
    T get();
}

interface List<E> extends Collection<E> {
    // Standard List interface methods
}

interface Map<K, V> {
    V put(K key, V value);
    V get(Object key);
    Set<K> keySet();
    Collection<V> values();
}

// From com.google.common.collect (Guava)
interface ImmutableList<E> extends List<E> {
    static <E> ImmutableList<E> of();
    static <E> ImmutableList<E> of(E element);
    // Immutable list implementation
}

interface ImmutableMap<K, V> extends Map<K, V> {
    static <K, V> ImmutableMap<K, V> of();
    static <K, V> ImmutableMap<K, V> of(K key, V value);
    // Immutable map implementation
}

// Java Standard Library
class File {
    public File(String pathname);
    public boolean exists();
    public String getAbsolutePath();
}

class URL {
    public URL(String spec);
    public String toString();
}

Error Handling

Common exceptions when working with Safari Driver:

  • WebDriverException: General WebDriver errors, including file detection attempts
  • ConnectionClosedException: Safari-specific connection failures
  • SessionNotCreatedException: When Safari driver service cannot start
  • InvalidArgumentException: Invalid capabilities or configuration
try {
    SafariDriver driver = new SafariDriver(options);
    // Driver operations
} catch (ConnectionClosedException e) {
    // Safari connection failed
    System.err.println("Safari connection failed: " + e.getMessage());
} catch (WebDriverException e) {
    // General WebDriver error
    System.err.println("WebDriver error: " + e.getMessage());
}

Platform Requirements

  • Operating System: macOS only
  • Safari Version: 5.1 or later
  • Safari Technology Preview: Optional, for testing cutting-edge features
  • System Permissions: Safari must allow automation (enabled in Develop menu)
  • WebDriver Support: Built into Safari on macOS 10.12+