Skip to content

Commit c977fb4

Browse files
committed
Add browser specific constructors for consistency with other language
bindings.
1 parent 2d75905 commit c977fb4

File tree

4 files changed

+64
-18
lines changed

4 files changed

+64
-18
lines changed

javascript/node/selenium-webdriver/CHANGES.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
`webdriver.promise.consume`. Requires harmony support (run with
66
`node --harmony-generators` in `v0.11.x`).
77
* Promise A+ compliance: a promise may no longer resolve to itself.
8-
* For consistency with other language bindings, deprecated
9-
`UnhandledAlertError#getAlert` and added `#getAlertText`.
10-
`getAlert` will be removed in `2.45.0`.
8+
* Changes for consistency with other language bindings:
9+
* Added the `chrome.ChromeDriver` class, which may be used to create a new
10+
ChromeDriver session (vs. using `webdriver.Builder`).
11+
* Added the `phantomjs.PhantomDriverJs` class.
12+
* Deprecated `UnhandledAlertError#getAlert` and added `#getAlertText`.
13+
`getAlert` will be removed in `2.45.0`.
1114
* FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha
1215
timeouts apply (2000 ms) and may be changed using `this.timeout(ms)`.
1316

javascript/node/selenium-webdriver/builder.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ function createNativeDriver(capabilities) {
3434
// Requiring 'chrome' above would create a cycle:
3535
// index -> builder -> chrome -> index
3636
var chrome = require('./chrome');
37-
return chrome.createDriver(capabilities);
37+
return new chrome.ChromeDriver(capabilities);
3838

3939
case Browser.PHANTOM_JS:
4040
// Requiring 'phantomjs' would create a cycle:
4141
// index -> builder -> phantomjs -> index
4242
var phantomjs = require('./phantomjs');
43-
return phantomjs.createDriver(capabilities);
43+
return new phantomjs.PhantomJsDriver(capabilities);
4444

4545
default:
4646
return null;

javascript/node/selenium-webdriver/chrome.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -444,9 +444,10 @@ Options.prototype.toJSON = function() {
444444
* @param {(webdriver.Capabilities|Options)=} opt_options The session options.
445445
* @param {remote.DriverService=} opt_service The session to use; will use
446446
* the {@link getDefaultService default service} by default.
447-
* @return {!webdriver.WebDriver} A new WebDriver instance.
447+
* @constructor
448+
* @extends {webdriver.WebDriver}
448449
*/
449-
function createDriver(opt_options, opt_service) {
450+
var ChromeDriver = function(opt_options, opt_service) {
450451
var service = opt_service || getDefaultService();
451452
var executor = executors.createExecutor(service.start());
452453

@@ -457,17 +458,35 @@ function createDriver(opt_options, opt_service) {
457458
options = Options.fromCapabilities(options);
458459
}
459460

460-
return webdriver.WebDriver.createSession(
461+
var driver = webdriver.WebDriver.createSession(
461462
executor, options.toCapabilities());
463+
webdriver.WebDriver.call(
464+
this, driver.getSession(), executor, driver.controlFlow());
465+
};
466+
util.inherits(ChromeDriver, webdriver.WebDriver);
467+
468+
469+
/**
470+
* Creates a new ChromeDriver session.
471+
* @param {(webdriver.Capabilities|Options)=} opt_options The session options.
472+
* @param {remote.DriverService=} opt_service The session to use; will use
473+
* the {@link getDefaultService default service} by default.
474+
* @return {!webdriver.WebDriver} A new WebDriver instance.
475+
* @deprecated Use {@link ChromeDriver} directly. This function will be
476+
* removed in 2.45.0.
477+
*/
478+
function createDriver(opt_options, opt_service) {
479+
return new ChromeDriver(opt_options, opt_service);
462480
}
463481

464482

465483

466484
// PUBLIC API
467485

468486

469-
exports.ServiceBuilder = ServiceBuilder;
487+
exports.ChromeDriver = ChromeDriver;
470488
exports.Options = Options;
489+
exports.ServiceBuilder = ServiceBuilder;
471490
exports.createDriver = createDriver;
472491
exports.getDefaultService = getDefaultService;
473492
exports.setDefaultService = setDefaultService;

javascript/node/selenium-webdriver/phantomjs.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,10 @@ var WEBDRIVER_TO_PHANTOMJS_LEVEL = (function() {
101101
/**
102102
* Creates a new PhantomJS WebDriver client.
103103
* @param {webdriver.Capabilities=} opt_capabilities The desired capabilities.
104-
* @return {!webdriver.WebDriver} A new WebDriver instance.
104+
* @constructor
105+
* @extends {webdriver.WebDriver}
105106
*/
106-
function createDriver(opt_capabilities) {
107+
var PhantomJsDriver = function(opt_capabilities) {
107108
var capabilities = opt_capabilities || webdriver.Capabilities.phantomjs();
108109
var exe = findExecutable(capabilities.get(BINARY_PATH_CAPABILITY));
109110
var args = ['--webdriver-logfile=' + DEFAULT_LOG_FILE];
@@ -140,25 +141,48 @@ function createDriver(opt_capabilities) {
140141
args = args.concat(capabilities.get(CLI_ARGS_CAPABILITY) || []);
141142

142143
var port = portprober.findFreePort();
143-
var service = new remote.DriverService(exe, {
144+
145+
/** @private {!remote.DriverService} */
146+
this.service_ = new remote.DriverService(exe, {
144147
port: port,
145148
args: webdriver.promise.when(port, function(port) {
146149
args.push('--webdriver=' + port);
147150
return args;
148151
})
149152
});
150153

151-
var executor = executors.createExecutor(service.start());
154+
var executor = executors.createExecutor(this.service_.start());
152155
var driver = webdriver.WebDriver.createSession(executor, capabilities);
153-
var boundQuit = driver.quit.bind(driver);
154-
driver.quit = function() {
155-
return boundQuit().thenFinally(service.kill.bind(service));
156-
};
157-
return driver;
156+
157+
webdriver.WebDriver.call(
158+
this, driver.getSession(), executor, driver.controlFlow());
159+
}
160+
util.inherits(PhantomJsDriver, webdriver.WebDriver);
161+
162+
163+
/** @override */
164+
PhantomJsDriver.prototype.quit = function() {
165+
var self = this;
166+
return webdriver.WebDriver.prototype.quit.call(this).thenFinally(function() {
167+
return self.service_.kill();
168+
});
169+
};
170+
171+
172+
/**
173+
* Creates a new PhantomJS WebDriver client.
174+
* @param {webdriver.Capabilities=} opt_capabilities The desired capabilities.
175+
* @return {!webdriver.WebDriver} A new WebDriver instance.
176+
* @deprecated Use {@link PhantomJsDriver}. This function will be removed in
177+
* the 2.45.0 release.
178+
*/
179+
function createDriver(opt_capabilities) {
180+
return new PhantomJsDriver(opt_capabilities);
158181
}
159182

160183

161184
// PUBLIC API
162185

163186

187+
exports.PhantomJsDriver = PhantomJsDriver;
164188
exports.createDriver = createDriver;

0 commit comments

Comments
 (0)