Path: blob/trunk/javascript/selenium-webdriver/test/firefox/options_test.js
3991 views
// Licensed to the Software Freedom Conservancy (SFC) under one1// or more contributor license agreements. See the NOTICE file2// distributed with this work for additional information3// regarding copyright ownership. The SFC licenses this file4// to you under the Apache License, Version 2.0 (the5// "License"); you may not use this file except in compliance6// with the License. You may obtain a copy of the License at7//8// http://www.apache.org/licenses/LICENSE-2.09//10// Unless required by applicable law or agreed to in writing,11// software distributed under the License is distributed on an12// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13// KIND, either express or implied. See the License for the14// specific language governing permissions and limitations15// under the License.1617'use strict'1819const assert = require('node:assert')20const path = require('node:path')21const firefox = require('selenium-webdriver/firefox')22const io = require('selenium-webdriver/io')23const { Browser } = require('selenium-webdriver/index')24const { Pages, suite } = require('../../lib/test')25const { locate } = require('../../lib/test/resources')26const { until, By } = require('selenium-webdriver/index')2728const EXT_XPI = locate('common/extensions/webextensions-selenium-example.xpi')2930suite(31function (env) {32describe('firefox', function () {33let driver3435beforeEach(function () {36driver = null37})3839afterEach(function () {40return driver && driver.quit()41})4243describe('Options', function () {44let profileWithUserPrefs4546before(async function createProfileWithUserPrefs() {47profileWithUserPrefs = await io.tmpDir()48await io.write(49path.join(profileWithUserPrefs, 'user.js'),50'user_pref("general.useragent.override", "foo;bar");\n',51)52})5354describe('setProfile', function () {55it('use profile with custom prefs', async function () {56let options = env.builder().getFirefoxOptions() || new firefox.Options()57options.setProfile(profileWithUserPrefs)5859driver = env.builder().setFirefoxOptions(options).build()6061await driver.get(Pages.echoPage)62await verifyUserAgentWasChanged()63})64})6566describe('set mobile options', function () {67it('allows setting android activity', function () {68let options = new firefox.Options().enableMobile()69let firefoxOptions = options.firefoxOptions_()70assert.deepStrictEqual(71{72androidPackage: 'org.mozilla.firefox',73prefs: { 'remote.active-protocols': 1 },74},75firefoxOptions,76)77})78})7980describe('setPreference', function () {81it('throws if key is not a string', function () {82let options = new firefox.Options()83assert.throws(() => options.setPreference(1, 2), TypeError)84options.setPreference('1', 2) // OK if no throw.85})8687it('throws if value is an invalid type', function () {88let options = new firefox.Options()89options.setPreference('a', 1)90options.setPreference('b', '2')91options.setPreference('c', true)9293assert.throws(() => options.setPreference('d', null), TypeError)94assert.throws(() => options.setPreference('d', undefined), TypeError)95assert.throws(() => options.setPreference('d', {}), TypeError)96})9798it('can start Firefox with custom preferences', async function () {99let options = env.builder().getFirefoxOptions() || new firefox.Options()100options.setPreference('general.useragent.override', 'foo;bar')101102driver = env.builder().setFirefoxOptions(options).build()103104await driver.get(Pages.echoPage)105await verifyUserAgentWasChanged()106})107108it('can add extra prefs on top of an existing profile', async function () {109let options = env.builder().getFirefoxOptions() || new firefox.Options()110options.setPreference('general.useragent.override', 'baz;qux')111options.setProfile(profileWithUserPrefs)112113driver = env.builder().setFirefoxOptions(options).build()114115await driver.get(Pages.echoPage)116await verifyUserAgent('baz;qux')117})118})119120describe('addExtensions', function () {121it('can add extension to brand new profile', async function () {122let options = env.builder().getFirefoxOptions() || new firefox.Options()123options.addExtensions(EXT_XPI)124125driver = env.builder().setFirefoxOptions(options).build()126127await driver.get(Pages.echoPage)128await verifyWebExtensionWasInstalled()129})130131it('can add extension to custom profile', async function () {132let options = env.builder().getFirefoxOptions() || new firefox.Options()133options.addExtensions(EXT_XPI).setProfile(profileWithUserPrefs)134135driver = env.builder().setFirefoxOptions(options).build()136137await driver.get(Pages.echoPage)138await verifyWebExtensionWasInstalled()139await verifyUserAgentWasChanged()140})141142it('can addExtensions and setPreference', async function () {143let options = env.builder().getFirefoxOptions() || new firefox.Options()144options.addExtensions(EXT_XPI)145options.setPreference('general.useragent.override', 'foo;bar')146147driver = env.builder().setFirefoxOptions(options).build()148149await driver.get(Pages.echoPage)150await verifyWebExtensionWasInstalled()151await verifyUserAgentWasChanged()152})153154it('can load .zip webextensions', async function () {155let options = env.builder().getFirefoxOptions() || new firefox.Options()156options.addExtensions(EXT_XPI)157158driver = env.builder().setFirefoxOptions(options).build()159160await driver.get(Pages.echoPage)161await verifyWebExtensionWasInstalled()162})163})164})165166async function verifyUserAgentWasChanged() {167await verifyUserAgent('foo;bar')168}169170async function verifyUserAgent(expected) {171let userAgent = await driver.executeScript('return window.navigator.userAgent')172assert.strictEqual(userAgent, expected)173}174175async function verifyWebExtensionWasInstalled() {176let footer = await driver.wait(until.elementLocated(By.id('webextensions-selenium-example')), 5000)177178let text = await footer.getText()179assert.strictEqual(text, 'Content injected by webextensions-selenium-example')180}181})182},183{ browsers: [Browser.FIREFOX] },184)185186187