Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
235 lines
7.5 KiB
JavaScript
Executable file
235 lines
7.5 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
var FxAUser = require('./fxa_user'),
|
|
config = require('./config.json');
|
|
|
|
/**
|
|
* Abstraction around FxA app.
|
|
* 'Entrance point' app URL is passed in since FxA acts more like a
|
|
* component than a standalone app
|
|
* (launched by Settings, Marketplace, FTU, FMD, dev_apps, etc.)
|
|
*
|
|
* @param client
|
|
* @constructor
|
|
*/
|
|
function FxA(client) {
|
|
this.config = config;
|
|
this.fxaUser = new FxAUser();
|
|
this.client = client.scope({ searchTimeout: config.MARIONETTE_TIMEOUT});
|
|
}
|
|
|
|
FxA.SETTINGS_ORIGIN = 'app://settings.gaiamobile.org';
|
|
FxA.UITEST_ORIGIN = 'app://uitest.gaiamobile.org';
|
|
FxA.TEST_FXA_CLIENT_ORIGIN = 'app://test-fxa-client.gaiamobile.org';
|
|
FxA.FTU_ORIGIN = 'app://ftu.gaiamobile.org';
|
|
FxA.SERVER_PATH = 'http://' +
|
|
config.SERVER_HOST + ':' +
|
|
config.SERVER_PORT + '/' +
|
|
config.SERVER_PATH;
|
|
FxA.SERVER_ARGS = [
|
|
config.SERVER_HOST,
|
|
config.SERVER_PORT,
|
|
config.SERVER_PATH
|
|
];
|
|
|
|
FxA.COPPA_YEAR = new Date().getFullYear() - 13;
|
|
|
|
FxA.Selectors = {
|
|
body: 'body',
|
|
bodyReady: 'body .view-body',
|
|
// dev_apps/uitest
|
|
apiFxaFrame: '#test-iframe',
|
|
fxaFrame: '#fxa-iframe',
|
|
tabAPI: '#API',
|
|
fxaButton: '#mozId-fxa',
|
|
requestButton: '#request',
|
|
// dev_apps/test-fxa-client
|
|
tabOpenFlow: '#openFlow',
|
|
// apps/settings
|
|
menuItemFxa: '#menuItem-fxa',
|
|
menuItemFmd: '#menuItem-findmydevice',
|
|
fxaLogin: '#fxa-login',
|
|
fmdLogin: '#findmydevice-login',
|
|
fxaCancelAccountConfirmation: '#fxa-cancel-confirmation',
|
|
// apps/ftu
|
|
forward: '#forward',
|
|
createAccountOrLogin: '#fxa-create-account',
|
|
// apps/findmydevice
|
|
emailInput: '#fxa-email-input',
|
|
fxaForgotPassword: 'fxa-forgot-password',
|
|
pwInput: '#fxa-pw-input',
|
|
//COPPA (age-restriction menu no longer appears,
|
|
// but password input tag is still different)
|
|
pwInputPostCOPPA: '#fxa-pw-set-input',
|
|
pwSetInput: '#fxa-pw-set-input',
|
|
pwRefresh: '#fxa-pw-input-refresh',
|
|
COPPAElementId: '#fxa-coppa',
|
|
COPPASelectId: '#fxa-age-select',
|
|
COPPAOptionVal: FxA.COPPA_YEAR + ' or earlier',
|
|
COPPAOptionValToFail: FxA.COPPA_YEAR.toString(),
|
|
moduleNext: '#fxa-module-next',
|
|
moduleDone: '#fxa-module-done',
|
|
errorOK: '#fxa-error-ok'
|
|
};
|
|
|
|
FxA.prototype = {
|
|
/**
|
|
* Launches FxA app and focuses on frame.
|
|
*/
|
|
launch: function (origin) {
|
|
// do unless FTU
|
|
if (origin.search('ftu') === -1) {
|
|
this.client.apps.launch(origin);
|
|
}
|
|
this.client.apps.switchToApp(origin);
|
|
},
|
|
|
|
enterInput: function (inputId, inputString) {
|
|
this.client.helper
|
|
.waitForElement(inputId)
|
|
.sendKeys(inputString);
|
|
},
|
|
|
|
enterCOPPANew: function () {
|
|
var sel = FxA.Selectors.COPPASelectId;
|
|
var inputString = FxA.Selectors.COPPAOptionVal;
|
|
this.client.helper.tapSelectOption(sel, inputString);
|
|
},
|
|
|
|
enterEmailNew: function () {
|
|
var sel = FxA.Selectors.emailInput;
|
|
var inputString = this.fxaUser.email(config.USER_NEW);
|
|
this.client.helper.fillInputField(sel, inputString);
|
|
},
|
|
enterPasswordNew: function () {
|
|
var sel = FxA.Selectors.pwInputPostCOPPA;
|
|
var inputString = this.fxaUser.password(config.USER_NEW);
|
|
this.client.helper.fillInputField(sel, inputString);
|
|
},
|
|
enterEmailExisting: function () {
|
|
var sel = FxA.Selectors.emailInput;
|
|
var inputString = this.fxaUser.email(config.USER_EXISTING);
|
|
this.client.helper.fillInputField(sel, inputString);
|
|
},
|
|
enterPasswordExisting: function () {
|
|
var sel = FxA.Selectors.pwInput;
|
|
var inputString = this.fxaUser.password(config.USER_EXISTING);
|
|
this.client.helper.fillInputField(sel, inputString);
|
|
},
|
|
onClick: function(searchSelector) {
|
|
var element = this.client.findElement(searchSelector);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickNext: function() {
|
|
var element = this.client.findElement(FxA.Selectors.moduleNext);
|
|
var client = this.client;
|
|
|
|
client.waitFor(function () {
|
|
return client.findElement(FxA.Selectors.moduleNext)
|
|
.scriptWith(function (el) {
|
|
return el.getAttribute('disabled') !== 'disabled';
|
|
});
|
|
});
|
|
|
|
client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickDone: function() {
|
|
var element = this.client.findElement(FxA.Selectors.moduleDone);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickTabOpenFlow: function() {
|
|
var element = this.client.findElement(FxA.Selectors.tabOpenFlow);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickFxaLogin: function() {
|
|
var element = this.client.findElement(FxA.Selectors.fxaLogin);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickMenuItemFxa: function() {
|
|
var element = this.client.findElement(FxA.Selectors.menuItemFxa);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickRequestButton: function() {
|
|
var element = this.client.findElement(FxA.Selectors.requestButton);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickTabAPI: function() {
|
|
var element = this.client.findElement(FxA.Selectors.tabAPI);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
clickFxaButton: function() {
|
|
var element = this.client.findElement(FxA.Selectors.fxaButton);
|
|
this.client.helper
|
|
.waitForElement(element)
|
|
.tap();
|
|
},
|
|
switchFrame: function(frameId) {
|
|
this.client.switchToFrame();
|
|
var frame = this.client.findElement(frameId);
|
|
this.client.switchToFrame(frame);
|
|
},
|
|
switchFrameDirect: function(frameId) {
|
|
var frame = this.client.findElement(frameId);
|
|
this.client.switchToFrame(frame);
|
|
},
|
|
clickThruPanel: function(panelId, buttonId) {
|
|
if (panelId === '#wifi') {
|
|
// The wifi panel will bring up a screen to show it is scanning for
|
|
// networks. Not waiting for this to clear will blow test timing
|
|
// and cause things to fail.
|
|
this.client.helper.waitForElementToDisappear('#loading-overlay');
|
|
}
|
|
// waitForElement is used to make sure animations and page changes have
|
|
// finished, and that the panel is displayed.
|
|
this.client.helper.waitForElement(panelId);
|
|
|
|
if (buttonId) {
|
|
var button = this.client.helper.waitForElement(buttonId);
|
|
button.click();
|
|
}
|
|
},
|
|
runSettingsMenu: function() {
|
|
this.clickMenuItemFxa();
|
|
this.clickFxaLogin();
|
|
this.switchFrame(FxA.Selectors.fxaFrame);
|
|
},
|
|
runUITestMenu: function() {
|
|
this.clickTabAPI();
|
|
this.clickFxaButton();
|
|
this.switchFrameDirect(FxA.Selectors.apiFxaFrame);
|
|
this.clickRequestButton();
|
|
this.switchFrame(FxA.Selectors.fxaFrame);
|
|
},
|
|
runFTUMenu: function() {
|
|
this.clickThruPanel('#languages', '#forward');
|
|
this.clickThruPanel('#wifi', '#forward');
|
|
this.clickThruPanel('#date_and_time', '#forward');
|
|
this.clickThruPanel('#geolocation', '#forward');
|
|
this.clickThruPanel('#import_contacts', '#forward');
|
|
this.clickThruPanel('#firefox_accounts',
|
|
FxA.Selectors.createAccountOrLogin);
|
|
this.switchFrame(FxA.Selectors.fxaFrame);
|
|
},
|
|
runFxAClientTestMenu: function() {
|
|
this.clickTabOpenFlow();
|
|
this.switchFrame(FxA.Selectors.fxaFrame);
|
|
}
|
|
};
|
|
|
|
module.exports = FxA;
|