Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
109 lines
4.3 KiB
Python
Executable file
109 lines
4.3 KiB
Python
Executable file
# 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
|
|
from gaiatest.apps.base import PageRegion
|
|
|
|
import gaiatest.apps.camera.app
|
|
|
|
|
|
class Gallery(Base):
|
|
|
|
name = 'Gallery'
|
|
|
|
_gallery_items_locator = (By.CSS_SELECTOR, 'div.thumbnail')
|
|
_overlay_locator = (By.ID, 'overlay')
|
|
_empty_gallery_title_locator = (By.ID, 'overlay-title')
|
|
_empty_gallery_text_locator = (By.ID, 'overlay-text')
|
|
_progress_bar_locator = (By.ID, 'progress')
|
|
_thumbnail_list_view_locator = (By.CSS_SELECTOR, '#thumbnail-views > footer.thumbnails-list')
|
|
_switch_to_camera_button_locator = (By.ID, 'thumbnails-camera-button')
|
|
_switch_to_multiple_selection_view_locator = (By.ID, 'thumbnails-select-button')
|
|
|
|
def launch(self, empty=False):
|
|
Base.launch(self)
|
|
if empty:
|
|
self.wait_for_overlay_to_show()
|
|
else:
|
|
self.wait_for_thumbnail_view_to_load()
|
|
|
|
def wait_for_thumbnail_view_to_load(self):
|
|
Wait(self.marionette).until(expected.element_displayed(*self._thumbnail_list_view_locator))
|
|
|
|
def wait_for_overlay_to_show(self):
|
|
Wait(self.marionette).until(expected.element_displayed(*self._overlay_locator))
|
|
|
|
def wait_for_files_to_load(self, files_number):
|
|
Wait(self.marionette).until(lambda m: m.execute_script(
|
|
'return window.wrappedJSObject.files.length;') == files_number)
|
|
|
|
def wait_for_thumbnails_to_load(self):
|
|
Wait(self.marionette).until(expected.element_displayed(*self._gallery_items_locator))
|
|
|
|
@property
|
|
def gallery_items_number(self):
|
|
return len(self.thumbnails)
|
|
|
|
def tap_first_gallery_item(self):
|
|
first_gallery_item = self.thumbnails[0]
|
|
if self.is_element_displayed(*self._thumbnail_list_view_locator):
|
|
from gaiatest.apps.gallery.regions.fullscreen_image import FullscreenImage as NextView
|
|
else:
|
|
from gaiatest.apps.gallery.regions.crop_view import CropView as NextView
|
|
first_gallery_item.tap()
|
|
return NextView(self.marionette)
|
|
|
|
@property
|
|
def empty_gallery_title(self):
|
|
return self.marionette.find_element(*self._empty_gallery_title_locator).text
|
|
|
|
@property
|
|
def empty_gallery_text(self):
|
|
return self.marionette.find_element(*self._empty_gallery_text_locator).text
|
|
|
|
@property
|
|
def are_gallery_items_displayed(self):
|
|
return self.is_element_displayed(*self._gallery_items_locator)
|
|
|
|
@property
|
|
def thumbnails(self):
|
|
if self.are_gallery_items_displayed:
|
|
return [self.Thumbnail(self.marionette, thumbnail, index)
|
|
for index, thumbnail in enumerate(self.marionette.find_elements(*self._gallery_items_locator))]
|
|
else:
|
|
return []
|
|
|
|
def switch_to_camera(self):
|
|
switch_to_camera_button = self.marionette.find_element(*self._switch_to_camera_button_locator)
|
|
switch_to_camera_button.tap()
|
|
camera_app = gaiatest.apps.camera.app.Camera(self.marionette)
|
|
camera_app.wait_to_be_displayed()
|
|
self.apps.switch_to_displayed_app()
|
|
return camera_app
|
|
|
|
def switch_to_multiple_selection_view(self):
|
|
self.marionette.find_element(*self._switch_to_multiple_selection_view_locator).tap()
|
|
from gaiatest.apps.gallery.regions.multiple_selection_view import MultipleSelectionView
|
|
return MultipleSelectionView(self.marionette)
|
|
|
|
class Thumbnail(PageRegion):
|
|
|
|
def __init__(self, marionette, element, index):
|
|
self.root_element = element
|
|
# Save the index of the element so we can match it to the js files object
|
|
self.index = index
|
|
Base.__init__(self, marionette)
|
|
|
|
@property
|
|
def absolute_image_size(self):
|
|
'''
|
|
The dimensions of the image on disk, is drawn from the image's metadata
|
|
'''
|
|
return {"height": self.marionette.execute_script('return window.wrappedJSObject.files[%s].metadata.height' % self.index),
|
|
"width": self.marionette.execute_script('return window.wrappedJSObject.files[%s].metadata.width' % self.index)}
|
|
|
|
def tap(self):
|
|
self.root_element.tap()
|