123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- // 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']});
|