Kargi-Sitesi/node_modules/selenium-webdriver/test/firefox/firefox_test.js

244 lines
8 KiB
JavaScript

// 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 {consume} = require('../../lib/promise');
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 WEBEXTENSION_EXTENSION = path.join(__dirname,
'../../lib/test/data/firefox/webextension.xpi');
test.suite(function(env) {
describe('firefox', function() {
describe('Options', function() {
let driver;
beforeEach(function() {
driver = null;
});
afterEach(function() {
if (driver) {
return driver.quit();
}
});
/**
* @param {...string} extensions the extensions to install.
* @return {!firefox.Profile} a new profile.
*/
function profileWithExtensions(...extensions) {
let profile = new firefox.Profile();
profile.setPreference('xpinstall.signatures.required', false);
extensions.forEach(ext => profile.addExtension(ext));
return profile;
}
/**
* Runs a test that requires Firefox Developer Edition. The test will be
* skipped if dev cannot be found on the current system.
*/
function runWithFirefoxDev(options, testFn) {
return firefox.Channel.AURORA.locate().then(exe => {
options.setBinary(exe);
driver = env.builder()
.setFirefoxOptions(options)
.build();
return driver.call(testFn);
}, err => {
console.warn(
'Skipping test: could not find Firefox Dev Edition: ' + err);
});
}
describe('can start Firefox with custom preferences', function() {
function runTest(opt_dir) {
return consume(function*() {
let profile = new firefox.Profile(opt_dir);
profile.setPreference('general.useragent.override', 'foo;bar');
let options = new firefox.Options().setProfile(profile);
driver = env.builder().
setFirefoxOptions(options).
build();
yield driver.get('data:text/html,<html><div>content</div></html>');
var userAgent = yield driver.executeScript(
'return window.navigator.userAgent');
assert(userAgent).equalTo('foo;bar');
});
}
test.it('profile created from scratch', function() {
return runTest();
});
test.it('profile created from template', function() {
return io.tmpDir().then(runTest);
});
});
test.it('can start Firefox with a jetpack extension', function() {
let profile = profileWithExtensions(JETPACK_EXTENSION);
let options = new firefox.Options().setProfile(profile);
return runWithFirefoxDev(options, function*() {
yield loadJetpackPage(driver,
'data:text/html;charset=UTF-8,<html><div>content</div></html>');
let text =
yield driver.findElement({id: 'jetpack-sample-banner'}).getText();
assert(text).equalTo('Hello, world!');
});
});
test.it('can start Firefox with a normal extension', function() {
let profile = profileWithExtensions(NORMAL_EXTENSION);
let options = new firefox.Options().setProfile(profile);
return runWithFirefoxDev(options, function*() {
yield driver.get('data:text/html,<html><div>content</div></html>');
let footer =
yield driver.findElement({id: 'sample-extension-footer'});
let text = yield footer.getText();
assert(text).equalTo('Goodbye');
});
});
test.it('can start Firefox with a webextension extension', function() {
let profile = profileWithExtensions(WEBEXTENSION_EXTENSION);
let options = new firefox.Options().setProfile(profile);
return runWithFirefoxDev(options, function*() {
yield driver.get(test.Pages.echoPage);
let footer =
yield driver.findElement({id: 'webextensions-selenium-example'});
let text = yield footer.getText();
assert(text).equalTo('Content injected by webextensions-selenium-example');
});
});
test.it('can start Firefox with multiple extensions', function() {
let profile =
profileWithExtensions(JETPACK_EXTENSION, NORMAL_EXTENSION);
let options = new firefox.Options().setProfile(profile);
return runWithFirefoxDev(options, function*() {
yield loadJetpackPage(driver,
'data:text/html;charset=UTF-8,<html><div>content</div></html>');
let banner =
yield driver.findElement({id: 'jetpack-sample-banner'}).getText();
assert(banner).equalTo('Hello, world!');
let footer =
yield driver.findElement({id: 'sample-extension-footer'})
.getText();
assert(footer).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).
return 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 = yield env.builder().build();
driver2 = yield env.builder().build();
// Ok if this doesn't fail.
});
test.afterEach(function*() {
if (driver1) {
yield driver1.quit();
}
if (driver2) {
yield driver2.quit();
}
});
});
describe('context switching', function() {
var driver;
test.beforeEach(function*() {
driver = yield env.builder().build();
});
test.afterEach(function() {
if (driver) {
return driver.quit();
}
});
test.it('can get context', function() {
return assert(driver.getContext()).equalTo(Context.CONTENT);
});
test.it('can set context', function*() {
yield driver.setContext(Context.CHROME);
let ctxt = yield driver.getContext();
assert(ctxt).equalTo(Context.CHROME);
yield driver.setContext(Context.CONTENT);
ctxt = yield driver.getContext();
assert(ctxt).equalTo(Context.CONTENT);
});
test.it('throws on unknown context', function() {
return driver.setContext("foo").then(assert.fail, function(e) {
assert(e).instanceOf(error.InvalidArgumentError);
});
});
});
});
}, {browsers: ['firefox']});