60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
# Copyright 2017 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 os
|
|
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.cros.input_playback import input_playback
|
|
|
|
_KEYBOARD = 'keyboard'
|
|
_KEY_FILENAME = 'keyboard_%s'
|
|
|
|
class Keyboard(object):
|
|
"""An emulated keyboard device used for UI automation."""
|
|
|
|
def __init__(self):
|
|
"""Prepare an emulated keyboard device."""
|
|
self.dirname = os.path.dirname(__file__)
|
|
# Create an emulated keyboard device.
|
|
self.keyboard = input_playback.InputPlayback()
|
|
self.keyboard.emulate(input_type=_KEYBOARD)
|
|
self.keyboard.find_connected_inputs()
|
|
|
|
def press_key(self, key):
|
|
"""Replay the recorded key events if exists.
|
|
|
|
@param key: the target key name, e.g. f1, f2, tab or combination of keys
|
|
'alt+shift+i', 'ctrl+f5', etc.
|
|
|
|
"""
|
|
event_file = os.path.join(self.dirname, _KEY_FILENAME % key)
|
|
if not os.path.exists(event_file):
|
|
raise error.TestError('No such key file keyboard_%s in %s'
|
|
% (key, self.dirname))
|
|
self.keyboard.blocking_playback(filepath=event_file,
|
|
input_type=_KEYBOARD)
|
|
|
|
def playback(self, event_file):
|
|
"""Replay the specified key events file.
|
|
|
|
@param event_file: the filename of the key events
|
|
|
|
"""
|
|
self.keyboard.blocking_playback(filepath=event_file,
|
|
input_type=_KEYBOARD)
|
|
|
|
def close(self):
|
|
"""Clean up the files/handles created in the class."""
|
|
if self.keyboard:
|
|
self.keyboard.close()
|
|
self.keyboard = None
|
|
|
|
def __enter__(self):
|
|
"""Allow usage in 'with' statements."""
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
"""Release resources on completion of a 'with' statement."""
|
|
self.close()
|