Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
89 lines
2.3 KiB
JavaScript
Executable file
89 lines
2.3 KiB
JavaScript
Executable file
'use strict';
|
|
/**
|
|
* Base app object to provide common methods to app objects
|
|
* @constructor
|
|
* @param {Marionette.Client} client for operations.
|
|
*/
|
|
function Base(client, origin, selectors) {
|
|
this.client = client.scope({ searchTimeout: 20000 });
|
|
this.origin = origin;
|
|
this.selectors = selectors;
|
|
}
|
|
|
|
module.exports = Base;
|
|
|
|
Base.prototype = {
|
|
|
|
/**
|
|
* Launches settings app, switches to frame, and waits for it to be loaded.
|
|
*/
|
|
launch: function() {
|
|
this.client.apps.launch(this.origin);
|
|
this.client.apps.switchToApp(this.origin);
|
|
this.client.helper.waitForElement('body[data-ready="true"]');
|
|
},
|
|
|
|
/**
|
|
* Switches back to the current app frame.
|
|
* Useful when switching to system frame during test and needs to switch back.
|
|
*/
|
|
switchTo: function() {
|
|
this.client.switchToFrame();
|
|
this.client.apps.switchToApp(this.origin);
|
|
},
|
|
|
|
/**
|
|
* Close settings app.
|
|
*/
|
|
close: function() {
|
|
this.client.apps.close(this.origin);
|
|
},
|
|
|
|
/**
|
|
* @protected
|
|
* @param {String} name of selector [its a key in Settings.Selectors].
|
|
*/
|
|
findElement: function(name) {
|
|
return this.client.findElement(this.selectors[name]);
|
|
},
|
|
|
|
/**
|
|
* @protected
|
|
* @param {String} name of selector [its a key in Settings.Selectors].
|
|
*/
|
|
findElements: function(name) {
|
|
return this.client.findElements(this.selectors[name]);
|
|
},
|
|
|
|
/**
|
|
* @protected
|
|
* @param {String} name of selector [its a key in Settings.Selectors].
|
|
*/
|
|
waitForElement: function(name) {
|
|
var element = this.client.helper.waitForElement(this.selectors[name]);
|
|
this.client.waitFor(function() {
|
|
return element.scriptWith(function(el) {
|
|
var style = window.getComputedStyle(el);
|
|
return style.visibility === 'visible';
|
|
});
|
|
}.bind(this));
|
|
return element;
|
|
},
|
|
|
|
/**
|
|
* Use to select an options as currently we are not able to tap on a select
|
|
* element. Please refer to bug 977522 for details.
|
|
*
|
|
* @protected
|
|
* @param {String} name of selector [its a key in Settings.Selectors].
|
|
* @param {String} text content of an option
|
|
*/
|
|
tapSelectOption: function(name, optionText) {
|
|
this.client.helper.tapSelectOption(this.selectors[name], optionText);
|
|
},
|
|
|
|
tapConfirmButton: function() {
|
|
this.client.helper.waitForElement(
|
|
'#settings-confirm-dialog button[type="submit"]').tap();
|
|
}
|
|
};
|