Skip to content
Merged
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 javascript/node/selenium-webdriver/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
dropping arguments and would never work.
* Added the ability to use Firefox Nightly
* If Firefox cannot be found in the default location, look for it on the PATH
* Allow SafariDriver to use Safari Technology Preview.

## v3.0.1

Expand Down
51 changes: 45 additions & 6 deletions javascript/node/selenium-webdriver/safari.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class ServiceBuilder extends remote.DriverService.Builder {


const OPTIONS_CAPABILITY_KEY = 'safari.options';

const TECHNOLOGY_PREVIEW_OPTIONS_KEY = 'technologyPreview';

/**
* Configuration options specific to the {@link Driver SafariDriver}.
Expand All @@ -89,16 +89,17 @@ class Options {
* Extracts the SafariDriver specific options from the given capabilities
* object.
* @param {!Capabilities} capabilities The capabilities object.
* @return {!Options} The ChromeDriver options.
* @return {!Options} The SafariDriver options.
*/
static fromCapabilities(capabilities) {
var options = new Options();

var o = capabilities.get(OPTIONS_CAPABILITY_KEY);

if (o instanceof Options) {
options = o;
} else if (o) {
options.setCleanSession(o.cleanSession);
options.setTechnologyPreview(o[TECHNOLOGY_PREVIEW_OPTIONS_KEY]);
}

if (capabilities.has(Capability.PROXY)) {
Expand Down Expand Up @@ -148,6 +149,22 @@ class Options {
return this;
}

/**
* Instruct the SafariDriver to use the Safari Technology Preview if true.
* Otherwise, use the release version of Safari. Defaults to using the release version of Safari.
*
* @param {boolean} useTechnologyPreview
* @return {!Options} A self reference.
*/
setTechnologyPreview(useTechnologyPreview) {
if (!this.options_) {
this.options_ = {};
}

this.options_[TECHNOLOGY_PREVIEW_OPTIONS_KEY] = !!useTechnologyPreview;
return this;
}

/**
* Converts this options instance to a {@link Capabilities} object.
* @param {Capabilities=} opt_capabilities The capabilities to
Expand Down Expand Up @@ -179,6 +196,23 @@ class Options {
}
}

/**
* @param {(Options|Object<string, *>)=} o The options object
* @return {boolean}
*/
function useTechnologyPreview(o) {
if (o instanceof Options) {
return !!(o.options_ && o.options_[TECHNOLOGY_PREVIEW_OPTIONS_KEY]);
}

if (o && typeof o === 'object') {
return !!o[TECHNOLOGY_PREVIEW_OPTIONS_KEY];
}

return false;
}

const SAFARIDRIVER_TECHNOLOGY_PREVIEW_EXE = '/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver';

/**
* A WebDriver client for Safari. This class should never be instantiated
Expand All @@ -200,14 +234,19 @@ class Driver extends webdriver.WebDriver {
* @return {!Driver} A new driver instance.
*/
static createSession(opt_config, opt_flow) {
let caps;
let caps, exe;

if (opt_config instanceof Options) {
caps = opt_config.toCapabilities();
} else {
caps = opt_config || Capabilities.safari()
caps = opt_config || Capabilities.safari();
}

if (useTechnologyPreview(caps.get(OPTIONS_CAPABILITY_KEY))) {
exe = SAFARIDRIVER_TECHNOLOGY_PREVIEW_EXE;
}

let service = new ServiceBuilder().build();
let service = new ServiceBuilder(exe).build();
let executor = new http.Executor(
service.start().then(url => new http.HttpClient(url)));

Expand Down