aboutsummaryrefslogtreecommitdiff
path: root/node_modules/selenium-webdriver/test/firefox
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/selenium-webdriver/test/firefox')
-rw-r--r--node_modules/selenium-webdriver/test/firefox/extension_test.js96
-rw-r--r--node_modules/selenium-webdriver/test/firefox/firefox_test.js188
-rw-r--r--node_modules/selenium-webdriver/test/firefox/profile_test.js186
3 files changed, 470 insertions, 0 deletions
diff --git a/node_modules/selenium-webdriver/test/firefox/extension_test.js b/node_modules/selenium-webdriver/test/firefox/extension_test.js
new file mode 100644
index 000000000..50936f7cd
--- /dev/null
+++ b/node_modules/selenium-webdriver/test/firefox/extension_test.js
@@ -0,0 +1,96 @@
+// 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.
+
+'use strict';
+
+var AdmZip = require('adm-zip'),
+ assert = require('assert'),
+ crypto = require('crypto'),
+ fs = require('fs'),
+ path = require('path');
+
+var extension = require('../../firefox/extension'),
+ io = require('../../io'),
+ it = require('../../testing').it;
+
+
+var JETPACK_EXTENSION = path.join(__dirname,
+ '../../lib/test/data/firefox/jetpack-sample.xpi');
+var NORMAL_EXTENSION = path.join(__dirname,
+ '../../lib/test/data/firefox/sample.xpi');
+
+var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack';
+var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org';
+
+
+describe('extension', function() {
+ it('can install a jetpack xpi file', function() {
+ return io.tmpDir().then(function(dir) {
+ return extension.install(JETPACK_EXTENSION, dir).then(function(id) {
+ assert.equal(JETPACK_EXTENSION_ID, id);
+ var file = path.join(dir, id + '.xpi');
+ assert.ok(fs.existsSync(file), 'no such file: ' + file);
+ assert.ok(!fs.statSync(file).isDirectory());
+
+ var copiedSha1 = crypto.createHash('sha1')
+ .update(fs.readFileSync(file))
+ .digest('hex');
+
+ var goldenSha1 = crypto.createHash('sha1')
+ .update(fs.readFileSync(JETPACK_EXTENSION))
+ .digest('hex');
+
+ assert.equal(copiedSha1, goldenSha1);
+ });
+ });
+ });
+
+ it('can install a normal xpi file', function() {
+ return io.tmpDir().then(function(dir) {
+ return extension.install(NORMAL_EXTENSION, dir).then(function(id) {
+ assert.equal(NORMAL_EXTENSION_ID, id);
+
+ var file = path.join(dir, NORMAL_EXTENSION_ID);
+ assert.ok(fs.statSync(file).isDirectory());
+
+ assert.ok(fs.existsSync(path.join(file, 'chrome.manifest')));
+ assert.ok(fs.existsSync(path.join(file, 'content/overlay.xul')));
+ assert.ok(fs.existsSync(path.join(file, 'content/overlay.js')));
+ assert.ok(fs.existsSync(path.join(file, 'install.rdf')));
+ });
+ });
+ });
+
+ it('can install an extension from a directory', function() {
+ return io.tmpDir().then(function(srcDir) {
+ var buf = fs.readFileSync(NORMAL_EXTENSION);
+ new AdmZip(buf).extractAllTo(srcDir, true);
+ return io.tmpDir().then(function(dstDir) {
+ return extension.install(srcDir, dstDir).then(function(id) {
+ assert.equal(NORMAL_EXTENSION_ID, id);
+
+ var dir = path.join(dstDir, NORMAL_EXTENSION_ID);
+
+ assert.ok(fs.existsSync(path.join(dir, 'chrome.manifest')));
+ assert.ok(fs.existsSync(path.join(dir, 'content/overlay.xul')));
+ assert.ok(fs.existsSync(path.join(dir, 'content/overlay.js')));
+ assert.ok(fs.existsSync(path.join(dir, 'install.rdf')));
+ });
+ });
+ });
+ });
+});
diff --git a/node_modules/selenium-webdriver/test/firefox/firefox_test.js b/node_modules/selenium-webdriver/test/firefox/firefox_test.js
new file mode 100644
index 000000000..6f3f4b3d9
--- /dev/null
+++ b/node_modules/selenium-webdriver/test/firefox/firefox_test.js
@@ -0,0 +1,188 @@
+// 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.
+
+'use strict';
+
+var path = require('path');
+
+var firefox = require('../../firefox'),
+ io = require('../../io'),
+ test = require('../../lib/test'),
+ assert = require('../../testing/assert'),
+ Context = require('../../firefox').Context,
+ error = require('../..').error;
+
+
+var JETPACK_EXTENSION = path.join(__dirname,
+ '../../lib/test/data/firefox/jetpack-sample.xpi');
+var NORMAL_EXTENSION = path.join(__dirname,
+ '../../lib/test/data/firefox/sample.xpi');
+
+
+test.suite(function(env) {
+ describe('firefox', function() {
+ describe('Options', function() {
+ var driver;
+
+ test.beforeEach(function() {
+ driver = null;
+ });
+
+ test.afterEach(function() {
+ if (driver) {
+ driver.quit();
+ }
+ });
+
+ test.it('can start Firefox with custom preferences', function() {
+ var profile = new firefox.Profile();
+ profile.setPreference('general.useragent.override', 'foo;bar');
+
+ var options = new firefox.Options().setProfile(profile);
+
+ driver = env.builder().
+ setFirefoxOptions(options).
+ build();
+
+ driver.get('data:text/html,<html><div>content</div></html>');
+
+ var userAgent = driver.executeScript(
+ 'return window.navigator.userAgent');
+ assert(userAgent).equalTo('foo;bar');
+ });
+
+ test.it('can start Firefox with a jetpack extension', function() {
+ var profile = new firefox.Profile();
+ profile.addExtension(JETPACK_EXTENSION);
+
+ var options = new firefox.Options().setProfile(profile);
+
+ driver = env.builder().
+ setFirefoxOptions(options).
+ build();
+
+ loadJetpackPage(driver,
+ 'data:text/html;charset=UTF-8,<html><div>content</div></html>');
+ assert(driver.findElement({id: 'jetpack-sample-banner'}).getText())
+ .equalTo('Hello, world!');
+ });
+
+ test.it('can start Firefox with a normal extension', function() {
+ var profile = new firefox.Profile();
+ profile.addExtension(NORMAL_EXTENSION);
+
+ var options = new firefox.Options().setProfile(profile);
+
+ driver = env.builder().
+ setFirefoxOptions(options).
+ build();
+
+ driver.get('data:text/html,<html><div>content</div></html>');
+ assert(driver.findElement({id: 'sample-extension-footer'}).getText())
+ .equalTo('Goodbye');
+ });
+
+ test.it('can start Firefox with multiple extensions', function() {
+ var profile = new firefox.Profile();
+ profile.addExtension(JETPACK_EXTENSION);
+ profile.addExtension(NORMAL_EXTENSION);
+
+ var options = new firefox.Options().setProfile(profile);
+
+ driver = env.builder().
+ setFirefoxOptions(options).
+ build();
+
+ loadJetpackPage(driver,
+ 'data:text/html;charset=UTF-8,<html><div>content</div></html>');
+ assert(driver.findElement({id: 'jetpack-sample-banner'}).getText())
+ .equalTo('Hello, world!');
+ assert(driver.findElement({id: 'sample-extension-footer'}).getText())
+ .equalTo('Goodbye');
+ });
+
+ function loadJetpackPage(driver, url) {
+ // On linux the jetpack extension does not always run the first time
+ // we load a page. If this happens, just reload the page (a simple
+ // refresh doesn't appear to work).
+ driver.wait(function() {
+ driver.get(url);
+ return driver.findElements({id: 'jetpack-sample-banner'})
+ .then(found => found.length > 0);
+ }, 3000);
+ }
+ });
+
+ describe('binary management', function() {
+ var driver1, driver2;
+
+ test.ignore(env.isRemote).
+ it('can start multiple sessions with single binary instance', function() {
+ var options = new firefox.Options().setBinary(new firefox.Binary);
+ env.builder().setFirefoxOptions(options);
+ driver1 = env.builder().build();
+ driver2 = env.builder().build();
+ // Ok if this doesn't fail.
+ });
+
+ test.afterEach(function() {
+ if (driver1) {
+ driver1.quit();
+ }
+
+ if (driver2) {
+ driver2.quit();
+ }
+ });
+ });
+
+ describe('context switching', function() {
+ var driver;
+
+ test.beforeEach(function() {
+ driver = env.builder().build();
+ });
+
+ test.afterEach(function() {
+ if (driver) {
+ driver.quit();
+ }
+ });
+
+ test.ignore(() => !env.isMarionette).
+ it('can get context', function() {
+ assert(driver.getContext()).equalTo(Context.CONTENT);
+ });
+
+ test.ignore(() => !env.isMarionette).
+ it('can set context', function() {
+ driver.setContext(Context.CHROME);
+ assert(driver.getContext()).equalTo(Context.CHROME);
+ driver.setContext(Context.CONTENT);
+ assert(driver.getContext()).equalTo(Context.CONTENT);
+ });
+
+ test.ignore(() => !env.isMarionette).
+ it('throws on unknown context', function() {
+ driver.setContext("foo").then(assert.fail, function(e) {
+ assert(e).instanceOf(error.InvalidArgumentError);
+ });
+ });
+ });
+
+ });
+}, {browsers: ['firefox']});
diff --git a/node_modules/selenium-webdriver/test/firefox/profile_test.js b/node_modules/selenium-webdriver/test/firefox/profile_test.js
new file mode 100644
index 000000000..807c07b72
--- /dev/null
+++ b/node_modules/selenium-webdriver/test/firefox/profile_test.js
@@ -0,0 +1,186 @@
+// 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.
+
+'use strict';
+
+var AdmZip = require('adm-zip'),
+ assert = require('assert'),
+ fs = require('fs'),
+ path = require('path');
+
+var promise = require('../..').promise,
+ Profile = require('../../firefox/profile').Profile,
+ decode = require('../../firefox/profile').decode,
+ loadUserPrefs = require('../../firefox/profile').loadUserPrefs,
+ io = require('../../io');
+
+
+var JETPACK_EXTENSION = path.join(__dirname,
+ '../../lib/test/data/firefox/jetpack-sample.xpi');
+var NORMAL_EXTENSION = path.join(__dirname,
+ '../../lib/test/data/firefox/sample.xpi');
+
+var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack.xpi';
+var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org';
+var WEBDRIVER_EXTENSION_ID = 'fxdriver@googlecode.com';
+
+
+
+describe('Profile', function() {
+ describe('setPreference', function() {
+ it('allows setting custom properties', function() {
+ var profile = new Profile();
+ assert.equal(undefined, profile.getPreference('foo'));
+
+ profile.setPreference('foo', 'bar');
+ assert.equal('bar', profile.getPreference('foo'));
+ });
+
+ it('allows overriding mutable properties', function() {
+ var profile = new Profile();
+ assert.equal('about:blank', profile.getPreference('browser.newtab.url'));
+
+ profile.setPreference('browser.newtab.url', 'http://www.example.com');
+ assert.equal('http://www.example.com',
+ profile.getPreference('browser.newtab.url'));
+ });
+
+ it('throws if setting a frozen preference', function() {
+ var profile = new Profile();
+ assert.throws(function() {
+ profile.setPreference('app.update.auto', true);
+ });
+ });
+ });
+
+ describe('writeToDisk', function() {
+ it('copies template directory recursively', function() {
+ var templateDir;
+ return io.tmpDir().then(function(td) {
+ templateDir = td;
+ var foo = path.join(templateDir, 'foo');
+ fs.writeFileSync(foo, 'Hello, world');
+
+ var bar = path.join(templateDir, 'subfolder/bar');
+ fs.mkdirSync(path.dirname(bar));
+ fs.writeFileSync(bar, 'Goodbye, world!');
+
+ return new Profile(templateDir).writeToDisk();
+ }).then(function(profileDir) {
+ assert.notEqual(profileDir, templateDir);
+
+ assert.equal('Hello, world',
+ fs.readFileSync(path.join(profileDir, 'foo')));
+ assert.equal('Goodbye, world!',
+ fs.readFileSync(path.join(profileDir, 'subfolder/bar')));
+ });
+ });
+
+ it('does not copy lock files', function() {
+ return io.tmpDir().then(function(dir) {
+ fs.writeFileSync(path.join(dir, 'parent.lock'), 'lock');
+ fs.writeFileSync(path.join(dir, 'lock'), 'lock');
+ fs.writeFileSync(path.join(dir, '.parentlock'), 'lock');
+ return new Profile(dir).writeToDisk();
+ }).then(function(dir) {
+ assert.ok(fs.existsSync(dir));
+ assert.ok(!fs.existsSync(path.join(dir, 'parent.lock')));
+ assert.ok(!fs.existsSync(path.join(dir, 'lock')));
+ assert.ok(!fs.existsSync(path.join(dir, '.parentlock')));
+ });
+ });
+
+ describe('user.js', function() {
+
+ it('writes defaults', function() {
+ return new Profile().writeToDisk().then(function(dir) {
+ return loadUserPrefs(path.join(dir, 'user.js'));
+ }).then(function(prefs) {
+ // Just check a few.
+ assert.equal(false, prefs['app.update.auto']);
+ assert.equal(true, prefs['browser.EULA.override']);
+ assert.equal(false, prefs['extensions.update.enabled']);
+ assert.equal('about:blank', prefs['browser.newtab.url']);
+ assert.equal(30, prefs['dom.max_script_run_time']);
+ });
+ });
+
+ it('merges template user.js into preferences', function() {
+ return io.tmpDir().then(function(dir) {
+ fs.writeFileSync(path.join(dir, 'user.js'), [
+ 'user_pref("browser.newtab.url", "http://www.example.com")',
+ 'user_pref("dom.max_script_run_time", 1234)'
+ ].join('\n'));
+
+ return new Profile(dir).writeToDisk();
+ }).then(function(profile) {
+ return loadUserPrefs(path.join(profile, 'user.js'));
+ }).then(function(prefs) {
+ assert.equal('http://www.example.com', prefs['browser.newtab.url']);
+ assert.equal(1234, prefs['dom.max_script_run_time']);
+ });
+ });
+
+ it('ignores frozen preferences when merging template user.js',
+ function() {
+ return io.tmpDir().then(function(dir) {
+ fs.writeFileSync(path.join(dir, 'user.js'),
+ 'user_pref("app.update.auto", true)');
+ return new Profile(dir).writeToDisk();
+ }).then(function(profile) {
+ return loadUserPrefs(path.join(profile, 'user.js'));
+ }).then(function(prefs) {
+ assert.equal(false, prefs['app.update.auto']);
+ });
+ });
+ });
+
+ describe('extensions', function() {
+ it('are copied into new profile directory', function() {
+ var profile = new Profile();
+ profile.addExtension(JETPACK_EXTENSION);
+ profile.addExtension(NORMAL_EXTENSION);
+
+ return profile.writeToDisk().then(function(dir) {
+ dir = path.join(dir, 'extensions');
+ assert.ok(fs.existsSync(path.join(dir, JETPACK_EXTENSION_ID)));
+ assert.ok(fs.existsSync(path.join(dir, NORMAL_EXTENSION_ID)));
+ assert.ok(fs.existsSync(path.join(dir, WEBDRIVER_EXTENSION_ID)));
+ });
+ });
+ });
+ });
+
+ describe('encode', function() {
+ it('excludes the bundled WebDriver extension', function() {
+ return new Profile().encode().then(function(data) {
+ return decode(data);
+ }).then(function(dir) {
+ assert.ok(fs.existsSync(path.join(dir, 'user.js')));
+ assert.ok(fs.existsSync(path.join(dir, 'extensions')));
+ return loadUserPrefs(path.join(dir, 'user.js'));
+ }).then(function(prefs) {
+ // Just check a few.
+ assert.equal(false, prefs['app.update.auto']);
+ assert.equal(true, prefs['browser.EULA.override']);
+ assert.equal(false, prefs['extensions.update.enabled']);
+ assert.equal('about:blank', prefs['browser.newtab.url']);
+ assert.equal(30, prefs['dom.max_script_run_time']);
+ });
+ });
+ });
+});