Source code for gaiatest.apps.settings.regions.device_info

# 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 expected, By, Wait
from gaiatest.apps.base import Base, PageRegion


[docs]class DeviceInfo(Base): _page_locator = (By.ID, 'about') _phone_number_locator = (By.CSS_SELECTOR, '.deviceInfo-msisdns') _model_locator = (By.CSS_SELECTOR, '#about small[data-name="deviceinfo.product_model"]') _software_locator = (By.CSS_SELECTOR, '#about small[data-name="deviceinfo.software"]') _your_rights_locator = (By.CSS_SELECTOR, '[data-l10n-id="your-rights"]') _rights_page_locator = (By.ID, 'about-yourRights') _your_privacy_locator = (By.CSS_SELECTOR, '[data-l10n-id="your-privacy"]') _privacy_page_locator = (By.ID, 'about-yourPrivacy') _legal_page_locator = (By.ID, 'about-legal') _legal_info_locator = (By.CSS_SELECTOR, '[data-l10n-id="about-legal-info"]') _open_source_notices_locator = (By.CSS_SELECTOR, '[data-l10n-id="open-source-notices"]') _notice_page_locator = (By.ID, 'about-licensing') _notice_text_locator = (By.ID, 'os-license') _source_text_locator = (By.ID, 'obtain-sc') _obtaining_source_code_locator = (By.CSS_SELECTOR, '[data-l10n-id="obtaining-source-code"]') _source_code_page_locator = (By.ID, 'about-source-code') _more_info_button_locator = (By.CSS_SELECTOR, 'a[href="#about-moreInfo"]') _more_info_page_locator = (By.ID, 'about-moreInfo') _reset_button_locator = (By.CLASS_NAME, 'reset-phone') _reset_confirm_locator = (By.CLASS_NAME, 'confirm-reset-phone') _reset_cancel_locator = (By.CLASS_NAME, 'cancel-reset-phone') _update_frequency_locator = (By.NAME, 'app.update.interval') _update_ok_button_locator = (By.CLASS_NAME, 'value-option-confirm') def __init__(self, marionette): Base.__init__(self, marionette) Wait(self.marionette).until( expected.element_displayed(*self._model_locator)) @property def screen_element(self): return self.marionette.find_element(*self._page_locator) @property def moreinfo_screen_element(self): return self.marionette.find_element(*self._more_info_page_locator) @property def rights_screen_element(self): return self.marionette.find_element(*self._rights_page_locator) @property def notice_screen_element(self): return self.marionette.find_element(*self._notice_page_locator) @property def source_screen_element(self): return self.marionette.find_element(*self._source_code_page_locator) @property def privacy_screen_element(self): return self.marionette.find_element(*self._privacy_page_locator) @property def legal_screen_element(self): return self.marionette.find_element(*self._legal_page_locator) @property def phone_number(self): return self.marionette.find_element(*self._phone_number_locator).text @property def model(self): return self.marionette.find_element(*self._model_locator).text @property def software(self): return self.marionette.find_element(*self._software_locator).text
[docs] def tap_your_rights(self): element = self.marionette.find_element(*self._your_rights_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() Wait(self.marionette).until(expected.element_displayed(*self._rights_page_locator))
[docs] def tap_your_privacy(self): element = self.marionette.find_element(*self._your_privacy_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() Wait(self.marionette).until(expected.element_displayed(*self._privacy_page_locator))
[docs] def tap_open_source_notices(self): element = self.marionette.find_element(*self._open_source_notices_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() iframe = self.marionette.find_element(*self._notice_text_locator) Wait(self.marionette).until(expected.element_displayed(iframe)) self.marionette.switch_to_frame(iframe) _last_child_locator = (By.CSS_SELECTOR, 'body > *:last-child') Wait(self.marionette).until(expected.element_displayed(*_last_child_locator)) self.apps.switch_to_displayed_app()
[docs] def tap_obtaining_source_code(self): element = self.marionette.find_element(*self._obtaining_source_code_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() iframe = self.marionette.find_element(*self._source_text_locator) Wait(self.marionette).until(expected.element_displayed(iframe)) self.marionette.switch_to_frame(iframe) _last_child_locator = (By.CSS_SELECTOR, 'body > *:last-child') Wait(self.marionette).until(expected.element_displayed(*_last_child_locator)) self.apps.switch_to_displayed_app()
[docs] def tap_more_info(self): element = self.marionette.find_element(*self._more_info_button_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() return self.MoreInfo(self.marionette)
# In order to access UI, the frame needs to be switched to root
[docs] def tap_update_frequency(self): element = self.marionette.find_element(*self._update_frequency_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() self.marionette.switch_to_frame() Wait(self.marionette).until(expected.element_displayed(*self._update_ok_button_locator))
# When leaving the page, return to the saved application frame
[docs] def exit_update_frequency(self): element = self.marionette.find_element(*self._update_ok_button_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() self.apps.switch_to_displayed_app() Wait(self.marionette).until(expected.element_displayed(*self._page_locator))
[docs] def tap_reset_phone(self): element = self.marionette.find_element(*self._reset_button_locator) Wait(self.marionette).until(expected.element_displayed(element)) element.tap() Wait(self.marionette).until(expected.element_displayed(*self._reset_confirm_locator))
[docs] def confirm_reset(self, response=True): if response is True: self.marionette.find_element(*self._reset_confirm_locator).tap() else: self.marionette.find_element(*self._reset_cancel_locator).tap() Wait(self.marionette).until(expected.element_displayed(self.screen_element))
[docs] class MoreInfo(PageRegion): _root_locator = (By.ID, 'about-moreInfo') _os_version_locator = (By.CSS_SELECTOR, 'small[data-name="deviceinfo.os"]') _hardware_revision_locator = (By.CSS_SELECTOR, 'small[data-name="deviceinfo.hardware"]') _mac_address_locator = (By.CSS_SELECTOR, 'small[data-name="deviceinfo.mac"]') _imei1_locator = (By.CSS_SELECTOR, '.deviceInfo-imeis span[data-slot="0"]') _imei2_locator = (By.CSS_SELECTOR, '.deviceInfo-imeis span[data-slot="1"]') _iccid_locator = (By.CSS_SELECTOR, '.deviceInfo-iccids') _platform_version_locator = (By.CSS_SELECTOR, 'small[data-name="deviceinfo.platform_version"]') _build_id_locator = (By.CSS_SELECTOR, 'small[data-name="deviceinfo.platform_build_id"]') _build_number_locator = (By.CSS_SELECTOR, 'small[data-name="deviceinfo.build_number"]') _update_channel_locator = (By.CSS_SELECTOR, 'small[data-name="app.update.channel"]') _git_commit_timestamp_locator = (By.CSS_SELECTOR, '.gaia-commit-date') _git_commit_hash_locator = (By.CSS_SELECTOR, '.gaia-commit-hash') def __init__(self, marionette): root = marionette.find_element(*self._root_locator) PageRegion.__init__(self, marionette, root) Wait(self.marionette).until(expected.element_displayed(*self._os_version_locator)) @property def screen_element(self): return self.root_element @property def os_version(self): return self.root_element.find_element(*self._os_version_locator).text @property def hardware_revision(self): return self.root_element.find_element(*self._hardware_revision_locator).text @property def mac_address(self): return self.root_element.find_element(*self._mac_address_locator).text @property def imei1(self): return self._get_imei(number=1) @property def imei2(self): return self._get_imei(number=2) def _get_imei(self, number): locator = getattr(self, '_imei{}_locator'.format(number)) imei = self.root_element.find_element(*locator).get_attribute('data-l10n-args') return imei.lstrip('{{"index":{},"imei":"'.format(number)).rstrip('"{}') @property def iccid(self): return self.root_element.find_element(*self._iccid_locator).text @property def platform_version(self): return self.root_element.find_element(*self._platform_version_locator).text @property def build_id(self): return self.root_element.find_element(*self._build_id_locator).text @property def build_number(self): return self.root_element.find_element(*self._build_number_locator).text @property def update_channel(self): return self.root_element.find_element(*self._update_channel_locator).text @property def git_commit_timestamp(self): return self.root_element.find_element(*self._git_commit_timestamp_locator).text @property def git_commit_hash(self): return self.root_element.find_element(*self._git_commit_hash_locator).text # workaround for bug 1202246. Need to call this method after frame switching
[docs] def refresh_root_element(self): self.root_element = self.marionette.find_element(*self._root_locator)