Source code for gaiatest.apps.phone.regions.call_screen

# 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 marionette_driver.marionette import Actions

from gaiatest.apps.phone.app import Phone


[docs]class CallScreen(Phone): MAX_NUMBER_OF_DISPLAYED_DIGITS = 22 _call_screen_locator = (By.CSS_SELECTOR, "iframe[name='call_screen']") # The name of this ID is due to historical reason, back in the time when # the CallScreen was not an attention screen. We need to update it once # bug 1118787 lands. _main_window_locator = (By.ID, 'call-screen') _call_options_locator = (By.ID, 'call-options') _calling_contact_locator = (By.CSS_SELECTOR, 'div.number') _calling_contact_information_locator = (By.CSS_SELECTOR, 'div.additionalContactInfo') _outgoing_call_locator = (By.CSS_SELECTOR, '.handled-call.outgoing') _incoming_call_locator = (By.CSS_SELECTOR, '.handled-call.incoming') _hangup_bar_locator = (By.ID, 'callbar-hang-up') _answer_bar_locator = (By.ID, 'callbar-answer') _lockscreen_handle_locator = (By.ID, 'lockscreen-area-slide') _bluetooth_menu_locator = (By.ID, 'bluetooth-menu') _views_locator = (By.ID, 'views') _incoming_container_locator = (By.ID, 'incoming-container') _incoming_answer_while_on_call_locator = (By.ID, 'incoming-answer') _incoming_info_while_on_call_locator = (By.ID, 'incoming-info') _incoming_number_while_on_call_locator = (By.ID, 'incoming-number') _hangup_button_locator = (By.CSS_SELECTOR, '.handled-call .hangup-button') _keypad_hangup_button_locator = (By.ID, 'keypad-hidebar-hang-up-action-wrapper') _keypad_visibility_button_locator = (By.ID, 'keypad-visibility') _merge_calls_button_locator = (By.ID, 'merge') _conference_call_label_locator = (By.ID, 'group-call-label') _conference_call_locator = (By.ID, 'group-call') _contact_background_locator = (By.ID, 'contact-background') _via_sim_locator = (By.CSS_SELECTOR, '[data-l10n-id="via-sim"]') def __init__(self, marionette): Phone.__init__(self, marionette) self.switch_to_call_screen_frame()
[docs] def switch_to_call_screen_frame(self): self.marionette.switch_to_frame() frame = Wait(self.marionette, timeout=30).until( expected.element_present(*self._call_screen_locator)) self.marionette.switch_to_frame(frame)
@property def outgoing_calling_contact(self): return self.marionette.find_element(*self._outgoing_call_locator).find_element(*self._calling_contact_locator).text @property def incoming_calling_contact(self): return self.marionette.find_element(*self._incoming_call_locator).find_element(*self._calling_contact_locator).text @property def incoming_calling_contact_while_on_call(self): return self.marionette.find_element(*self._incoming_number_while_on_call_locator).text @property def calling_contact_information(self): return self.marionette.find_element(*self._outgoing_call_locator).find_element(*self._calling_contact_information_locator).text @property def conference_label(self): return self.marionette.find_element(*self._conference_call_label_locator).text @property def contact_background_style(self): return self.marionette.find_element(*self._contact_background_locator).get_attribute('style') @property def via_sim(self): return self.marionette.find_element(*self._via_sim_locator).get_attribute('data-l10n-args')
[docs] def wait_for_outgoing_call(self): call = self.marionette.find_element(*self._outgoing_call_locator) contact = call.find_element(*self._calling_contact_locator) Wait(self.marionette).until(lambda m: call.location['y'] == 0 and contact.text)
[docs] def wait_for_incoming_call(self): main_window = self.marionette.find_element(*self._main_window_locator) Wait(self.marionette).until(expected.element_displayed(main_window)) call = self.marionette.find_element(*self._incoming_call_locator) contact = call.find_element(*self._calling_contact_locator) Wait(self.marionette).until(lambda m: main_window.location['y'] == 0 and contact.text)
[docs] def wait_for_incoming_call_while_on_call(self): call = self.marionette.find_element(*self._incoming_info_while_on_call_locator) contact = self.marionette.find_element(*self._incoming_number_while_on_call_locator) Wait(self.marionette).until(lambda m: call.is_displayed() and contact.text)
[docs] def answer_call(self): self.marionette.find_element(*self._answer_bar_locator).tap()
[docs] def answer_call_while_on_call(self): self.marionette.find_element(*self._incoming_answer_while_on_call_locator).tap()
[docs] def a11y_click_hang_up(self): self.accessibility.click(self.marionette.find_element(*self._hangup_bar_locator))
[docs] def a11y_click_keypad_hang_up(self): self.accessibility.click(self.marionette.find_element(*self._keypad_hangup_button_locator))
[docs] def hang_up(self): self.marionette.find_element(*self._hangup_bar_locator).tap() self.marionette.switch_to_frame() Wait(self.marionette).until( expected.element_not_present(*self._call_screen_locator))
[docs] def a11y_hang_up(self): self.a11y_click_hang_up() self.marionette.switch_to_frame() Wait(self.marionette).until( expected.element_not_displayed(*self._call_screen_locator))
[docs] def a11y_keypad_hang_up(self): self.a11y_click_keypad_hang_up() self.marionette.switch_to_frame() Wait(self.marionette).until( expected.element_not_displayed(*self._call_screen_locator))
def _handle_incoming_call(self, destination): lockscreen_handle = self.marionette.find_element(*self._lockscreen_handle_locator) lockscreen_handle_x_centre = int(lockscreen_handle.size['width'] / 2) lockscreen_handle_y_centre = int(lockscreen_handle.size['height'] / 2) handle_destination = lockscreen_handle.size['width'] if destination == 'reject': handle_destination = 0 # Flick lockscreen handle to the destination Actions(self.marionette).flick( lockscreen_handle, lockscreen_handle_x_centre, lockscreen_handle_y_centre, handle_destination, 0 ).perform()
[docs] def reject_call(self): Wait(self.marionette).until( expected.element_displayed(*self._lockscreen_handle_locator)) self._handle_incoming_call('reject') self.marionette.switch_to_frame() Wait(self.marionette).until( expected.element_not_displayed(*self._call_screen_locator))
[docs] def a11y_click_keypad_visibility_button(self): self.accessibility.click(self.marionette.find_element( *self._keypad_visibility_button_locator))
[docs] def merge_calls(self): self.marionette.find_element(*self._merge_calls_button_locator).tap() Wait(self.marionette).until( expected.element_displayed(*self._conference_call_locator))