UNPKG

selenium-webdriver

Version:

The official WebDriver JavaScript bindings from the Selenium project

223 lines (199 loc) 5.58 kB
// 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. /** * @fileoverview Defines functions for configuring a webdriver proxy: * * const proxy = require('selenium-webdriver/proxy'); * const {Capabilities} = require('selenium-webdriver'); * * let capabilities = new Capabilities(); * capabilities.setProxy(proxy.manual({http: 'host:1234'}); */ 'use strict' /** * Supported {@linkplain Config proxy configuration} types. * * @enum {string} */ const Type = { AUTODETECT: 'autodetect', DIRECT: 'direct', MANUAL: 'manual', PAC: 'pac', SYSTEM: 'system', } /** * Describes how a proxy should be configured for a WebDriver session. * @record */ function Config() {} /** * The proxy type. * @type {Type} */ Config.prototype.proxyType /** * Describes how to configure a PAC proxy. * @record * @extends {Config} */ function PacConfig() {} /** * URL for the PAC file to use. * * @type {string} */ PacConfig.prototype.proxyAutoconfigUrl /** * Record object that defines a manual proxy configuration. Manual * configurations can be easily created using either the * {@link ./proxy.manual proxy.manual()} or {@link ./proxy.socks proxy.socks()} * factory method. * * @record * @extends {Config} */ function ManualConfig() {} /** * The proxy host for FTP requests. * * @type {(string|undefined)} */ ManualConfig.prototype.ftpProxy /** * The proxy host for HTTP requests. * * @type {(string|undefined)} */ ManualConfig.prototype.httpProxy /** * An array of hosts which should bypass all proxies. * * @type {(Array<string>|undefined)} */ ManualConfig.prototype.noProxy /** * The proxy host for HTTPS requests. * * @type {(string|undefined)} */ ManualConfig.prototype.sslProxy /** * Defines the host and port for the SOCKS proxy to use. * * @type {(number|undefined)} */ ManualConfig.prototype.socksProxy /** * Defines the SOCKS proxy version. Must be a number in the range [0, 255]. * * @type {(number|undefined)} */ ManualConfig.prototype.socksVersion // PUBLIC API /** @const */ exports.Config = Config /** @const */ exports.ManualConfig = ManualConfig /** @const */ exports.PacConfig = PacConfig /** @const */ exports.Type = Type /** * Configures WebDriver to bypass all browser proxies. * @return {!Config} A new proxy configuration object. */ function direct() { return { proxyType: Type.DIRECT } } /** * Manually configures the browser proxy. The following options are * supported: * * - `ftp`: Proxy host to use for FTP requests * - `http`: Proxy host to use for HTTP requests * - `https`: Proxy host to use for HTTPS requests * - `bypass`: A list of hosts requests should directly connect to, * bypassing any other proxies for that request. May be specified as a * comma separated string, or a list of strings. * * Behavior is undefined for FTP, HTTP, and HTTPS requests if the * corresponding key is omitted from the configuration options. * * @param {{ftp: (string|undefined), * http: (string|undefined), * https: (string|undefined), * bypass: (Array<string>|undefined)}} options Proxy * configuration options. * @return {!ManualConfig} A new proxy configuration object. */ function manual({ ftp, http, https, bypass }) { return { proxyType: Type.MANUAL, ftpProxy: ftp, httpProxy: http, sslProxy: https, noProxy: bypass, } } /** * Creates a proxy configuration for a socks proxy. * * __Example:__ * * const {Capabilities} = require('selenium-webdriver'); * const proxy = require('selenium-webdriver/lib/proxy'); * * let capabilities = new Capabilities(); * capabilities.setProxy(proxy.socks('localhost:1234')); * * // Or, to include authentication. * capabilities.setProxy(proxy.socks('bob:password@localhost:1234')); * * * @param {string} socksProxy The proxy host, in the form `hostname:port`. * @param {number=} socksVersion The SOCKS proxy version. * @return {!ManualConfig} A new proxy configuration object. * @see https://en.wikipedia.org/wiki/SOCKS */ function socks(socksProxy, socksVersion = undefined) { return /** @type {!Config} */ ({ proxyType: Type.MANUAL, socksProxy, socksVersion, }) } /** * Configures WebDriver to configure the browser proxy using the PAC file at * the given URL. * @param {string} proxyAutoconfigUrl URL for the PAC proxy to use. * @return {!PacConfig} A new proxy configuration object. */ function pac(proxyAutoconfigUrl) { return { proxyType: Type.PAC, proxyAutoconfigUrl } } /** * Configures WebDriver to use the current system's proxy. * @return {!Config} A new proxy configuration object. */ function system() { return { proxyType: Type.SYSTEM } } // PUBLIC API module.exports = { system, pac, socks, manual, direct, }