Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
seleniumhq
GitHub Repository: seleniumhq/selenium
Path: blob/trunk/javascript/selenium-webdriver/test/firefox/options_test.js
2884 views
1
// Licensed to the Software Freedom Conservancy (SFC) under one
2
// or more contributor license agreements. See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership. The SFC licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License. You may obtain a copy of the License at
8
//
9
// http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied. See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
'use strict'
19
20
const assert = require('node:assert')
21
const path = require('node:path')
22
const firefox = require('selenium-webdriver/firefox')
23
const io = require('selenium-webdriver/io')
24
const { Browser } = require('selenium-webdriver/index')
25
const { Pages, suite } = require('../../lib/test')
26
const { locate } = require('../../lib/test/resources')
27
const { until, By } = require('selenium-webdriver/index')
28
29
const EXT_XPI = locate('common/extensions/webextensions-selenium-example.xpi')
30
const WEBEXTENSION_EXTENSION_ID = '[email protected]'
31
32
suite(
33
function (env) {
34
describe('firefox', function () {
35
let driver
36
37
beforeEach(function () {
38
driver = null
39
})
40
41
afterEach(function () {
42
return driver && driver.quit()
43
})
44
45
describe('Options', function () {
46
let profileWithWebExtension
47
let profileWithUserPrefs
48
49
before(async function createProfileWithWebExtension() {
50
profileWithWebExtension = await io.tmpDir()
51
let extensionsDir = path.join(profileWithWebExtension, 'extensions')
52
await io.mkdir(extensionsDir)
53
await io.write(path.join(extensionsDir, WEBEXTENSION_EXTENSION_ID), await io.read(EXT_XPI))
54
})
55
56
before(async function createProfileWithUserPrefs() {
57
profileWithUserPrefs = await io.tmpDir()
58
await io.write(
59
path.join(profileWithUserPrefs, 'user.js'),
60
'user_pref("general.useragent.override", "foo;bar");\n',
61
)
62
})
63
64
describe('setProfile', function () {
65
it('use profile with custom prefs', async function () {
66
let options = env.builder().getFirefoxOptions() || new firefox.Options()
67
options.setProfile(profileWithUserPrefs)
68
69
driver = env.builder().setFirefoxOptions(options).build()
70
71
await driver.get(Pages.echoPage)
72
await verifyUserAgentWasChanged()
73
})
74
75
it('use profile with extension', async function () {
76
let options = env.builder().getFirefoxOptions() || new firefox.Options()
77
options.setProfile(profileWithWebExtension)
78
79
driver = env.builder().setFirefoxOptions(options).build()
80
81
await driver.get(Pages.echoPage)
82
await verifyWebExtensionWasInstalled()
83
})
84
})
85
86
describe('set mobile options', function () {
87
it('allows setting android activity', function () {
88
let options = new firefox.Options().enableMobile()
89
let firefoxOptions = options.firefoxOptions_()
90
assert.deepStrictEqual(
91
{
92
androidPackage: 'org.mozilla.firefox',
93
prefs: { 'remote.active-protocols': 1 },
94
},
95
firefoxOptions,
96
)
97
})
98
})
99
100
describe('setPreference', function () {
101
it('throws if key is not a string', function () {
102
let options = new firefox.Options()
103
assert.throws(() => options.setPreference(1, 2), TypeError)
104
options.setPreference('1', 2) // OK if no throw.
105
})
106
107
it('throws if value is an invalid type', function () {
108
let options = new firefox.Options()
109
options.setPreference('a', 1)
110
options.setPreference('b', '2')
111
options.setPreference('c', true)
112
113
assert.throws(() => options.setPreference('d', null), TypeError)
114
assert.throws(() => options.setPreference('d', undefined), TypeError)
115
assert.throws(() => options.setPreference('d', {}), TypeError)
116
})
117
118
it('can start Firefox with custom preferences', async function () {
119
let options = env.builder().getFirefoxOptions() || new firefox.Options()
120
options.setPreference('general.useragent.override', 'foo;bar')
121
122
driver = env.builder().setFirefoxOptions(options).build()
123
124
await driver.get(Pages.echoPage)
125
await verifyUserAgentWasChanged()
126
})
127
128
it('can add extra prefs on top of an existing profile', async function () {
129
let options = env.builder().getFirefoxOptions() || new firefox.Options()
130
options.setPreference('general.useragent.override', 'foo;bar')
131
options.setProfile(profileWithWebExtension)
132
133
driver = env.builder().setFirefoxOptions(options).build()
134
135
await driver.get(Pages.echoPage)
136
await verifyWebExtensionWasInstalled()
137
await verifyUserAgentWasChanged()
138
})
139
})
140
141
describe('addExtensions', function () {
142
it('can add extension to brand new profile', async function () {
143
let options = env.builder().getFirefoxOptions() || new firefox.Options()
144
options.addExtensions(EXT_XPI)
145
146
driver = env.builder().setFirefoxOptions(options).build()
147
148
await driver.get(Pages.echoPage)
149
await verifyWebExtensionWasInstalled()
150
})
151
152
it('can add extension to custom profile', async function () {
153
let options = env.builder().getFirefoxOptions() || new firefox.Options()
154
options.addExtensions(EXT_XPI).setProfile(profileWithUserPrefs)
155
156
driver = env.builder().setFirefoxOptions(options).build()
157
158
await driver.get(Pages.echoPage)
159
await verifyWebExtensionWasInstalled()
160
await verifyUserAgentWasChanged()
161
})
162
163
it('can addExtensions and setPreference', async function () {
164
let options = env.builder().getFirefoxOptions() || new firefox.Options()
165
options.addExtensions(EXT_XPI)
166
options.setPreference('general.useragent.override', 'foo;bar')
167
168
driver = env.builder().setFirefoxOptions(options).build()
169
170
await driver.get(Pages.echoPage)
171
await verifyWebExtensionWasInstalled()
172
await verifyUserAgentWasChanged()
173
})
174
175
it('can load .zip webextensions', async function () {
176
let options = env.builder().getFirefoxOptions() || new firefox.Options()
177
options.addExtensions(EXT_XPI)
178
179
driver = env.builder().setFirefoxOptions(options).build()
180
181
await driver.get(Pages.echoPage)
182
await verifyWebExtensionWasInstalled()
183
})
184
})
185
})
186
187
async function verifyUserAgentWasChanged() {
188
let userAgent = await driver.executeScript('return window.navigator.userAgent')
189
assert.strictEqual(userAgent, 'foo;bar')
190
}
191
192
async function verifyWebExtensionWasInstalled() {
193
let footer = await driver.wait(until.elementLocated(By.id('webextensions-selenium-example')), 5000)
194
195
let text = await footer.getText()
196
assert.strictEqual(text, 'Content injected by webextensions-selenium-example')
197
}
198
})
199
},
200
{ browsers: [Browser.FIREFOX] },
201
)
202
203