普通文本  |  90行  |  3.02 KB

# Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging
import os

from autotest_lib.client.common_lib.cros import chrome
from autotest_lib.client.cros import service_stopper
from autotest_lib.client.cros.input_playback import input_playback
from autotest_lib.client.cros.graphics import graphics_utils
from autotest_lib.client.cros.ui import ui_test_base


class ui_AppLauncher(ui_test_base.ui_TestBase):
    """
    Collects screenshots of the App Launcher.
    See comments on parent class for overview of how things flow.

    """

    # The keyboard we are emulating
    _KEYBOARD_PROP = 'keyboard.prop'

    # The keyboard playback data
    _KEYBOARD_PLAYBACK = 'searchkey_tabs_enter'

    def initialize(self):
        """Perform necessary initialization prior to test run.

        Private Attributes:
          _services: service_stopper.ServiceStopper object
        """
        # Do not switch off screen for screenshot utility.
        self._services = service_stopper.ServiceStopper(['powerd'])
        self._services.stop_services()

    def cleanup(self):
        self._services.restore_services()

    def capture_screenshot(self, filepath):
        """
        Take a screenshot of the App Launcher page.

        Implements the abstract method capture_screenshot

        @param filepath: string, Complete path to save the screenshot to.

        """

        # Login and load the default apps
        with chrome.Chrome(disable_default_apps=False):

            # Setup the keyboard file's paths
            property_file = os.path.join(self.bindir, self._KEYBOARD_PROP)
            playback_file = os.path.join(self.bindir, self._KEYBOARD_PLAYBACK)

            # Setup and playback the keyboard commands to open the launcher
            player = input_playback.InputPlayback()
            player.emulate('keyboard', property_file)
            player.find_connected_inputs()
            player.blocking_playback(playback_file, 'keyboard')
            player.close()

            # Take a screenshot and crop to just the launcher
            w, h = graphics_utils.get_internal_resolution()
            upper_x = (w - self.launcher_width) / 2
            upper_y = (h - self.launcher_height) / 2
            box = (upper_x, upper_y, upper_x + self.launcher_width, upper_y +
                   self.launcher_height)

            graphics_utils.take_screenshot_crop(filepath, box)

    def run_once(self):
        # The default launcher dimensions
        self.launcher_width = 768
        self.launcher_height = 570

        w, h = graphics_utils.get_internal_resolution()
        logging.info('DUT screen width: %d' % w)
        logging.info('DUT screen height: %d' % h)

        # If we have a high DPI screen, launcher size is doubled
        if self.launcher_width * 2 < w:
            self.launcher_width *= 2
            self.launcher_height *= 2
            self.tagged_testname += '.large'

        self.run_screenshot_comparison_test()