Path: blob/trunk/javascript/selenium-webdriver/test/firefox/options_test.js
2884 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')29const WEBEXTENSION_EXTENSION_ID = '[email protected]'3031suite(32function (env) {33describe('firefox', function () {34let driver3536beforeEach(function () {37driver = null38})3940afterEach(function () {41return driver && driver.quit()42})4344describe('Options', function () {45let profileWithWebExtension46let profileWithUserPrefs4748before(async function createProfileWithWebExtension() {49profileWithWebExtension = await io.tmpDir()50let extensionsDir = path.join(profileWithWebExtension, 'extensions')51await io.mkdir(extensionsDir)52await io.write(path.join(extensionsDir, WEBEXTENSION_EXTENSION_ID), await io.read(EXT_XPI))53})5455before(async function createProfileWithUserPrefs() {56profileWithUserPrefs = await io.tmpDir()57await io.write(58path.join(profileWithUserPrefs, 'user.js'),59'user_pref("general.useragent.override", "foo;bar");\n',60)61})6263describe('setProfile', function () {64it('use profile with custom prefs', async function () {65let options = env.builder().getFirefoxOptions() || new firefox.Options()66options.setProfile(profileWithUserPrefs)6768driver = env.builder().setFirefoxOptions(options).build()6970await driver.get(Pages.echoPage)71await verifyUserAgentWasChanged()72})7374it('use profile with extension', async function () {75let options = env.builder().getFirefoxOptions() || new firefox.Options()76options.setProfile(profileWithWebExtension)7778driver = env.builder().setFirefoxOptions(options).build()7980await driver.get(Pages.echoPage)81await verifyWebExtensionWasInstalled()82})83})8485describe('set mobile options', function () {86it('allows setting android activity', function () {87let options = new firefox.Options().enableMobile()88let firefoxOptions = options.firefoxOptions_()89assert.deepStrictEqual(90{91androidPackage: 'org.mozilla.firefox',92prefs: { 'remote.active-protocols': 1 },93},94firefoxOptions,95)96})97})9899describe('setPreference', function () {100it('throws if key is not a string', function () {101let options = new firefox.Options()102assert.throws(() => options.setPreference(1, 2), TypeError)103options.setPreference('1', 2) // OK if no throw.104})105106it('throws if value is an invalid type', function () {107let options = new firefox.Options()108options.setPreference('a', 1)109options.setPreference('b', '2')110options.setPreference('c', true)111112assert.throws(() => options.setPreference('d', null), TypeError)113assert.throws(() => options.setPreference('d', undefined), TypeError)114assert.throws(() => options.setPreference('d', {}), TypeError)115})116117it('can start Firefox with custom preferences', async function () {118let options = env.builder().getFirefoxOptions() || new firefox.Options()119options.setPreference('general.useragent.override', 'foo;bar')120121driver = env.builder().setFirefoxOptions(options).build()122123await driver.get(Pages.echoPage)124await verifyUserAgentWasChanged()125})126127it('can add extra prefs on top of an existing profile', async function () {128let options = env.builder().getFirefoxOptions() || new firefox.Options()129options.setPreference('general.useragent.override', 'foo;bar')130options.setProfile(profileWithWebExtension)131132driver = env.builder().setFirefoxOptions(options).build()133134await driver.get(Pages.echoPage)135await verifyWebExtensionWasInstalled()136await verifyUserAgentWasChanged()137})138})139140describe('addExtensions', function () {141it('can add extension to brand new profile', async function () {142let options = env.builder().getFirefoxOptions() || new firefox.Options()143options.addExtensions(EXT_XPI)144145driver = env.builder().setFirefoxOptions(options).build()146147await driver.get(Pages.echoPage)148await verifyWebExtensionWasInstalled()149})150151it('can add extension to custom profile', async function () {152let options = env.builder().getFirefoxOptions() || new firefox.Options()153options.addExtensions(EXT_XPI).setProfile(profileWithUserPrefs)154155driver = env.builder().setFirefoxOptions(options).build()156157await driver.get(Pages.echoPage)158await verifyWebExtensionWasInstalled()159await verifyUserAgentWasChanged()160})161162it('can addExtensions and setPreference', async function () {163let options = env.builder().getFirefoxOptions() || new firefox.Options()164options.addExtensions(EXT_XPI)165options.setPreference('general.useragent.override', 'foo;bar')166167driver = env.builder().setFirefoxOptions(options).build()168169await driver.get(Pages.echoPage)170await verifyWebExtensionWasInstalled()171await verifyUserAgentWasChanged()172})173174it('can load .zip webextensions', async function () {175let options = env.builder().getFirefoxOptions() || new firefox.Options()176options.addExtensions(EXT_XPI)177178driver = env.builder().setFirefoxOptions(options).build()179180await driver.get(Pages.echoPage)181await verifyWebExtensionWasInstalled()182})183})184})185186async function verifyUserAgentWasChanged() {187let userAgent = await driver.executeScript('return window.navigator.userAgent')188assert.strictEqual(userAgent, 'foo;bar')189}190191async function verifyWebExtensionWasInstalled() {192let footer = await driver.wait(until.elementLocated(By.id('webextensions-selenium-example')), 5000)193194let text = await footer.getText()195assert.strictEqual(text, 'Content injected by webextensions-selenium-example')196}197})198},199{ browsers: [Browser.FIREFOX] },200)201202203