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
3991 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
31
suite(
32
function (env) {
33
describe('firefox', function () {
34
let driver
35
36
beforeEach(function () {
37
driver = null
38
})
39
40
afterEach(function () {
41
return driver && driver.quit()
42
})
43
44
describe('Options', function () {
45
let profileWithUserPrefs
46
47
before(async function createProfileWithUserPrefs() {
48
profileWithUserPrefs = await io.tmpDir()
49
await io.write(
50
path.join(profileWithUserPrefs, 'user.js'),
51
'user_pref("general.useragent.override", "foo;bar");\n',
52
)
53
})
54
55
describe('setProfile', function () {
56
it('use profile with custom prefs', async function () {
57
let options = env.builder().getFirefoxOptions() || new firefox.Options()
58
options.setProfile(profileWithUserPrefs)
59
60
driver = env.builder().setFirefoxOptions(options).build()
61
62
await driver.get(Pages.echoPage)
63
await verifyUserAgentWasChanged()
64
})
65
})
66
67
describe('set mobile options', function () {
68
it('allows setting android activity', function () {
69
let options = new firefox.Options().enableMobile()
70
let firefoxOptions = options.firefoxOptions_()
71
assert.deepStrictEqual(
72
{
73
androidPackage: 'org.mozilla.firefox',
74
prefs: { 'remote.active-protocols': 1 },
75
},
76
firefoxOptions,
77
)
78
})
79
})
80
81
describe('setPreference', function () {
82
it('throws if key is not a string', function () {
83
let options = new firefox.Options()
84
assert.throws(() => options.setPreference(1, 2), TypeError)
85
options.setPreference('1', 2) // OK if no throw.
86
})
87
88
it('throws if value is an invalid type', function () {
89
let options = new firefox.Options()
90
options.setPreference('a', 1)
91
options.setPreference('b', '2')
92
options.setPreference('c', true)
93
94
assert.throws(() => options.setPreference('d', null), TypeError)
95
assert.throws(() => options.setPreference('d', undefined), TypeError)
96
assert.throws(() => options.setPreference('d', {}), TypeError)
97
})
98
99
it('can start Firefox with custom preferences', async function () {
100
let options = env.builder().getFirefoxOptions() || new firefox.Options()
101
options.setPreference('general.useragent.override', 'foo;bar')
102
103
driver = env.builder().setFirefoxOptions(options).build()
104
105
await driver.get(Pages.echoPage)
106
await verifyUserAgentWasChanged()
107
})
108
109
it('can add extra prefs on top of an existing profile', async function () {
110
let options = env.builder().getFirefoxOptions() || new firefox.Options()
111
options.setPreference('general.useragent.override', 'baz;qux')
112
options.setProfile(profileWithUserPrefs)
113
114
driver = env.builder().setFirefoxOptions(options).build()
115
116
await driver.get(Pages.echoPage)
117
await verifyUserAgent('baz;qux')
118
})
119
})
120
121
describe('addExtensions', function () {
122
it('can add extension to brand new profile', async function () {
123
let options = env.builder().getFirefoxOptions() || new firefox.Options()
124
options.addExtensions(EXT_XPI)
125
126
driver = env.builder().setFirefoxOptions(options).build()
127
128
await driver.get(Pages.echoPage)
129
await verifyWebExtensionWasInstalled()
130
})
131
132
it('can add extension to custom profile', async function () {
133
let options = env.builder().getFirefoxOptions() || new firefox.Options()
134
options.addExtensions(EXT_XPI).setProfile(profileWithUserPrefs)
135
136
driver = env.builder().setFirefoxOptions(options).build()
137
138
await driver.get(Pages.echoPage)
139
await verifyWebExtensionWasInstalled()
140
await verifyUserAgentWasChanged()
141
})
142
143
it('can addExtensions and setPreference', async function () {
144
let options = env.builder().getFirefoxOptions() || new firefox.Options()
145
options.addExtensions(EXT_XPI)
146
options.setPreference('general.useragent.override', 'foo;bar')
147
148
driver = env.builder().setFirefoxOptions(options).build()
149
150
await driver.get(Pages.echoPage)
151
await verifyWebExtensionWasInstalled()
152
await verifyUserAgentWasChanged()
153
})
154
155
it('can load .zip webextensions', async function () {
156
let options = env.builder().getFirefoxOptions() || new firefox.Options()
157
options.addExtensions(EXT_XPI)
158
159
driver = env.builder().setFirefoxOptions(options).build()
160
161
await driver.get(Pages.echoPage)
162
await verifyWebExtensionWasInstalled()
163
})
164
})
165
})
166
167
async function verifyUserAgentWasChanged() {
168
await verifyUserAgent('foo;bar')
169
}
170
171
async function verifyUserAgent(expected) {
172
let userAgent = await driver.executeScript('return window.navigator.userAgent')
173
assert.strictEqual(userAgent, expected)
174
}
175
176
async function verifyWebExtensionWasInstalled() {
177
let footer = await driver.wait(until.elementLocated(By.id('webextensions-selenium-example')), 5000)
178
179
let text = await footer.getText()
180
assert.strictEqual(text, 'Content injected by webextensions-selenium-example')
181
}
182
})
183
},
184
{ browsers: [Browser.FIREFOX] },
185
)
186
187