227 lines
7.9 KiB
JavaScript
227 lines
7.9 KiB
JavaScript
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The SFC licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
'use strict';
|
|
|
|
var fs = require('fs');
|
|
|
|
var webdriver = require('../..'),
|
|
chrome = require('../../chrome'),
|
|
symbols = require('../../lib/symbols'),
|
|
proxy = require('../../proxy'),
|
|
assert = require('../../testing/assert');
|
|
|
|
var test = require('../../lib/test');
|
|
|
|
|
|
describe('chrome.Options', function() {
|
|
describe('fromCapabilities', function() {
|
|
|
|
it('should return a new Options instance if none were defined',
|
|
function() {
|
|
var options = chrome.Options.fromCapabilities(
|
|
new webdriver.Capabilities());
|
|
assert(options).instanceOf(chrome.Options);
|
|
});
|
|
|
|
it('should return options instance if present', function() {
|
|
var options = new chrome.Options();
|
|
var caps = options.toCapabilities();
|
|
assert(caps).instanceOf(webdriver.Capabilities);
|
|
assert(chrome.Options.fromCapabilities(caps)).equalTo(options);
|
|
});
|
|
|
|
it('should rebuild options from wire representation', function() {
|
|
var expectedExtension = fs.readFileSync(__filename, 'base64');
|
|
var caps = webdriver.Capabilities.chrome().set('chromeOptions', {
|
|
args: ['a', 'b'],
|
|
extensions: [__filename],
|
|
binary: 'binaryPath',
|
|
logPath: 'logFilePath',
|
|
detach: true,
|
|
localState: 'localStateValue',
|
|
prefs: 'prefsValue'
|
|
});
|
|
|
|
var options = chrome.Options.fromCapabilities(caps);
|
|
var json = options[symbols.serialize]();
|
|
|
|
assert(json.args.length).equalTo(2);
|
|
assert(json.args[0]).equalTo('a');
|
|
assert(json.args[1]).equalTo('b');
|
|
assert(json.extensions.length).equalTo(1);
|
|
assert(json.extensions[0]).equalTo(expectedExtension);
|
|
assert(json.binary).equalTo('binaryPath');
|
|
assert(json.logPath).equalTo('logFilePath');
|
|
assert(json.detach).equalTo(true);
|
|
assert(json.localState).equalTo('localStateValue');
|
|
assert(json.prefs).equalTo('prefsValue');
|
|
});
|
|
|
|
it('should rebuild options from incomplete wire representation',
|
|
function() {
|
|
var caps = webdriver.Capabilities.chrome().set('chromeOptions', {
|
|
logPath: 'logFilePath'
|
|
});
|
|
|
|
var options = chrome.Options.fromCapabilities(caps);
|
|
var json = options[symbols.serialize]();
|
|
assert(json.args).isUndefined();
|
|
assert(json.binary).isUndefined();
|
|
assert(json.detach).isUndefined();
|
|
assert(json.excludeSwitches).isUndefined();
|
|
assert(json.extensions).isUndefined();
|
|
assert(json.localState).isUndefined();
|
|
assert(json.logPath).equalTo('logFilePath');
|
|
assert(json.prefs).isUndefined();
|
|
assert(json.minidumpPath).isUndefined();
|
|
assert(json.mobileEmulation).isUndefined();
|
|
assert(json.perfLoggingPrefs).isUndefined();
|
|
});
|
|
|
|
it('should extract supported WebDriver capabilities', function() {
|
|
var proxyPrefs = proxy.direct();
|
|
var logPrefs = {};
|
|
var caps = webdriver.Capabilities.chrome().
|
|
set(webdriver.Capability.PROXY, proxyPrefs).
|
|
set(webdriver.Capability.LOGGING_PREFS, logPrefs);
|
|
|
|
var options = chrome.Options.fromCapabilities(caps);
|
|
assert(options.proxy_).equalTo(proxyPrefs);
|
|
assert(options.logPrefs_).equalTo(logPrefs);
|
|
});
|
|
});
|
|
|
|
describe('addArguments', function() {
|
|
it('takes var_args', function() {
|
|
var options = new chrome.Options();
|
|
assert(options[symbols.serialize]().args).isUndefined();
|
|
|
|
options.addArguments('a', 'b');
|
|
var json = options[symbols.serialize]();
|
|
assert(json.args.length).equalTo(2);
|
|
assert(json.args[0]).equalTo('a');
|
|
assert(json.args[1]).equalTo('b');
|
|
});
|
|
|
|
it('flattens input arrays', function() {
|
|
var options = new chrome.Options();
|
|
assert(options[symbols.serialize]().args).isUndefined();
|
|
|
|
options.addArguments(['a', 'b'], 'c', [1, 2], 3);
|
|
var json = options[symbols.serialize]();
|
|
assert(json.args.length).equalTo(6);
|
|
assert(json.args[0]).equalTo('a');
|
|
assert(json.args[1]).equalTo('b');
|
|
assert(json.args[2]).equalTo('c');
|
|
assert(json.args[3]).equalTo(1);
|
|
assert(json.args[4]).equalTo(2);
|
|
assert(json.args[5]).equalTo(3);
|
|
});
|
|
});
|
|
|
|
describe('addExtensions', function() {
|
|
it('takes var_args', function() {
|
|
var options = new chrome.Options();
|
|
assert(options.extensions_.length).equalTo(0);
|
|
|
|
options.addExtensions('a', 'b');
|
|
assert(options.extensions_.length).equalTo(2);
|
|
assert(options.extensions_[0]).equalTo('a');
|
|
assert(options.extensions_[1]).equalTo('b');
|
|
});
|
|
|
|
it('flattens input arrays', function() {
|
|
var options = new chrome.Options();
|
|
assert(options.extensions_.length).equalTo(0);
|
|
|
|
options.addExtensions(['a', 'b'], 'c', [1, 2], 3);
|
|
assert(options.extensions_.length).equalTo(6);
|
|
assert(options.extensions_[0]).equalTo('a');
|
|
assert(options.extensions_[1]).equalTo('b');
|
|
assert(options.extensions_[2]).equalTo('c');
|
|
assert(options.extensions_[3]).equalTo(1);
|
|
assert(options.extensions_[4]).equalTo(2);
|
|
assert(options.extensions_[5]).equalTo(3);
|
|
});
|
|
});
|
|
|
|
describe('serialize', function() {
|
|
it('base64 encodes extensions', function() {
|
|
var expected = fs.readFileSync(__filename, 'base64');
|
|
var wire = new chrome.Options()
|
|
.addExtensions(__filename)
|
|
[symbols.serialize]();
|
|
assert(wire.extensions.length).equalTo(1);
|
|
assert(wire.extensions[0]).equalTo(expected);
|
|
});
|
|
});
|
|
|
|
describe('toCapabilities', function() {
|
|
it('returns a new capabilities object if one is not provided', function() {
|
|
var options = new chrome.Options();
|
|
var caps = options.toCapabilities();
|
|
assert(caps.get('browserName')).equalTo('chrome');
|
|
assert(caps.get('chromeOptions')).equalTo(options);
|
|
});
|
|
|
|
it('adds to input capabilities object', function() {
|
|
var caps = webdriver.Capabilities.firefox();
|
|
var options = new chrome.Options();
|
|
assert(options.toCapabilities(caps)).equalTo(caps);
|
|
assert(caps.get('browserName')).equalTo('firefox');
|
|
assert(caps.get('chromeOptions')).equalTo(options);
|
|
});
|
|
|
|
it('sets generic driver capabilities', function() {
|
|
var proxyPrefs = {};
|
|
var loggingPrefs = {};
|
|
var options = new chrome.Options().
|
|
setLoggingPrefs(loggingPrefs).
|
|
setProxy(proxyPrefs);
|
|
|
|
var caps = options.toCapabilities();
|
|
assert(caps.get('proxy')).equalTo(proxyPrefs);
|
|
assert(caps.get('loggingPrefs')).equalTo(loggingPrefs);
|
|
});
|
|
});
|
|
});
|
|
|
|
test.suite(function(env) {
|
|
var driver;
|
|
|
|
test.afterEach(function() {
|
|
return driver.quit();
|
|
});
|
|
|
|
describe('Chrome options', function() {
|
|
test.it('can start Chrome with custom args', function*() {
|
|
var options = new chrome.Options().
|
|
addArguments('user-agent=foo;bar');
|
|
|
|
driver = yield env.builder()
|
|
.setChromeOptions(options)
|
|
.build();
|
|
|
|
yield driver.get(test.Pages.ajaxyPage);
|
|
|
|
var userAgent =
|
|
yield driver.executeScript('return window.navigator.userAgent');
|
|
assert(userAgent).equalTo('foo;bar');
|
|
});
|
|
});
|
|
}, {browsers: ['chrome']});
|