summaryrefslogtreecommitdiff
path: root/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/update_wizard/wizard.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/update_wizard/wizard.py')
-rw-r--r--testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/update_wizard/wizard.py291
1 files changed, 291 insertions, 0 deletions
diff --git a/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/update_wizard/wizard.py b/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/update_wizard/wizard.py
new file mode 100644
index 0000000000..9687ac9178
--- /dev/null
+++ b/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/update_wizard/wizard.py
@@ -0,0 +1,291 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from marionette_driver import By, Wait
+
+from firefox_puppeteer.ui.base import UIBaseLib
+from firefox_puppeteer.ui.deck import Panel
+
+
+class Wizard(UIBaseLib):
+
+ def __init__(self, *args, **kwargs):
+ super(Wizard, self).__init__(*args, **kwargs)
+
+ Wait(self.marionette).until(
+ lambda _: self.selected_panel,
+ message='No panel has been selected by default.')
+
+ def _create_panel_for_id(self, panel_id):
+ """Creates an instance of :class:`Panel` for the specified panel id.
+
+ :param panel_id: The ID of the panel to create an instance of.
+
+ :returns: :class:`Panel` instance
+ """
+ mapping = {'checking': CheckingPanel,
+ 'downloading': DownloadingPanel,
+ 'dummy': DummyPanel,
+ 'errorpatching': ErrorPatchingPanel,
+ 'errors': ErrorPanel,
+ 'errorextra': ErrorExtraPanel,
+ 'finished': FinishedPanel,
+ 'finishedBackground': FinishedBackgroundPanel,
+ 'manualUpdate': ManualUpdatePanel,
+ 'noupdatesfound': NoUpdatesFoundPanel,
+ 'updatesfoundbasic': UpdatesFoundBasicPanel,
+
+ # TODO: Remove once we no longer support version Firefox 45.0ESR
+ 'incompatibleCheck': IncompatibleCheckPanel,
+ 'incompatibleList': IncompatibleListPanel,
+ }
+
+ panel = self.element.find_element(By.ID, panel_id)
+ return mapping.get(panel_id, Panel)(self.marionette, self.window, panel)
+
+ # Properties for visual buttons of the wizard #
+
+ @property
+ def _buttons(self):
+ return self.element.find_element(By.ANON_ATTRIBUTE, {'anonid': 'Buttons'})
+
+ @property
+ def cancel_button(self):
+ return self._buttons.find_element(By.ANON_ATTRIBUTE, {'dlgtype': 'cancel'})
+
+ @property
+ def extra1_button(self):
+ return self._buttons.find_element(By.ANON_ATTRIBUTE, {'dlgtype': 'extra1'})
+
+ @property
+ def extra2_button(self):
+ return self._buttons.find_element(By.ANON_ATTRIBUTE, {'dlgtype': 'extra2'})
+
+ @property
+ def previous_button(self):
+ return self._buttons.find_element(By.ANON_ATTRIBUTE, {'dlgtype': 'back'})
+
+ @property
+ def finish_button(self):
+ return self._buttons.find_element(By.ANON_ATTRIBUTE, {'dlgtype': 'finish'})
+
+ @property
+ def next_button(self):
+ return self._buttons.find_element(By.ANON_ATTRIBUTE, {'dlgtype': 'next'})
+
+ # Properties for visual panels of the wizard #
+
+ @property
+ def checking(self):
+ """The checking for updates panel.
+
+ :returns: :class:`CheckingPanel` instance.
+ """
+ return self._create_panel_for_id('checking')
+
+ @property
+ def downloading(self):
+ """The downloading panel.
+
+ :returns: :class:`DownloadingPanel` instance.
+ """
+ return self._create_panel_for_id('downloading')
+
+ @property
+ def dummy(self):
+ """The dummy panel.
+
+ :returns: :class:`DummyPanel` instance.
+ """
+ return self._create_panel_for_id('dummy')
+
+ @property
+ def error_patching(self):
+ """The error patching panel.
+
+ :returns: :class:`ErrorPatchingPanel` instance.
+ """
+ return self._create_panel_for_id('errorpatching')
+
+ @property
+ def error(self):
+ """The errors panel.
+
+ :returns: :class:`ErrorPanel` instance.
+ """
+ return self._create_panel_for_id('errors')
+
+ @property
+ def error_extra(self):
+ """The error extra panel.
+
+ :returns: :class:`ErrorExtraPanel` instance.
+ """
+ return self._create_panel_for_id('errorextra')
+
+ @property
+ def finished(self):
+ """The finished panel.
+
+ :returns: :class:`FinishedPanel` instance.
+ """
+ return self._create_panel_for_id('finished')
+
+ @property
+ def finished_background(self):
+ """The finished background panel.
+
+ :returns: :class:`FinishedBackgroundPanel` instance.
+ """
+ return self._create_panel_for_id('finishedBackground')
+
+ @property
+ def incompatible_check(self):
+ """The incompatible check panel.
+
+ :returns: :class:`IncompatibleCheckPanel` instance.
+ """
+ return self._create_panel_for_id('incompatibleCheck')
+
+ @property
+ def incompatible_list(self):
+ """The incompatible list panel.
+
+ :returns: :class:`IncompatibleListPanel` instance.
+ """
+ return self._create_panel_for_id('incompatibleList')
+
+ @property
+ def manual_update(self):
+ """The manual update panel.
+
+ :returns: :class:`ManualUpdatePanel` instance.
+ """
+ return self._create_panel_for_id('manualUpdate')
+
+ @property
+ def no_updates_found(self):
+ """The no updates found panel.
+
+ :returns: :class:`NoUpdatesFoundPanel` instance.
+ """
+ return self._create_panel_for_id('noupdatesfound')
+
+ @property
+ def updates_found_basic(self):
+ """The updates found panel.
+
+ :returns: :class:`UpdatesFoundPanel` instance.
+ """
+ return self._create_panel_for_id('updatesfoundbasic')
+
+ @property
+ def panels(self):
+ """List of all the available :class:`Panel` instances.
+
+ :returns: List of :class:`Panel` instances.
+ """
+ panels = self.marionette.execute_script("""
+ let wizard = arguments[0];
+ let panels = [];
+
+ for (let index = 0; index < wizard.children.length; index++) {
+ if (wizard.children[index].id) {
+ panels.push(wizard.children[index].id);
+ }
+ }
+
+ return panels;
+ """, script_args=[self.element])
+
+ return [self._create_panel_for_id(panel) for panel in panels]
+
+ @property
+ def selected_index(self):
+ """The index of the currently selected panel.
+
+ :return: Index of the selected panel.
+ """
+ return int(self.element.get_property('pageIndex'))
+
+ @property
+ def selected_panel(self):
+ """A :class:`Panel` instance of the currently selected panel.
+
+ :returns: :class:`Panel` instance.
+ """
+ return self._create_panel_for_id(self.element.get_attribute('currentpageid'))
+
+
+class CheckingPanel(Panel):
+
+ @property
+ def progress(self):
+ """The DOM element which represents the progress meter.
+
+ :returns: Reference to the progress element.
+ """
+ return self.element.find_element(By.ID, 'checkingProgress')
+
+
+class DownloadingPanel(Panel):
+
+ @property
+ def progress(self):
+ """The DOM element which represents the progress meter.
+
+ :returns: Reference to the progress element.
+ """
+ return self.element.find_element(By.ID, 'downloadProgress')
+
+
+class DummyPanel(Panel):
+ pass
+
+
+class ErrorPatchingPanel(Panel):
+ pass
+
+
+class ErrorPanel(Panel):
+ pass
+
+
+class ErrorExtraPanel(Panel):
+ pass
+
+
+class FinishedPanel(Panel):
+ pass
+
+
+class FinishedBackgroundPanel(Panel):
+ pass
+
+
+class IncompatibleCheckPanel(Panel):
+
+ @property
+ def progress(self):
+ """The DOM element which represents the progress meter.
+
+ :returns: Reference to the progress element.
+ """
+ return self.element.find_element(By.ID, 'incompatibleCheckProgress')
+
+
+class IncompatibleListPanel(Panel):
+ pass
+
+
+class ManualUpdatePanel(Panel):
+ pass
+
+
+class NoUpdatesFoundPanel(Panel):
+ pass
+
+
+class UpdatesFoundBasicPanel(Panel):
+ pass